Как изменить вывод wp_head в WordPress: удаление лишних скриптов и стилей
Я работал над производительностью своего сайта с помощью YSLOW и заметил, что WordPress выводит в head документа вещи, которые мне не нужны.
Например, я уже подключаю jQuery 1.9 с Google CDN, поэтому мне не нужен вызов jQuery из wp-includes.
Также плагин подключает таблицу стилей, которая мне не нужна (поскольку я переопределяю 99% этих стилей в своей теме), и я хотел бы убрать этот вызов.
Итак, как я могу изменить то, что выводится функцией wp_head()
, будь то WordPress (например, вызов jQuery из wp-includes
) или плагин (например, вызов таблицы стилей)?

Во-первых: не подключайте собственные версии скриптов, входящих в ядро WordPress, включая (и особенно) jQuery.
Во-вторых, отвечая на ваш вопрос: эти скрипты и таблицы стилей плагина подключаются в очередь с помощью функции add_action()
, через колбэк, привязанный к одному из следующих хуков:
wp_head
wp_enqueue_scripts
wp_print_scripts
wp_print_styles
(Есть и другие, но эти наиболее вероятны.)
Внутри колбэка используются следующие функции для подключения:
- Таблицы стилей:
wp_enqueue_style()
- Скрипты:
wp_enqueue_script()
Так, для таблицы стилей плагина с именем foobar.css
, вам нужно найти в файлах плагина вызовы wp_enqueue_style()
, затем отметить имя функции-колбэка, в которой он вызывается. Далее найдите вызов add_action()
, который ссылается на эту функцию. Например:
add_action( 'wp_head', 'pluginname_enqueue_styles' );
Как только вы найдёте этот вызов, вы можете переопределить его самостоятельно, используя remove_action()
:
remove_action( 'wp_head', 'pluginname_enqueue_styles' );

Я не согласен с тем, что переопределение стандартных версий с помощью версии, размещенной на CDN, является плохой практикой. Однако ответственность лежит на вас, чтобы убедиться, что вы используете версию, совместимую со всеми вашими плагинами. Обязательно тщательно тестируйте.
Чтобы заменить стандартный jQuery на версию с CDN, добавьте что-то подобное в ваш functions.php
:
function replace_jquery() {
if (!is_admin()) {
wp_deregister_script('jquery');
wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js', false, '1.9.1');
wp_enqueue_script('jquery');
}
}
add_action('init', 'replace_jquery');
