Хуки: фильтры и действия. Подробное руководство. Проверка использования фильтра. Пошаговый разбор работы фильтра

Хуки являются очень полезными фишками в Wordpress. Они позволяют как бы «посадить» пользовательскую функцию «на крючок» функции существующей, разрешая тем самым изменять функциональность Wordpress без внесения изменений в файлы ядра движка. В этой статье мы представляем Вам 10 особенно полезных, готовых к использованию хуков для Wordpress, с примерами и пояснениями их исходников.ЧТО ТАКОЕ ХУК? Для достижения определенного эффекта нам нужно слегка изменить принцип работы Wordpress. Некоторые модификации необходимо внести в файлы, которые были названы разработчиками файлами ядра – они нужны для того, чтобы Wordpress работал должным образом.
Но изменение файлов ядра – плохая идея: это может создать брешь в системе безопасности блога. Также, все модификации исчезнут, как только Вы обновите движок до новой версии.
Однако, расширение функциональности все же необходимо. Для этого разработчиками был придуман Plugin API.
Хуки являются одним из главных блоков для построения плагинов. Почти каждый подключаемый плагин использует хуки для расширения функциональности Wordpress.КАК ИСПОЛЬЗОВАТЬ ХУКИ В ВАШЕМ БЛОГЕ Пока Вы не написали свой плагин, Вы должны записать хуки в файл functions.php . Этот файл находится в директории wp-content/themes/yourtheme (где /yourtheme – директория, в которой находится текущая тема).
Вот пример, который показывает, как подключить Вашу пользовательскую функцию к функции ядра движка:
  • add_action ( "publish_post" , "myCustomFunction" ) ;
  • В этом примере мы подключили пользовательскую функцию myCustomFunction() к функции ядра publish_post() . Функция myCustomFunction() будет выполняться при каждом выполнении функции publish_post() .
    Конечно, мы можем также удалить хук, используя функцию remove_action() :

  • remove_action ( "publish_post" , "myCustomFunction" ) ;
  • 1. ОТКЛЮЧАЕМ АВТОМАТИЧСКОЕ ФОРМАТИРОВАНИЕ В WORDPRESSПроблема. Вы, наверное, уже замечали, что типограф Wordpress по умолчанию превращает «прямые» кавычки в «кривые» и делает другие мелкие изменения в форматировании поста.
    Это хорошо, если блоггер размещает обычный контент (подразумеваются обычный текст и картинки). Но некоторые постят исходный код, чтобы потом его обсуждать, и они будут очень недовольны, когда из-за этих «кривых» кавычек интерпретатор иди компилятор выдадут им сообщения о синтаксических ошибках.Решение. Просто вставьте в файл functions.php нижеследующий код:
  • function my_formatter($content ) {
  • $new_content = "" ;
  • $pattern_full = "{(\.*?\)}is" ;
  • $pattern_contents = "{\(.*?)\}is" ;
  • $pieces = preg_split ($pattern_full , $content , - 1 , PREG_SPLIT_DELIM_CAPTURE) ;
  • foreach ($pieces as $piece ) {
  • if (preg_match ($pattern_contents , $piece , $matches ) ) {
  • $new_content .= $matches [ 1 ] ;
  • } else {
  • $new_content .= wptexturize(wpautop($piece ) ) ;
  • return $new_content ;
  • remove_filter("the_content" , "wpautop" ) ;
  • remove_filter("the_content" , "wptexturize" ) ;
  • add_filter("the_content" , "my_formatter" , 99 ) ;
  • После того, как Вы это сделали, можете использовать тэг для того, чтобы текст поста был не отформатирован автоматически:

    This text will not be automatically formatted.Объяснение кода. Первым делом, мы создаем функцию, которая, основываясь на регулярных выражениях, находит тэг в содержании Вашего поста.
    Далее, мы привязываем нашу функцию my_formatter() к функции the_content() , что означает выполнение нашей функции всякий раз, когда вызывается функция the_content() .
    Для того, чтобы отключить автоформатирование, мы использовали функцию remove_filter() .2. ОПРЕДЕЛЯЕМ БРАУЗЕР ПОСЕТИТЕЛЯ ПРИ ПОМОЩИ ХУКОВПроблема. Кросс-браузерная совместимость – это наиболее распространенная проблема в web-разработке. Вы сэкономите много нервов и времени, если сможете определить браузер пользователя, зашедшего на Ваш блог, а затем создав CSS-класс для тэга body под каждый из браузеров. Решение. Ничего сложного: просто вставьте нижеследующий код в файл functions.php , сохраните его – все готово!
  • add_filter("body_class" , "browser_body_class" ) ;
  • function browser_body_class($classes ) {
  • global $is_lynx , $is_gecko , $is_IE , $is_opera , $is_NS4 , $is_safari , $is_chrome , $is_iphone ;
  • if ($is_lynx ) $classes = "lynx" ;
  • elseif ($is_gecko ) $classes = "gecko" ;
  • elseif ($is_opera ) $classes = "opera" ;
  • elseif ($is_NS4 ) $classes = "ns4" ;
  • elseif ($is_safari ) $classes = "safari" ;
  • elseif ($is_chrome ) $classes = "chrome" ;
  • elseif ($is_IE ) $classes = "ie" ;
  • else $classes = "unknown" ;
  • if ($is_iphone ) $classes = "iphone" ;
  • return $classes ;
  • После того, как Вы сохраните файл, функция автоматически будет добавлять CSS-класс, соответствующий пользовательскому браузеру, для тэга body :

    Объяснение кода. Wordpress имеет глобальные переменные, которые возвращают true , если пользователь использует соответствующий браузер. Если пользователь использует браузер Google Chrome, то переменная $is_chrome примет значение true . Вот для чего мы и создаем функцию browser_body_class() . После этого мы присоединяем ее к Wordpress функции body_class() .3. ОПРЕДЕЛЕНИЕ ТЕКСТА ПО УМОЛЧАНИЮ В РЕДАКТОРЕ TinyMCEПроблема. Многие блоггеры почти всегда используют для своего блога один и тот же формат. Сообщения в моем блоге WpRecipes.com всегда отображаются одинаково: текст, код, еще немного текста.
    Можно сэкономить немало времени, если научить TinyMCE отображать какой-нибудь текст по умолчанию.Решение. Как всегда, решением является хук. Копируем код в файл functions.php и смотрим, как он работает.
  • add_filter("default_content" , "my_editor_content" ) ;
  • function my_editor_content( $content ) {
  • $content = "If you enjoyed this post, make sure to subscribe to my rss feed." ;
  • return $content ;
  • Объяснение кода. Этот код хоть и простой, но очень мощный. Просто создаем функцию, которая возвращает требуемый текст (в этом примере мы определяем текст, который спрашивает у посетителей о подписке на RSS-ленту), и присоединяем ее к Wordpress-функции default_content() . Вот так.4. ВСТАВЛЯЕМ КОНТЕНТ АВТОМАТИЧЕСКИ ПОСЛЕ КАЖДОГО ПОСТАПроблема. В большинстве блогов для вывода контента после каждого поста файл single.php , но вот беда: этот контент не будет отображаться в RSS-ленте. Хуки помогут исправить эту проблему.Решение. Все то же самое – просто копируем следующий код в файл fucntions.php .
  • function insertFootNote($content ) {
  • $content .= "" ;
  • $content .= "Enjoyed this article?" ;
  • $content .= "

    Subscribe to our RSS feed and never miss a recipe!

    " ;
  • $content .= "" ;
  • return $content ;
  • add_filter ("the_content" , "insertFootNote" ) ;
  • Объяснение кода. Суть функции insertFootNote() проста: он лишь конкатенирует желаемый текст к переменной $content , в которой хранится содержание поста.
    Затем, мы присоединяем нашу функцию insertFootNote() к функции the_content() .
    Видите в строке 2 вот такой код:
  • if (! is_feed() && ! is_home() ) {
  • Если Вам нужно, чтобы текст попадал в RSS-ленту, то замените предыдущий код на этот:

  • if (! is_home() ) {
  • Вот и все.

    5. ОТКЛЮЧАЕМ СООБЩЕНИЕ С ПРОСЬБОЙ ОБНОВИТЬСЯ В ПАНЕЛИ УПРАВЛЕНИЯ WORDPRESSПроблема. Вы можете видеть информацию о наличии новой версии Wordpress вверху дашборда. Это действительно хорошая штука, так как обновление закрывает дыры в безопасности и позволяет пользоваться Вам последними возможностями движка. Но если блог не Ваш лично, а является проектом для кого-нибудь из клиентов, то давать возможность клиентам самим обновляться – не есть хорошая идея.Решение. Просто вставьте следующий код в файл fucntions.php .
  • if (! current_user_can("edit_users" ) ) {
  • add_action( "init" , create_function ( "$a" , "remove_action("init", "wp_version_check");" ) , 2 ) ;
  • add_filter( "pre_option_update_core" , create_function ( "$a" , "return null;" ) ) ;
  • После того, как Вы сохраните файл functions.php , сообщения Вы больше не увидите.

    Объяснение кода. Для начала, убедимся, что текущий пользователь обладает достаточными правами администратора, чтобы можно было обновить Wordpress. Как только мы в этом убедились, создаем пару хуков, которые переписывают правила отображения сообщений в дашборде.6. ОТКЛЮЧАЕМ АВТОСОХРАНЕНИЕ ПОСТОВПроблема. Wordpress периодически сохраняет пост по мере его введения. Это полезная возможность, но иногда она не требуется.Решение. Для того, чтобы отключить автосохранение поста, просто откройте файл functions.php и вставьте в него следующий код.
  • function disableAutoSave() {
  • wp_deregister_script("autosave" ) ;
  • add_action( "wp_print_scripts" , "disableAutoSave" ) ;
  • Объяснение кода. И вновь, ничего сложного: мы просто создаем функцию, которая отключается автосохранение и привязываем ее к Wordpress-функции wp_print_scripts() .7. ИЗБАВЛЯЕМСЯ ОТ ПОВТОРЯЮЩЕГОСЯ КОНТЕНТА НА СТРАНИЦАХ С КОММЕНТАРИЯМИПроблема. Повторяющийся контент эта довольно распространенная SEO-проблема.
    Введенная в Wordpress версии 2.7 система разбиения комментариев на страницы эту проблему не решает.
    Для предупреждения повторяющегося контента в комментариях будем использовать атрибут rel=«canonical» .Решение. Копируем следующий код и вставляем его в файл functions.php .
  • function canonical_for_comments() {
  • global $cpage , $post ;
  • if ( $cpage > 1 ) :
  • echo "\n " ;
  • echo "
  • echo get_permalink( $post -> ID ) ;
  • echo "" />\n " ;
  • endif ;
  • add_action( "wp_head" , "canonical_for_comments" ) ;
  • Объяснение кода. Сначала, мы создаем функцию, которая добавляет к каждой странице с комментариями, кроме первой, тэг link с атрибутом rel=«canonical» . Затем, присоединяем эту функцию к Wordpress-функци wp_head() .8. ПОЛУЧЕНИЕ ПОСТА ИЛИ СТРАНИЦЫ В КАЧЕСТВЕ PHP-ПЕРЕМЕННОЙПроблема. Возможность получить текущий пост или целую страницу в качестве PHP переменной – действительно крутая вещь. Скажем, Вы можете заменять некоторые части контента при помощи функции str_replace() или делать с ним еще что-нибудь.Решение. И снова ничего сложного. Делаем все то же самое: вставляем следующий код в файл functions.php .
  • function callback($buffer ) {
  • // modify buffer here, and then return the updated code
  • return $buffer ;
  • function buffer_start() {
  • ob_start ("callback" ) ;
  • function buffer_end() {
  • ob_end_flush () ;
  • add_action("wp_head" , "buffer_start" ) ;
  • add_action("wp_footer" , "buffer_end" ) ;
  • Объяснение кода. Для того, чтобы этот хак работал, необходимы три функции:
    • callback() : эта функция возвращает страницу целиком как переменную $buffer . Вы можете модифицировать ее как угодно, например, при помощи регулярных выражений;
    • buffer_start() : эта функция начинает буферизацию. Ее мы присоединяем к функции wp_head() ;
    • buffer_end() : эта функция очищает буфер. Ее мы присоединяем к функции wp_footer() .
    9. ИСПОЛЬЗУЕМ ХУКИ И CRON ДЛЯ СОБЫТИЙ ПО РАСПИСАНИЮПроблема. Вы, наверное, уже знаете, что Wordpress может использовать события по расписанию. К примеру, можно публиковать посты в конкретное, установленное заранее, время. Используя хуки и wp-cron , мы можем запросто задать расписание для нашего собственного события. В следующем примере мы заставим блог отправлять нам сообщения на e-mail один раз каждый час.Решение. Вставляем следующий код в файл functions.php .
  • if (! wp_next_scheduled("my_task_hook" ) ) {
  • wp_schedule_event( time () , "hourly" , "my_task_hook" ) ;
  • add_action( "my_task_hook" , "my_task_function" ) ;
  • function my_task_function() {
  • wp_mail("[email protected]" , "Automatic email" , "Hello, this is an automatically scheduled email from WordPress." ) ;
  • Объяснение кода. Первое, что мы сделаем, конечно, - это создадим функцию, которая будет выполнять требуемое действие. В этом примере эта функция называется my_task_function() и она просто отправляет письмо на указанный e-mail адрес.
    Для того, чтобы запланировать выполнение этой функции, мы будем использовать функцию wp_schedule_event() . Последним аргументом, передаваемым ей, будет наш хук, поэтому мы «цепляем» нашу функцию my_task_function() к my_task_hook .10. СПИСОК ВСЕХ «ХУКНУТЫХ» ФУНКЦИЙПроблема. Когда что-то идет не так, здорово может пригодиться список всех «хукнутых» функций.Решение. Как и все предыдущие фрагменты кода следующий также необходимо вставить в файл functions.php . Только не забудьте удалить его после использования. Если Вы этого не сделаете, то сообщения будут появляться и после отладки.
  • function list_hooked_functions($tag = false ) {
  • global $wp_filter ;
  • if ($tag ) {
  • $hook [ $tag ] = $wp_filter [ $tag ] ;
  • if (! is_array ($hook [ $tag ] ) ) {
  • trigger_error ("Nothing found for "$tag " hook" , E_USER_WARNING ) ;
  • return ;
  • else {
  • $hook = $wp_filter ;
  • ksort ($hook ) ;
  • echo "" ;
  • foreach ($hook as $tag => $priority ) {
  • echo "
    >>>>>\t $tag
    " ;
  • ksort ($priority ) ;
  • foreach ($priority as $priority => $function ) {
  • echo $priority ;
  • foreach ($function as $name => $properties ) echo "\t $name
    " ;
  • echo "" ;
  • return ;
  • После того, как Вы вставите этот код в файл functions.php , вызовите функцию list_hooked_functions() . Она и покажет Вам список всех «хукнутых» функций.

    Объяснение кода. Данный код выясняет, передается ли имя хука в качестве аргумента функции. Если передается, то на экран выводится имя хука. Также можно посмотреть хуки только для определенной функции:

    Ключевая особенность гибкого фундамента WordPress состоит в умелом использовании хуков. Применяемые в темах, плагинах и ядре, хуки позволяют добиться беспрецедентного расширения при сохранении совместимости с последующими версиями WordPress. Отсюда вытекает, что понимание хуков должно составлять обязательную часть «репертуара» разработчиков. Присоединяйтесь к нам – сегодня мы рассмотрим скрытые стороны этой простой, но в то же время мощной системы. О чем пойдет речь: мы пробежимся по концепции хуков, их применению и, естественно, покажем примеры их использования.

    Концепция: что такое хуки и почему они используются?

    За любым качественно написанным программным обеспечением кроется мощная концепция, которая отвечает на вопросы «что такое?» и «почему?». Хуки – не исключение. Говоря простыми словами, хук – это заполнитель для действия. Когда происходит определенное событие, такое как публикация записи, хук активируется, позволяя реализовать соответствующую реакцию. В терминах разработчиков хуки представляют собой пример системы, управляемой событиями.

    Концепция хуков требует более подробного объяснения, нежели простое определение термина – нам нужно понять, чем они полезны. Хуки играют в WordPress ключевую роль вследствие постоянного развития данной системы. Сотни разработчиков постоянно обновляют систему, а значит нет никакой возможности отредактировать базовые файлы каждого плагина, темы или отдельной настройки, так как они будут часто меняться. Вместо этого для расширения системы требуется фреймворк, позволяющий подключать внешнюю функциональность, чтобы добиться такого же мощного эффекта, как и в случае с внутренними манипуляциями. Хуки – ключевая особенность данного фреймворка.

    Как применить хуки?

    Как разработчик, вы должны понимать не только то, что делают хуки или почему они введены, но и знать, как их создавать. Иными словами, чтобы полностью понять систему хуков, нужно разобраться в том, как они применяются.

    По аналогии с письменным тестом, взгляд в ответы – не всегда самая лучшая идея. Как утверждают многие стратегии прохождения тестов, сначала надо прочесть вопрос, сформулировать свои собственные мысли по поводу ответа, и затем уже принять решение, которое ближе всего отвечает вашему обоснованию. Подобный метод может быть применен в процессе изучения разработки программного обеспечения; вместо того чтобы заглядывать в чей-либо код, чтобы понять, как реализуется та или иная особенность, зачастую полезнее сначала написать его самостоятельно, и затем уже вернуться назад и изучить его работу. Именно так мы и поступим.

    Работа с документацией

    Чтобы понять то, как система реализована на практике, зачастую полезно посмотреть в документацию. Давайте изучим статьи о двух базовых функциях подцепления, представленных в кодексе:

    • add_action($hook, $function [, $priority [, $numArgs ] ]) – задает обработчик функции $function, который вызывается в том случае, если определенный хук $hook активирован в результате возникновения события. $priority определяет, будет ли данный обработчик функции вызван до или после других обработчиков функций (по умолчанию переменная равна 10). Чем меньше этот показатель, тем раньше будет вызвана функция. $numArgs – количество аргументов, принимаемых обработчиком функции (по умолчанию 1).
    • do_action($hook [, $arg1 [, $arg2 [, $arg3 [, … ] ] ] ]) – активирует определенный хук $hook путем вызова всех обрабатываемых функций с необязательными аргументами $arg1, $arg2, $arg3 и т.д.

    Теперь, когда у нас в одной руке находится документация, мы можем сделать некоторые выводы по поводу этих двух функций. add_action просто связывает функцию, приоритет и количество аргументов со строкой. Это напоминает идеальную задачу для PHP массивов, которые также работают как хэш-карты, хранящие пары ключ-значение. do_action более тривиальная функция – она обращается к этому массиву, разыскивает функциональные обработчики и вызывает их впоследствии. Держа в памяти нашу схему, самое время перейти к применению хуков.

    Применяем полученные знания на практике

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

    Перед тем как начать, давайте создадим план действий:

    • Нам понадобится глобальный массив, который будет доступен для обеих функций.
    • add_action сохранит в массив заданное имя хука и набор соответствующих обработчиков в виде пары ключ-значение.
    • do_action получит обработчики функций из массива для заданного хука и вызовет каждый из них.

    Код будет выглядеть следующим образом:

    $actions = array(); function add_action($hook, $function) { global $actions; // create an array of function handlers if it doesn"t already exist if(!isset($actions[ $hook ])) $actions[ $hook ] = array(); // append the current function to the list of function handlers $actions[ $hook ] = $function; } function do_action($hook) { global $actions; if(isset($actions[ $hook ])) { // call each function handler associated with this hook foreach($actions[ $hook ] as $function) call_user_func($function); } }

    Отлично; мы создали универсальную систему хуков с помощью примерно 20 строк кода. Теперь, когда у нас есть идея того, как работают хуки, давайте погрузимся в код ядра WordPress, чтобы подтвердить наши гипотезы.

    Быстро перемещаться по коду можно с помощью разных инструментов – таких как, к примеру, Yoast’s PHP Cross Reference of the WordPress Source.

    Поиск по «add_action» выдает следующий код:

    Function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) { return add_filter($tag, $function_to_add, $priority, $accepted_args); } function add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) { global $wp_filter, $merged_filters; $idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority); $wp_filter[$tag][$priority][$idx] = array("function" => $function_to_add, "accepted_args" => $accepted_args); unset($merged_filters[ $tag ]); return true; }

    add_action вызывает add_filter, который, в свою очередь, добавляет заданную функцию в массив, связанный с хуком $tag. Несмотря на то, чтобы здесь мы также используем параметры $priority и $accepted_args, данная функция полностью отвечает нашим предположениям. do_action будет чуть длиннее и сложнее:

    Function do_action($tag, $arg = "") { do { foreach ((array) current($wp_filter[$tag]) as $the_) if (!is_null($the_["function"])) call_user_func_array($the_["function"], array_slice($args, 0, (int) $the_["accepted_args"])); } while (next($wp_filter[$tag]) !== false); }

    Цикличное прохождение по связанным функциям и вызов каждой из них не является для нас чем-то странным; фактически это именно то, о чем мы говорили в нашей реализации. Следовательно, то, что мы начали с мыслей о коде, не только помогло нам лучше понять его, но и пробудило критическое мышление для решения проблемы, что очень важно в разработке программного обеспечения.

    Примеры

    Обладая пониманием работы хуков, давайте взглянем на два следующих примера. Первый пример – работа с RSS; вместо того чтобы рассылать уведомления через синдикацию, почему бы не использовать для этого электронную почту?

    Система почтовых уведомлений

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

    Add_action("publish_post", "notify_via_email");

    Все, что нам осталось сделать, – это отправить уведомление по электронной почте в обработчике функции notify_via_email. Обратите внимание, что хук publish_post передает ID записи как аргумент в нашу функцию. Это позволит нам получить информацию о записи с помощью функции get_post:

    Function notify_via_email($post_id) { $post = get_post($post_id); $to = "[email protected] /* */ "; $subject = "Post Published on " . get_bloginfo("name"); $message = $post->post_title . " was published on " . get_bloginfo("name") . " as of " . $post->post_date . ". You may view it at " . get_permalink($post_id) . "."; wp_mail($to, $subject, $message); }

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

    Плагин Google Analytics

    Наше первое приложение, пусть несколько надуманное, выступило кратким введением в использование хуков. Теперь мы приведем второй пример, который будет уже более близок к реальному использованию на практике. Мы создадим простой плагин Google Analytics, который автоматически вставит код отслеживания в футер страницы.

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

    Но как добавить код в футер сайта? Все так же – с помощью хуков. Если вы работали с WordPress темами раньше, вы, вероятно, вызывали функции wp_head и wp_footer в хэдере и футере вашего сайта соответственно. Обе эти функции просто активируют хуки, чтобы плагины могли легко добавлять свой код в эти жизненно важные области страницы. Следовательно, мы просто добавим действие к хуку wp_footer:

    Add_action("wp_footer", "add_google_analytics_code");

    Наша функция add_google_analytics_code, как и предполагает ее название, печатает код Google Analytics:

    var _gaq=[["_setAccount","UA-XXXXX-X"],["_trackPageview"]]; (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t); g.async=g.src="http://www.google-analytics.com/ga.js"; s.parentNode.insertBefore(g,s)}(document,"script"))

    Обязательно измените UA-XXXXX-X на ваш личный ID, зависящий от сайта. В итоге все заработает. Просто добавьте указанный код в файл и загрузите его в вашу папку с плагинами. Убедитесь в том, что плагин содержит заголовок — к примеру, такой:

    Срабатывает перед подключением подобранного файла шаблона темы, например: single.php , page.php , search.php , 404.php и т.д. Этот фильтр используется для изменения пути до такого файла.

    Фильтр срабатывает после события template_redirect и после того, как WordPress подберет файл, который будет использоваться в качестве файла шаблона. Для каждого типа страницы, файл разный: см. Иерархию файлов темы . Например, мы зашли на постоянную страницу, WordPress подбирает какой файл шаблона должен быть показан - это файл page.php: home/site.ru/wp-content/themes/mytheme/page.php . С помощью этого фильтра можно изменить путь такого файла.

    Во время этого фильтра уже можно использовать условные теги и переменная $post уже определена.

    Использование add_filter("template_include", "filter_function_name_11"); function filter_function_name_11($template) { // Фильтр... return $template; } $template(строка) Полный путь до файла, который будет подключен в качестве шаблона. Пр: home/wptest.ru/wp-content/themes/publisher/page.php . Примеры #1 Файл в каталоге темы

    Шаблон постоянной странице можно задать создав файл в каталоге темы и в начале файла указать PHP комментарий:

    Заголовок

    Какой-то текст



    В продолжение темы:
    Windows

    Часть вторая : "Важнейшие характеристики каждого семейства процессоров Intel Core i3/i5/i7. Какие из этих чипов представляют особый интерес" Введение Сначала мы приведём...

    Новые статьи
    /
    Популярные