Я хотел бы, чтобы плагин ограничивал загрузку таблиц стилей CSS и JS-файлов JavaScript только теми страницами, для которых они необходимы.
Примером моего вопроса является плагин Contact Form 7, который я использовал для создания формы на одной странице моего сайта (страница « свяжитесь со мной »). Однако он добавляет следующие строки на КАЖДУЮ страницу/публикацию на веб-сайте:
<link rel='stylesheet' id='contact-form-7-css' href='http://www.r-statistics.com/wp-content/plugins/contact-form-7/styles.css?ver=2.3.1' type='text/css' media='all' />
<script type='text/javascript' src='http://www.r-statistics.com/wp-content/plugins/contact-form-7/scripts.js?ver=2.3.1'></script>
Это заставляет меня подозревать, что этот плагин ухудшает время загрузки моего сайта для расширения, которое меня интересует только на одной странице сайта.
Таким образом, мой вопрос заключается в том, как я могу удалить эти лишние строки со всех страниц, кроме страницы «Свяжитесь со мной», но без деактивации плагина?
Стили и сценарии всегда настраиваются функциями
wp_enqueue_script()
иwp_enqueue_style()
, которые должны быть привязаны к определенному хуку действия, чтобы функционировать. Я заглянул внутрь контактной формы 7, и похоже, что она использует теги действийwpcf7_enqueue_scripts
иwpcf7_enqueue_styles
для добавления их к хукамwp_print_scripts
иwp_print_styles
.Итак, что вам нужно сделать, это отключить скрипты и стили со всех страниц, кроме вашей страницы контактов. Действие
wp_head
срабатывает перед сценарием и действиями стилей, поэтому вам нужно добавить что-то вроде этого в файл functions.php вашей темы:Функция is_page() вернется,
true
когда вы находитесь на странице контактов (при условии, что имя «свяжитесь со мной»)… вы также можете использовать слаг страницы и идентификатор страницы для фильтра. На всех остальных страницахif()
условное выражение добавит функцию удаления сценария/стиля кwp_head
действию, которое срабатывает непосредственно перед действиямиwp_print_scripts
иwp_print_styles
.Это должно удалить лишний код с ваших страниц, и вам не придется деактивировать подключаемый модуль или редактировать какие-либо основные файлы. Функции и код, которые я перечислил выше, также не приведут к поломке вашей темы, если вы удалите контактную форму 7 в будущем, так что не нужно беспокоиться о совместимости обновлений в будущем.
Здравствуйте Эманн. Отличное решение — спасибо! Как вы думаете, можно ли этот метод включить в плагин, который проверяет, какие хуки используются, а затем позволяет кому-то деактивировать их в соответствии с расположением на странице?
К сожалению, есть много хуков, которые динамически используются в WordPress. Таким образом, вы не можете надежно определить, какие хуки используются… но вы, вероятно, сможете поймать большинство из них таким образом.
Прохладный. вы только что подали мне идею для нового вопроса: wordpress.stackexchange.com/questions/698/…
Просто чтобы вы знали, вы также подали мне идею начать разработку этого плагина 🙂
@EAMann и @Tal Galili — На самом деле вы можете захватить все хуки, даже динамические, используя
all
хук, см. wordpress.stackexchange.com/questions/307