Intereting Posts
Использовать функцию WordPress в php-файле Создать короткий код динамически Vanderlee jQuery выбор цвета и ошибки WordPress Ошибка при обновлении плагинов по FTP «Невозможно найти каталог содержимого WordPress (wp-content)». Есть ли способ вытащить первое изображение в цикле, а не все другие изображения? Есть ли действие, которое вызывается, когда сообщение восстанавливается из корзины? Включить плагин live chat в содержимое страницы Как разбивать список дочерних страниц Как получить список всех пользователей, зарегистрированных до указанной даты? Добавление метабокса на странице подменю CPT Вставьте две строки в базу данных wordpress Различные посты для разных авторов Параметры цвета из API пользовательского интерфейса темы не возвращаются через get_theme_mod () Использование save_post для замены заголовка сообщения получить автора опубликованной публикации

Как использовать wp_dequeue_style () для стиля, помещенного в класс WP_Widget

У меня есть плагин, который создает виджет, который заставляет некоторых интерфейсных CSS создавать стиль виджета. Я вызываю wp_enqueue_style из public wp_enqueue_style widget() в расширенном классе WP_Widget :

 <?php class FPW_Widget extends WP_Widget { // ... public function widget( $args, $instance ) { // enqueuing here ensure that styles only load when plugin is being displayed wp_enqueue_style( 'fpw_styles_css', plugins_url( 'css/fpw_styles.css', dirname(__FILE__)), false, FPW_VERSION ); 

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

Я пробовал wp_dequeue_style() как на wp_enqueue_scripts с высоким приоритетом ( 999 ), так и на widgets_init но без везения.

Возможно ли это, и если да, то как я могу это сделать?

Solutions Collecting From Web of "Как использовать wp_dequeue_style () для стиля, помещенного в класс WP_Widget"

Метод widget() вызывается при визуализации виджета, поэтому стиль, который вы ставите в очередь, печатается в нижнем колонтитуле (заголовок уже напечатан в это время).

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

Это также причина, по которой 'widgets_init' и 'wp_enqueue_scripts' не могут использоваться для удаления стиля: эти крючки 'wp_enqueue_scripts' метода widget() , и вы не можете удалить стиль, который еще не добавлен.

Есть 2 решения.

Решение 1

Первое решение предполагает, что вы хотите сохранить свой подход, даже если не соответствуют стандартам HTML: как только стиль печатается в нижнем колонтитуле, пользователи могут использовать крюк wp_footer для удаления стиля.

Предполагаемый стиль добавляется как:

 public function widget( $args, $instance ) { wp_enqueue_style('fpw_styles_css'); } 

можно удалить с помощью:

 add_action('wp_footer', function() { wp_dequeue_style('fpw_styles_css'); }); 

Решение 2

Если вы хотите, чтобы ваш плагин не печатал недействительный HTML, решение должно использовать is_active_widget() чтобы проверить, активен ли виджет, и присвоить стиль, если это так:

 add_action( 'wp_enqueue_scripts', function() { if ( is_active_widget(false, false, $widgetid) ) { wp_enqueue_style('fpw_styles_css'); } }, 5); // used priority 5 to make possible dequeue using default 10 priority 

Таким образом, стиль будет добавлен внутри <head> , и пользователи смогут удалять стиль с помощью стандартного подхода: wp_dequeue_style() подключен к 'wp_enqueue_scripts' .

Единственная проблема заключается в том, что is_active_widget() не проверяет, действительно ли виджет напечатан на странице, но только если какой-либо экземпляр виджета настроен в бэкэнд, на любой боковой панели. Это означает, что стиль будет добавлен, даже если виджет на самом деле не напечатан на странице.

Тем не менее, пользователи могут легко удалить стиль для определенных страниц, потому что условные теги отлично работают при 'wp_enqueue_scripts' . Пример:

 add_action( 'wp_enqueue_scripts', function() { if (! is_front_page()) { // allow widget style only in front page wp_dequeue_style('fpw_styles_css'); } });