Обмеження плагіна лише завантажувати його CSS та JS на вибрані сторінки?


9

Я б хотів змусити плагін обмежити завантаження таблиць стилів 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> 

Це змушує мене підозрювати, що цей плагін погіршує час завантаження мого сайту, для розширення, яке цікавить мене лише на одній сторінці на сайті.

Таким чином, моє запитання полягає в тому, як я можу видалити ці зайві рядки зі всіх сторінок, окрім сторінки "Зв'яжіться зі мною", але не вимикаючи плагін?

Відповіді:


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коли ви знаходитесь на сторінці контактів (якщо припустити, що назва "Зв'яжіться зі мною") ... ви також можете використовувати фільтр сторінки та ідентифікатор сторінки для фільтра. На всіх інших сторінках 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.