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


Я хотел бы заставить плагин ограничить загрузку таблиц стилей CSS и файлов JavaScript JS только теми страницами, для которых они необходимы.

Примером моего вопроса является плагин Контактная форма 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> 

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

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

Author: MikeSchinkel, 2010-08-22

1 answers

Стили и сценарии всегда настраиваются функциями 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, когда вы окажетесь на странице контактов (при условии, что имя "свяжитесь со мной")... вы также можете использовать идентификатор страницы и идентификатор страницы для фильтра. На всех других страницах условие if() добавит функцию удаления сценария/стиля к действию wp_head, которое запускается непосредственно перед действиями wp_print_scripts и wp_print_styles.

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

 9
Author: EAMann, 2010-08-22 14:33:25