Intereting Posts
Отображать пользовательские теги на страницах с определенным родителем страницы Почему мои избранные метаданные не сохраняются? Сбросить отмену в редакторе tinymce Как добавить условия в мой tax_query, основанный на текущем сообщении лучший способ для пользователей приложений отправлять сообщения в блоге? Действие AJAX возвращает пустой массив сообщений? Изменение пользовательских правил переписывания типа в отдельной функции Страница категории не отображается Оценка двух планов безопасности WordPress против атаки на PHP-инъекцию Результаты поиска: различать сообщения и страницы Дополнительные поля пользовательского почтового типа – как обращаться? Архив событий по месяцам Как я могу сделать окно поиска для поиска по настраиваемому полю Как создать ссылку на страницу профиля пользователя Как вставить данные с помощью wp cron

Удалить wp_add_inline_style

Есть ли способ удалить стили, добавленные с помощью wp_add_inline_style?

Я заметил, что если я несколько раз назову wp_add_inline_style, он просто добавляет стиль, он не перезаписывает ранее добавленное.

Плагин добавляет стили:

$inline_css = '#selector{ color:red; }'; wp_add_inline_style($style, $inline_css); 

Если я снова это сделаю:

 $inline_css = '#other-selector{ color:blue; }'; wp_add_inline_style($style, $inline_css); 

Он просто добавит эти css, я хотел бы очистить css перед вызовом wp_add_inline_style снова.

Удалить стили, добавленные с помощью wp_add_inline_style()

Если мы хотим сохранить custom-style-css но только удалим custom-style-inline-css , тогда мы можем попробовать например

 add_action( 'wp_print_styles', function() { // Remove previous inline style wp_styles()->add_data( 'custom-style', 'after', '' ); } ); 

где after – ключ данных для встроенного стиля, соответствующего обработчику custom-style .

Существует оболочка для wp_styles()->add_data() , а именно wp_style_add_data() .

Тогда мы могли бы определить вспомогательную функцию:

 function wpse_remove_inline_style( $handler ) { wp_style_is( $handler, 'enqueued' ) && wp_style_add_data( 'custom-style', 'after', '' ); } 

и используйте его так:

 add_action( 'wp_print_styles', function() { // Remove previous inline style wpse_remove_inline_style( 'custom-style' ); } ); 

Я пропущу function_exists здесь.

Чтобы переопределить встроенный стиль, добавленный другим плагином, с нашим собственным:

 add_action( 'wp_print_styles', function() { // Remove previous inline style wpse_remove_inline_style( 'custom-style' ); // New inline style $custom_css = ".mycolor{ background: {blue}; }"; wp_add_inline_style( 'custom-style', $custom_css ); } ); 

Заметка

Причина, почему это не работает, чтобы переопределить предыдущий встроенный стиль с помощью wp_add_inline_style() состоит в том, что WP_Style::add_inline_style() добавляет каждую входящую строку CSS в массив. Внутри он использует WP_Style::add_data() для хранения накопленного CSS. Здесь мы используем его для преодоления ограничения на добавление wp_add_inline_style() .

Заглянув в файл wp-includes/class.wp-styles.php я нашел фильтр для использования:

 add_action("print_styles_array", function( $styles ) { $my_handle = "custom-style"; // your custom handle here, the one declared as $style in question if ( !empty( $styles ) ) { foreach ( $styles as $i => $style ) { if ( $my_handle === $style ) { unset( $styles[$i] ); } } } return $styles; }); 

Обратите внимание, что это приведет к удалению всех встроенных стилей, обрабатываемых именем дескриптора.