Ограничить плагин только для загрузки его CSS и JS на выбранных страницах?


9

Я бы хотел, чтобы плагин ограничивал загрузку таблиц стилей 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> 

Это заставляет меня подозревать, что этот плагин ухудшает время загрузки моего сайта, поскольку расширение интересует меня только на одной странице сайта.

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

Ответы:


9

Стили и сценарии всегда устанавливаются функциями wp_enqueue_script()и wp_enqueue_style()должны быть привязаны к определенному хуку действий, чтобы функционировать. Я взял быстрый взгляд в форме контактов 7, и похоже , что он использует тег действий из wpcf7_enqueue_scriptsи wpcf7_enqueue_stylesдобавить их к wp_print_scriptsи wp_print_stylesкрючки.

Итак, вам нужно отсоединить скрипты и стили от каждой страницы, кроме вашей страницы контактов. В wp_headпожарах действий перед сценарием и стилей действий, так что вам нужно добавить что - то вроде этого в файл functions.php вашей темы:

function remove_wpcf7_extras() {
    remove_action('wp_print_scripts', 'wpcf7_enqueue_scripts');
    remove_action('wp_print_styles', 'wpcf7_enqueue_styles');
}

if( ! is_page('contact me') ) {
    add_action('wp_head', 'remove_wpcf7_extras');
}

Функция is_page () вернется, trueкогда вы окажетесь на странице контактов (при условии, что имя «contact me») ... вы также можете использовать слаг и идентификатор страницы для фильтра. На всех остальных страницах, то if()условный будет добавить функцию удаления сценария / стиля к wp_headдействию, которое выстреливает как раз перед wp_print_scriptsи wp_print_stylesдействиями.

Это должно удалить лишний код с ваших страниц, и вам не нужно будет деактивировать плагин или редактировать какие-либо основные файлы. Функции и код, которые я перечислил выше, также не повредят вашу тему, если вы удалите контактную форму 7 в будущем, так что ... не нужно беспокоиться о совместимости обновления в будущем.


Привет EAMann. Отличное решение - спасибо! Как вы думаете, этот метод может быть включен в плагин, который проверяет, какие хуки используются, а затем позволяет кому-то деактивировать их в соответствии с расположением страницы?
— Тал Галили

К сожалению, есть много хуков, которые динамически используются в WordPress. Таким образом, вы не можете надежно определить, какие крючки используются ... но вы, вероятно, могли бы поймать большинство из них таким образом.
— EAMann

Круто. Вы только что дали мне идею для нового вопроса: wordpress.stackexchange.com/questions/698/…
— Таль Галили

Просто чтобы вы знали, вы также дали мне идею начать разработку этого плагина :-)
— EAMann

3
@EAMann и @Tal Galili - на самом деле вы можете захватить все хуки, даже динамические, используя allхук, см. Wordpress.stackexchange.com/questions/307
— MikeSchinkel
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.