jleuze
  • 0
Новичок

Добавление CSS на страницу администрирования пользовательского типа записи вызывает ошибку

  • 0

У меня есть этот фрагмент кода в моем плагине Meteor Slides, который загружает таблицу стилей на страницы администратора только для пользовательского типа сообщений слайдов:

    add_action('admin_head', 'meteorslides_admin_css');

function meteorslides_admin_css() {

    global $post_type;

    if (($_GET['post_type'] == 'slide') || ($post_type == 'slide')) :

        echo "<link type='text/css' rel='stylesheet' href='" . plugins_url('/css/meteor-slides-admin.css', __FILE__) . "' />";

    endif;

}

Этот код работает нормально и не вызывает никаких проблем, но в режиме отладки он вызывает эту ошибку, которую я хотел бы устранить:

// Notice: Undefined index: post_type in C:\Program Files\xampp\htdocs\slides\wp-content\plugins\meteor-slides-1.3\meteor-slides-plugin.php on line 476

Я не смог исправить эту ошибку, есть ли у кого-нибудь предложения или другой способ добавить таблицу стилей на страницы администратора определенного типа сообщений?

Share
  1. Вам необходимо проверить наличие 'post_type' в качестве индекса $_GET перед его использованием:

    if ((isset($_GET['post_type']) && $_GET['post_type'] == 'slide') || (isset($post_type) && $post_type == 'slide')) :
    

    Кроме того, вы должны использовать эту wp_enqueue_style функцию вместо того, чтобы повторять свою таблицу стилей по адресу 'admin_head' :

    wp_enqueue_style( 'meteor-slides-admin', plugins_url('/css/meteor-slides-admin.css', __FILE__), array(), '1.0' );
    

    Подробнее о wp_enqueue_style здесь.

    • 0
  2. Есть хуки для добавления действий к определенным страницам… и дополнительно различные переменные, которые содержат данные о текущей странице, типе записи, родительском файле и т.д..

    admin_print_styles будет правильным хуком для использования стилей в очереди, а для страницы редактирования ваше действие может выглядеть примерно так.

    add_action( 'admin_print_styles-edit.php', 'example_function' ); // Will work for any post type, check inside the callback function
    //add_action( 'admin_print_styles-post-new.php', 'example_function' ); // Example
    //add_action( 'admin_print_styles-edit-tags.php', 'example_function' ); // Example
    function example_function() {
        global $typenow;
        if( 'my_custom_type' == $typenow )
            wp_enqueue_style( 'meteor-slides-admin', plugins_url('/css/meteor-slides-admin.css'), array(), '1.0' );
    }
    

    В этом случае хук edit.php, каждая страница администратора имеет аналогичный хук. WordPress admin_header.php в основном имеет набор действий, которые срабатывают, которые выглядят так…

    do_action('admin_enqueue_scripts', $hook_suffix);
    do_action("admin_print_styles-$hook_suffix");
    do_action('admin_print_styles');
    do_action("admin_print_scripts-$hook_suffix");
    do_action('admin_print_scripts');
    do_action("admin_head-$hook_suffix");
    do_action('admin_head');
    

    И admin.php устанавливает суффикс ловушки со следующим..

    $hook_suffix = '';
    if ( isset($page_hook) )
        $hook_suffix = $page_hook;
    else if ( isset($plugin_page) )
        $hook_suffix = $plugin_page;
    else if ( isset($pagenow) )
        $hook_suffix = $pagenow;
    

    Помимо всего основного кода, пример функции, которую я разместил выше, является рабочим примером, который вы можете использовать для таргетинга на экран редактирования сообщений (пользовательский тип или нет)….

    Надеюсь, это поможет..

    • 0

Оставить ответ

You must login to add an answer.