Рубрика: WordPress » WordPress-рецепты »

Как подключить JavaScript-код и CSS-стили в WordPress

Если в создаваемом плагине или теме WordPress есть код на JavaScript, важно правильно этот код подключить. Как избежать проблем? Возможно подключение JavaScript не на все страницы сайта, а только на нужные?
Например, плагин добавляет шорткод (shortcode) и использует jQuery:

 Как нельзя поключать JavaScript

Начинающий разработчик WordPress, возможно, просто добавит свой скрипт (add_my_script) в <head> с помощью хука wp_head:

add_action('wp_head', 'add_my_script');

function add_my_script() {
?>
<script type="text/javascript" src="<?php bloginfo('wpurl'); ?>/wp-content/plugins/my-plugin/jquery.js"></script>
<script type="text/javascript" src="<?php bloginfo('wpurl'); ?>/wp-content/plugins/my-plugin/my-script.js"></script>
<?php
}

Что не есть хорошо:

!!! Во-первых, путь к файлам так указывать нельзя, т.к. в  WordPress (начиная с версии 2.6) папку wp-content можно поместить в другое место!

!!! Во-вторых, jQuery следует подключать, только убедившись, что это еще не сделал, например, другой плагин.

В WordPress эти проблемы решаются так:

Подключение JavaScript без проблем: wp_enqueue_script

add_action('template_redirect', 'add_my_script');

function add_my_script() {
 wp_enqueue_script('my-script', plugins_url('my-script.js', __FILE__), array('jquery'), '1.0', true);
}

Этот скрипт делает то же, что и первый, но также:

  • получает URL файла
  • проверяет, вдруг jQuery уже подключен (wp_enqueue_script)

template_redirect вызывается перед определением файла шаблона для отображения запрашиваемой страницы

Если вместо template_redirect использовать хук wp_footer, скрипт будет записан в footer (внизу страницы), и, следовательно, основное содержимое страницы будет загружаться быстрее.

wp_enqueue_scripts (admin_enqueue_scripts в админке) подключает JavaScript-файл, только если он еще не подключен.

И все же одна проблема пока остается, если JavaScript используется не на всех страницах сайта. Зачем загружать ненужный код на другие страницы?

Как добавить JavaScript и CSS только на нужные страницы

wp_enqueue_script() следует вызывать до wp_head(), получается, что принять решение о добавлении JavaScript нужно до обработки страницы.

Но есть способ добавления JavaScript после отображения страницы!

Условие для wp_print_scripts и wp_print_styles

add_action('init', 'register_my_script');
add_action('wp_footer', 'print_my_script');

function register_my_script() {
 wp_register_script('my-script', plugins_url('my-script.js', __FILE__), array('jquery'), '1.0', true);
}

function print_my_script() {
 global $add_my_script;

 if ( ! $add_my_script )
   return;
   wp_print_scripts('my-script');
}

Здесь JavaScript добавляется, только если определена глобальная переменная $add_my_script. Вывод скрипта выполняет wp_print_scripts().

Флаг $add_my_script можно установить в любой функции, в том числе и в обработчике шорткода:

add_shortcode('myshortcode', 'my_shortcode_handler');

function my_shortcode_handler($atts) {
 global $add_my_script;
 $add_my_script = true;
 // код вывода шорткода
}

Так скрипт должен добавляться, только когда на странице есть шорткод [myshortcode ...].

Еще вариант: поиск шорткода в тексте страницы:

add_action( 'wp_print_styles', 'yourplugin_include_css' );
function yourplugin_include_css() {
  // Проверка наличия шорткода (shortcode)
  global $post;
  if ( strstr( $post->post_content, '[yourshortcode]' ) ) {
   echo $csslink;
  }
}

Загрузка JS-скриптов и CSS-стилей только на странице с шорткодом в WordPress 3.3

(Дополнение, 14.01.2012)
Самое приятное в этой истории то, что в WordPress 3.3 задача упрощается, т.к. wp_enqueue_script(),  а также wp_enqueue_style() - подключение стилей можно просто вызвать внутри обработчика шорткода:

add_shortcode('myshortcode', 'my_shortcode_handler');

function my_shortcode_handler($atts) {
 wp_enqueue_script('my-script', plugins_url('my.js', __FILE__), array('jquery'), '1.0', true);
 wp_enqueue_style('my-styles', plugins_url('my.css', __FILE__));
 // код вывода шорткода
}

( использованы материалы статьи scribu.net "How to load JavaScript like a WordPress Master", 16.01.2010)

Параметры wp_enqueue_script: в Кодексе WordPress

Опубликовано в рубрике WordPress-рецепты | с метками . |

Еще записи

5 комментариев на «Как подключить JavaScript-код и CSS-стили в WordPress»

  1. tetti говорит:

    Спасибо. А вы случайно не знаете, как сделать, чтобы NgGallery подключал Javascript в футере страницы, а не в хеадере?

    • Walentin Pushkarew говорит:

      Можно матом, можно молча. Используйте принцип аналогии и подбора, наконец манипуляции с кодом. Здесь классические примеры(выше).

      ===

      Если методы различны, значит и шифрование скрипта явы может быть уместным. Так, например, западные умники шифруют коды защиты контента, который заносят в отдельный файл, к которому дописывают код подключения(по типу подключения CSS), который прописывают в соответствующие страницы index, header, fotter, archive и прочие, главная цель отрубить возможность использования ctrl+u, shift+ctrl+i, ну и соответственно вызов контекстного меню обозревателя пользуясь оптической мышью.

      В сети не мало сервисов для зашифровки, правда не все браузеры могут положительно отвечать, а некоторые и не замечают, однако в примере есть вэб-ресурс который хорошо определён такой защитой.

      Админ, Спасибо!

  2. Валерий говорит:

    Спасибо.
    Долго не мог подключить css к плагину. Оказалось, оф.документация на "родном" сайте устарела, и обработку можно задавать через шоткат. Впервые прочитал об этом у вас, когда уже отчаялся - вроде все делаю по докуметации, а css не подгружается.

  3. Valentin говорит:

    Куда вносить все эти функции? Нужно подключить стили к конкретной странице на сайте от другой похожей темы. Обьясните пошагово действия, пожалуйста.

  4. Ян говорит:

    А как вывести скрипты в таком формате: var = {}; $(document).ready(function(){?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *