проблема при добавлении jQuery UI на страницу администратора Wordpress - PullRequest
0 голосов
/ 11 января 2012

Я пытаюсь добавить средство выбора даты в пользовательский мета-блок в WordPress. Если я поставлю сценарий в очередь так:

// add stylesheets for date picker
add_action('admin_print_styles', 'add_datepicker_styles');
function add_datepicker_styles() {
    global $post;
    $styleFile = get_bloginfo("template_url").'/refactored-datepicker/css/ui-lightness/jquery-ui-1.8.17.custom.css';
    if(file_exists($styleFile) && $post->post_type == 'show') {
        wp_enqueue_style("datepicker-css", $styleFile);
    }
}
// add javascript for date picker
add_action('admin_print_scripts', 'add_datepicker_js');
function add_datepicker_js() {
    global $post;
    $jsFile = get_bloginfo("template_url").'/refactored-datepicker/js/jquery-ui-1.8.17.custom.min.js';
    if(file_exists($jsFile) && $post->post_type == 'show') {
        wp_enqueue_script("datepicker-js", $jsFile);
    }
}
// add date picker init
add_action('admin_head', 'add_datepicker_init');
function add_datepicker_init() {
    global $post;
    if($post->post_type == 'show') {
        echo "<script type='text/javascript'>jQuery(document).ready(function() { jQuery('#show_date').datepicker(); });</script>";
    }
}

Я получаю ошибку, что jQuery ('# show_date'). Datepicker (); это не функция. Когда я проверяю обработанный исходный код, я вижу, что jQuery загружается по умолчанию, но стиль и скрипт jQuery UI вообще не загружаются. Код, присоединенный к хуку admin_head, загружается нормально, и если я повторяю сценарий и стили в этой функции, она работает так, как я хочу.

// add date picker init
add_action('admin_head', 'add_datepicker_init');
function add_datepicker_init() {
    global $post;
    if($post->post_type == 'show') {
        echo "<link rel='stylesheet' type='text/css' href='".get_bloginfo("template_url").'/refactored-datepicker/css/ui-lightness/jquery-ui-1.8.17.custom.css'."' />";
        echo "<script type='text/javascript' src='".get_bloginfo('template_url').'/refactored-datepicker/js/jquery-ui-1.8.17.custom.min.js'."'></script>";
        echo "<script type='text/javascript'>jQuery(document).ready(function() { jQuery('#show_date').datepicker(); });</script>";
    }
}

Так это проблема с функциями wp_enqueue_style / script () или с хуками add_action? Я новичок в WordPress, поэтому я не совсем уверен, как решить эту проблему. Я сделал поиск в Google, и везде я иду код выглядит как мой. Также, если вам интересно, пути к файлам верны.

Может кто-нибудь придумать решение моей проблемы? Это неправильно, просто повторять сценарий и стили, или я должен поставить их в очередь?

Спасибо!

EDIT:

file_exists ($ jsFile) возвращает false. если я удаляю условную проверку для файла, код работает .. Но почему? как еще можно проверить наличие файла, используя URL-адрес, начинающийся с http: //, а не локальный путь к файлу?

1 Ответ

0 голосов
/ 11 января 2012

Если вы хотите получить локальный путь для вашей темы, вы можете использовать get_theme_root():

$styleFile = get_theme_root().'/refactored-datepicker/css/ui-lightness/jquery-ui-1.8.17.custom.css';
    if(file_exists($styleFile) && $post->post_type == 'show') {

От php.net / file_exists :

этот код здесь, если вы хотите проверить, существует ли файл в другой сервер:

<?php function fileExists($path){
    return (@fopen($path,"r")==true); } ?>

к сожалению, file_exists не может связаться с удаленными серверами, поэтому я использовал функция fopen.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...