Добавление стилей CSS только к страницам в административной зоне (не к записям или пользовательским типам записей)

Вопрос или проблема

Я использую это для загрузки css-стилей в админской области (для любого пользователя, который не является администратором):

function wpse_admin_styles() {
    if ( !current_user_can( 'manage_options' ) ) {
        echo '<style>
                .fun-stuff-here {color:aqua;}
            </style>
        ';
    }
}
add_action('admin_head', 'wpse_admin_styles');

Но мне нужно, чтобы некоторые стили загружались только в том случае, если просматриваемая админская страница является страницей (а не записью или записью пользовательского типа)

Это возможно? Я думаю, что ответ, выбранный в этом вопросе WPSE, имеет некоторый потенциал, но я не знаю, как добавить необходимый код к тому, что у меня есть: Как добавить админскую функцию только к записям, а не страницам?

Я также наткнулся на этот пост на форуме поддержки WordPress. Ответ ОП внизу (8-й пост сверху) выглядел многообещающим, но на практике он применяет CSS ко всем разделам Страниц, Записей и Пользовательского типа записей: http://wordpress.org/support/topic/add-new-page-button-in-admin-area

Как на фронтенде в WordPress, на админских страницах добавляются различные css-классы к тегу <body>.

Вы можете использовать:

body.post_type-page .fun-stuff-here {
  color:aqua;
}

Держите ваше действие таким же – CSS будет загружен повсюду в админке, но станет актуальным только в разделе Страницы.

(Существует post_type-... для каждого.)

Я столкнулся с похожей проблемой, в конце концов я решил ее, вызвав основной CSS файл фронтенда и создав специальные ID для админских вещей, как так:

function your_css() {
    wp_register_style('your_css', plugins_url('style.css',__FILE__ ));
    wp_enqueue_style('your_css');
}
add_action( 'init','your_css');

Функции wp_register_style & wp_enqueue_style являются хуками/обработчиками WordPress для получения css файла, вместо того, чтобы вставлять css код в вашу функцию 😉

Убедитесь, что она находится в корневом файле плагина!

У меня возникла проблема с конфликтом двух css файлов, поэтому я все еще с этим возюсь, но, по крайней мере, ваш css файл вызывается и (частично) применяется. Удачи!

Ответ или решение

Чтобы добавить CSS стили только для страниц в админ-панели WordPress (в отличие от записей или пользовательских типов записей), необходимо использовать фильтры и условные функции, которые предоставляет WordPress. В данной инструкции мы расскажем, как это сделать шаг за шагом.

Шаг 1: Определение нужного условия

Первый шаг — это выявить, на какой странице вы находитесь в админ-панели. WordPress добавляет определенные классы к тегу <body> на админ-страницах, что позволяет нам использовать их для условной загрузки стилей. Например, для страниц у вас будет класс post-type-page.

Шаг 2: Создание функции для добавления стилей

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

Вот как может выглядеть ваша улучшенная функция:

function wpse_admin_styles() {
    // Проверка, является ли пользователь администратором
    if ( !current_user_can( 'manage_options' ) ) {
        // Проверка, находится ли пользователь на странице редактирования страницы
        $current_screen = get_current_screen();
        if ($current_screen->post_type === 'page') {
            echo '<style>
                    .fun-stuff-here {color:aqua;}
                  </style>';
        }
    }
}
add_action('admin_head', 'wpse_admin_styles');

Шаг 3: Понимание кода

  1. Проверка прав пользователя: Мы проверяем, является ли пользователь администратором с помощью функции current_user_can( 'manage_options' ). Если это так, функция завершается и стили не загружаются.

  2. Получение текущего экрана: Функция get_current_screen() возвращает объект текущего экрана. Мы проверяем свойство post_type, чтобы убедиться, что мы находимся на странице.

  3. Вывод CSS стилей: Если все проверки пройдены, мы выводим стили непосредственно в заголовок админки.

Заключение

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

Таким образом, благодаря использованию условий, предоставляемых функцией get_current_screen(), вы можете точно нацелить свои CSS стили на определенные типы контента в админке.

Оптимизация и улучшение

Если вы планируете добавить более сложные стили, вместо непосредственного написания CSS кода в функции вы можете зарегистрировать и подключить свой файл стилей. Это позволит вам более удобно управлять стилями.

Пример регистрации стилей может выглядеть следующим образом:

function wpse_enqueue_admin_style() {
    if ( !current_user_can( 'manage_options' ) ) {
        $current_screen = get_current_screen();
        if ($current_screen->post_type === 'page') {
            wp_enqueue_style('my_custom_admin_style', plugins_url('css/my-style.css', __FILE__));
        }
    }
}
add_action('admin_enqueue_scripts', 'wpse_enqueue_admin_style');

Не забудьте создать файл my-style.css в директории вашего плагина или темы.

Это решение не только упростит вашу работу с CSS, но также улучшит производительность за счет кэширования файлов стилей.

Оцените материал
Добавить комментарий

Капча загружается...