Устранение проблем с таблицами стилей (wp_dequeue_style) - PullRequest
1 голос
/ 09 мая 2020

У меня проблемы с удалением (wp_dequeue_style) всех таблиц стилей, загруженных на сайт WP. Я хочу удалить все загруженные стили с целью воссоздать новый стиль, который можно лучше контролировать и оптимизировать, и уменьшить 68 запросов до 1 .

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

Я использую Wordpress v5.4.1 на сервере с Apache 7.2.30. Тема WP - MasterStudy Child, и используются следующие плагины:

  • Breadcrumb NavXT
  • BuddyPress
  • Контактная форма 7
  • GamiPress
  • GTmetrix для WordPress
  • WPBakery Page Builder
  • MasterStudy LMS Система управления обучением PRO
  • MasterStudy LMS
  • Платное членство Pro
  • Slider Revolution
  • Соответствие GDPR ie Согласие
  • Конфигурации STM
  • Менеджер переходных процессов
  • UpdraftPlus - Резервное копирование / восстановление
  • WooCommerce
  • WordPress Importer
  • WP Reset
  • Query Monitor

Я могу получить список всех помещенных в очередь CSS таблиц стилей, используя 3 метода: 1. Chrome Inspector - вкладка Network 2. Query Monitor 3. Нижеприведенный сценарий, используемый в функциях. php родительской темы

function remove_theme_head_styles() {
    global $wp_styles;
    echo "<h2>Enqueued CSS Stylesheets</h2>";
    foreach( $wp_styles->queue as $handle ) :
        echo $handle . ", ";
    endforeach;
}
add_action( 'wp_enqueue_scripts', 'remove_theme_head_styles', 9000 );

Результаты будут следующими:

Метод 1 (Chrome): 68 запросов, хотя некоторые из них дублируются

* 105 6 * Метод 2 (Монитор запросов): 66 стилей

Метод 3 (php скрипт): 52 результата

Далее, давайте переключимся из списка всех помещенные в очередь CSS файлы, чтобы удалить их с помощью этого скрипта

function remove_theme_head_styles() {
    global $wp_styles;
    foreach( $wp_styles->queue as $handle ) :
        wp_dequeue_style( $handle );
        wp_deregister_style( $handle );
    endforeach;
}
add_action( 'wp_enqueue_scripts', 'remove_theme_head_styles', 9000 );

Давайте посмотрим, что у нас теперь есть:

Метод 2 (Монитор запросов): 13 стилей - все они загружены в нижний колонтитул. 10 из них поступают из родительской темы, а остальные 3 - из основного плагина темы MasterStudy LMS

Метод 1 (chrome): 14 запросов, как в QM, за исключением 1 дополнительного семейство шрифтов CSS

Метод 3 (php script echo): 0 результатов

Итак, возможно, нам нужно изменить крючок, go дальше вниз порядок перехватов, чтобы также включить таблицы стилей, помещенные в нижний колонтитул. Давайте попробуем wp_print_footer_scripts с большим числом для приоритета

add_action( 'wp_print_footer_scripts', 'remove_theme_head_styles', 9000 );

Результат: Метод 1 (chrome): 65 запросов, WTF? почти все они загружены!

Метод 2 (Монитор запросов): 0 Стили

Метод 3 (php скрипт): 0 результатов - тот же хук, что и для листинг, wp_print_footer_scripts

И ДА, веб-страница была отрисована соответствующим образом, поэтому Chrome Inspector не ошибается, но это не означает, что другие 2 метода дают ложные результаты. Это просто означает, что файлы CSS повторно ставятся в очередь после того, как сгенерированы результаты методов 2 и 3. Но как это происходит, я не могу понять.

Я также пробовал разбить процесс удаления на 2 крючка, 1 с wp_enqueue_scripts и еще один с другими хуками, такими как wp_footer и т.п., но безуспешно

10 стилей «проблем», исходящих из самой темы, загружаются с помощью этой функции

themes / masterstudy / inc / custom. php

function stm_module_styles($handle, $style = 'style_1', $deps = array(), $inline_styles = '')
{
    $path = get_template_directory_uri() . '/assets/css/vc_modules/' . $handle . '/' . $style . '.css';
    $handle = 'stm-' . $handle . '-' . $style;
    wp_enqueue_style($handle, $path, $deps, STM_THEME_VERSION, 'all');

    if (!empty($inline_styles)) wp_add_inline_style($handle, $inline_styles);
}

Вот пример использования функции выше

themes / masterstudy / vc_templates / stm_mailchimp. php

stm_module_styles('mailchimp', 'style_1', array(), $inline_styles);

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

Итак, если кто-то может предложить некоторую помощь, это будет буду очень признателен

Спасибо, что нашли время и прочитали это

1 Ответ

0 голосов
/ 19 августа 2020

Приведенный ниже подход, вероятно, не самый лучший, но мне недавно потребовалось предотвратить загрузку V C бесплатной версии FontAwesome (я использую профессиональную версию в своей теме), и никакое удаление из очереди / отмены регистрации не сработает - ниже - единственный способ остановить его загрузку (без редактирования файлов вне моей темы).

...