8 хуков для functions.php, необходимых каждому сайту на WP

Что такое хук?

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

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


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

Начинаем

Перед началом работы в этом руководстве предполагается, что у вас установлена локальная среда разработки, включающая последнюю копию WordPress. На момент написания этой статьи это WordPress 4.5.2.

Если вам необходимо руководство по настройке среды разработки, смотрите этот учебник. Он предоставит вам все, что вам нужно знать, чтобы настроить свою среду разработки с веб-сервером, копией PHP, базой данных и WordPress.

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

Но в этом уроке мы концентрируемся на хуках и действиях. Итак, как только вы все настроили, давайте начнем.

Введение. шаблоны:

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

Шаблоны форм входа, регистрации и напоминания пароля расположены по пути:ваш-сайт/wp-content/plugins/wp-recall/templates/

Копируем оттуда:form-register.php – форма регистрацииform-sign.php – форма входаform-remember.php – восстановление пароля

в папку:ваш-сайт/wp-content/wp-recall/templates/- и уже оттуда редактируем под себя. Скопировав сюда – при обновлении плагина изменения не затрутся.

Список всех шаблонов WP-Recall можете найти на этой странице

Введение

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

Что такое хуки?

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

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

Независимо от того, как он определен в Википедии:

Архитектура, управляемая событиями (EDA), также известная как архитектура, основанная на сообщениях, представляет собой шаблон архитектуры программного обеспечения, способствующий созданию, обнаружению, получению и реакции на события.

Если вы только сейчас начинаете разрабатывать шаблоны проектирования или разработки, это определение может показаться сложным, можно немного перефразировать так:

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

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

Склонение дат на сайте

Если вы хотите, чтобы вместо «Опубликовано 31 Декабрь 2022» у вас отображалось «Опубликовано 31 декабря 2022», тогда этот хук обязателен к установке:

function true_russian_date_forms($the_date = ''){if(substr_count($the_date , '---') > 0){returnstr_replace('---', '', $the_date);
	}// массив замен для русской локализации движка и для английской$replacements = array("Январь" => "января", // "Jan" => "января""Февраль" => "февраля", // "Feb" => "февраля""Март" => "марта", // "Mar" => "марта""Апрель" => "апреля", // "Apr" => "апреля""Май" => "мая", // "May" => "мая""Июнь" => "июня", // "Jun" => "июня""Июль" => "июля", // "Jul" => "июля""Август" => "августа", // "Aug" => "августа""Сентябрь" => "сентября", // "Sep" => "сентября""Октябрь" => "октября", // "Oct" => "октября""Ноябрь" => "ноября", // "Nov" => "ноября""Декабрь" => "декабря"// "Dec" => "декабря");
	returnstrtr($the_date, $replacements);
}
 
// если хотите, вы можете приминить только некоторые из фильтровadd_filter('the_time', 'true_russian_date_forms');
add_filter('get_the_time', 'true_russian_date_forms');
add_filter('the_date', 'true_russian_date_forms');
add_filter('get_the_date', 'true_russian_date_forms');
add_filter('the_modified_time', 'true_russian_date_forms');
add_filter('get_the_modified_date', 'true_russian_date_forms');
add_filter('get_post_time', 'true_russian_date_forms');
add_filter('get_comment_date', 'true_russian_date_forms');

Функция склонения дат будет работать как для постов и страниц, так и для комментариев WordPress.

Скрываем имена пользователей из HTML-кода комментариев

Этот хук позволит удалить все имена пользователей из CSS-классов комментариев. Если же у вас стили комментария администратора отличаются от стилей остальных комментов, то благодаря этому хуку вы также можете добавить какой-нибудь особенный класс именно для администратора сайта. Читайте подробнее здесь.

Скрываем версию WordPress

По умолчанию можно узнать версию установленного на сайте WordPress, заглянув в исходный HTML-код или в код RSS. Для того, чтобы не предоставлять злоумышленникам лишней информации, вставляем это в funcions.php:

Подробнее здесь.

Ставим ссылку на себя в футере в админке

Если вы сделали кому-то сайт, то в футер можно добавить ненавязчивое сообщение, что разработкой занимались вы.

В итоге получим:

Вставим фоновую картинку в всплывающую форму:

Для стилизации формы впишем в ваш style.css следующие стили:

Добавим бекграунд к всплывающей форме. два варианта анимации!:

В дополнении Christmas Time я применял данный метод. Там на видео наглядно видно, какая красота может произойти просто вставив в подложку всплывающей формы gif анимацию.В этом примере я покажу как это сделать самостоятельно. Это будут только стили – а значит пример нужно вставлять в свой style.cssКартинку мы будем вставлять к оверлею – а это значит что клик по картинке будет закрывать форму.

Пример 1Вначале просто картинка:

Добавим логотип и надпись к форме входа (и к остальным):

Добавим название сайта и логотип на примере всплывающей формы входа:

Если включено подтверждение регистрации. e-mail не подтвержден. провал проверки:

Если по каким-либо причинам пользователь провалил подтверждение почты – покажем ему дополнительную информацию – почту администрации для решения проблем.

Если включено подтверждение регистрации. покажем в форме свое сообщение: пользователь успешно подтвердил регистрацию:

На последнем шаге регистрации мы покажем свое сообщение:

Изменим сообщение в форме при регистрации:

Если отключено подтверждение регистрации. При успешной регистрации покажем свое сообщение в форме:

Использование javascript

Во-первых, представьте, что вы работаете в интерфейсе разработки. У вас есть кнопка с атрибутом ID command-button, и когда пользователь нажимает на нее, вы хотите отобразить диалоговое окно предупреждений.

Используя jQuery, вы можете реализовать эту функцию следующим образом:

Использование wordpress

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

В WordPress регистрация собственного кода с помощью события, которое срабатывает, немного отличается. Например, предположим, что вы работаете с страницами администрирования в WordPress, и вы хотите добавить новый элемент подменю в меню «Настройки». Мы назовем его Tuts Options.

Для этого мы добавим следующий код в наш файл functions.php или в наш плагин или в любой тип проекта, на котором мы сосредоточены:

Как изменить текст письма отправляемого при регистрации:

На данный момент гибкого решения нет. Только если править саму функцию отправки письма:rcl_register_mail в файле /wp-content/plugins/wp-recall/functions/register.php

Как использовать хуки в вашем блоге

Пока Вы не написали свой плагин, Вы должны записать хуки в файл

functions.php

. Этот файл находится в директории

wp-content/themes/yourtheme

(где

/yourtheme

– директория, в которой находится текущая тема).


Вот пример, который показывает, как подключить Вашу пользовательскую функцию к функции ядра движка:

  1. add_action ( ‘publish_post’, ‘myCustomFunction’ );

В этом примере мы подключили пользовательскую функцию myCustomFunction() к функции ядра publish_post(). Функция myCustomFunction() будет выполняться при каждом выполнении функции publish_post().Конечно, мы можем также удалить хук, используя функцию remove_action():

  1. remove_action ( ‘publish_post’, ‘myCustomFunction’ );

Краткое определение действий

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

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

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

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

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

Настройка нашего файла

В этом уроке мы будем использовать стандартную тему twentysixteen, которая поставляется с WordPress.

В корне каталога темы создайте файл с именем tutsplus-actions.php. Затем в functions.php добавьте следующую строку кода:

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

Объяснение кода.


Суть функции

insertFootNote()

проста: он лишь конкатенирует желаемый текст к переменной

$content

, в которой хранится содержание поста.


Затем, мы присоединяем нашу функцию

insertFootNote()

к функции

the_content()

Видите в строке 2 вот такой код:

  1. if(!is_feed() && !is_home()) {

Если Вам нужно, чтобы текст попадал в RSS-ленту, то замените предыдущий код на этот:

  1. if (!is_home()) {

Вот и все.

Определение пользовательских действий

Когда дело доходит до создания наших собственных действий, мы должны сделать три вещи. На самом фундаментальном уровне, мы должны сделать следующее:

  1. определить хук
  2. Передать функциональность хуку
  3. Разрешить разработчикам вызвать хук

Самый простой пример, который я могу дать для этого, следующий:

Отключение хуков и действий

Всего для этих целей в WordPress существует 4 функции:

Пример для WooCommerce, удаляющий опции сортировки со страницы «Магазин» и категорий товаров:

Подробнее – на видео.

Передача дополнительных аргументов в функцию

Чего ещё не хватает для полного счастья — передачи в подвешенные на хук функции дополнительных параметров. И эта возможность тоже предусмотрена.

Всё начинается с того, что в функциях do_action() или apply_filters() указываются один или несколько параметров.

После этого, четвёртым параметром функции add_action() или add_filter() соответственно вы можете решить, сколько из них можно передать непосредственно в функцию.

add_action('misha_action', 'misha_function_1', 10, 3); // 3 - количество параметров, можно указать и 2, тогда функция misha_function() примет только два параметра, единицу можно не указывать, так как это значение по умолчанию
 
function misha_function_1($param1, $param2, $param3){
 
 	...
 
}

Понимание действий wordpress

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

Пошаговый разбор работы фильтра

Задача фильтра — дополнительно изменить значение какой-либо переменной при помощи произвольной функции, не затрагивая при этом основные файлы движка или плагинов.

Делается это в принципе при помощи двух функций — apply_filters() и add_filter().

  1. Всё начинается с того, что где-то в коде движка WordPress или плагина находится переменная, на которую в последствии нужно будет воздействовать фильтром. На эту переменную вешается функция apply_filters(), и результат действия функции обычно присваивается самой же переменной. Кроме того, тут же задаётся и название фильтра. Например это может выглядит так:
  1. После этого мы уже можем воздействовать на эту переменную извне при помощи add_filter(). Для этого например в файле functions.php или в нашем собственном плагине, который мы разрабатываем на протяжении этого курса, мы создаём функцию с произвольным названием, аргумент функции — переменная $x, внутри функции выполняем с ней все необходимые действия и в конце концов возвращаем результативную переменную. Затем, рядом с функцией вызываем add_filter(), в которой в качестве параметров указываем название фильтра и название нашей произвольной функции. Меньше слов, больше дела — вот как это может выглядеть:

Или вот так начиная с версии PHP 5.3

Но у анонимной функции есть минус – такой хук невозможно будет отключить.

  1. Стоп! Прежде, чем читать пост дальше, рекомендую опробовать всё это у себя. Вам не обязательно писать для этого плагин — просто в теме, например в header.php выведите переменную $x и перед выводом примените к ней фильтр, а в файле functions.php этот фильтр и наложите.

Пример с использованием хука wp_head в wordpress

Просто wp_head это первое, что пришло мне сейчас в голову. Итак, прежде всего откройте страницу вашего сайта, откройте её и в виде HTML-кода в браузере. А теперь зайдите в файл header.php и быстрым нажатием клавиши удалите оттуда функцию wp_head() (она и запускает хук).

Пример с фильтром the_content

Скажите, то содержимое поста, которое находится у вас в редакторе в админке и то, которое выводится на сайте одно и то же или отличается?

Вероятно, это одна из тех вещей, которая фильтруется больше всего – при помощи фильтра the_content на содержимое поста накладываются функции wpautop(), wptexturize(), применяются шорткоды. Кроме того, пользователь тоже мог нагуглить какие-нибудь хуки и с их помощью, скажем, выводить кнопки социальных сетей под постом.

Чтобы посмотреть наглядно, попробуйте вставить этот код в удобное место в теме, в footer.php или в произвольный шаблон страницы:

Приоритеты

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

Покажу простейший пример с использованием анонимных функций (вам нужна версия PHP 5.3.0 или выше) и хуков действий. Если вы вставите этот код куда-нибудь на сайте, то привязанные к хуку функции будут выполняться в порядке подключения в коде

А теперь внимание — функции add_action() и add_filter() третьим параметров поддерживают указание приоритета, с учетом этого видоизменим наш код.

Как видите, чем выше значение приоритета, тем позднее функция будет подключена к хуку и выполнена.

Проблема.


Вы, наверное, уже замечали, что типограф WordPress по умолчанию превращает «прямые» кавычки в «кривые» и делает другие мелкие изменения в форматировании поста.

Это хорошо, если блоггер размещает обычный контент (подразумеваются обычный текст и картинки). Но некоторые постят исходный код, чтобы потом его обсуждать, и они будут очень недовольны, когда из-за этих «кривых» кавычек интерпретатор иди компилятор выдадут им сообщения о синтаксических ошибках.

Работа с действиями

Хотя мы уже рассмотрели конкретный пример действия в приведенном выше примере кода, давайте посмотрим на более полный и практичный пример.

Из коробки WordPress предлагает два типа сообщений: сообщения (для обычных сообщений в блоге) и страницы (для статического содержимого или контента, которые редко меняются). Для стандартной платформы блога этот тип контента, возможно, все, что вам нужно. Но WordPress созрел в CMS несколько лет назад.

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

Чтобы создать свой собственный тип сообщения, нам нужно сделать две вещи:

  1. Определить функцию init, которая перехватывает хук, как это предусмотрено в WordPress
  2. Зарегистрируйте наш тип сообщения с одной из предоставленных функций API

Регистрация нашего действия

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

Наш код должен выглядеть так:

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

Далее нам нужно определить функцию.

Ключ к пониманию сигнатуры этой функции прост: мы назвали ее tutsplus_register_post_type, так как это второй аргумент, который мы передали в вызов add_action.

Она буквально инструктирует WordPress сделать следующее: Во время init вызовите функцию tutsplus_register_post_type.

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

Давайте изменим это.

Редирект после регистрации средствами wp-recall:

Плагин имеет фильтр url_after_register_rcl:

// куда пойдет редирект
apply_filters('url_after_register_rcl',esc_url($_POST['redirect_to']))

Применим его. Сделаем редирект пользователя, после регистрации, на нужную нам страницу:

// редирект после регистрации
function otfm_my_registration_redirect() {
    return home_url('/целевая-страница/');
}
add_filter('url_after_register_rcl', 'otfm_my_registration_redirect',10);

в home_url – впишите свой адрес страницы

Редиректы средствами wordpress:

“Перенаправление пользователя после успешной регистрации””Перенаправление пользователя после входа в систему и выхода””Перенаправление пользователя после сброса пароля”- Все эти вопросы редиректов разбирались в этой статье

Решение.

Как и все предыдущие фрагменты кода следующий также необходимо вставить в файл

functions.php

. Только не забудьте удалить его после использования. Если Вы этого не сделаете, то сообщения будут появляться и после отладки.

Создание пользовательского типа сообщения

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

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

В частности, мы собираемся использовать следующее:

Мы будем полагаться на остальную функциональность, предоставляемую значениями по умолчанию WordPress. Аргументы будут выглядеть так:

И окончательная полная версия кода для регистрации типа сообщения будет выглядеть так:

Когда вы обновляете область администрирования своей WordPress-установки, в пункте Comments, должен появиться новый пункт меню Time Travellers.

Когда вы нажимаете «Добавить новое», вы должны увидеть место для названия (или имени путешественника), редактора (для информации путешественника) и выдержки (возможно, для некоторых заметок о путешественнике). Вы также должны увидеть один мета-бокс для публикации информации.

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

Структура файла form-sign.php – шаблон входа:

Наглядно описал на скриншоте (кликабельно):
8 хуков для functions.php, необходимых каждому сайту на WP
У каждого файла вверху есть табы переключения. Область куда приходят сервисные сообщения. Поля ввода в форме и хук для дополнения формы своими полями.
Если вам нужно что-то дополнить, изменить верстку – то думаю теперь вам не составит труда вписать в нужное место.
Хуки разберем ниже.

Хуки и фильтры формы восстановления пароля:

do_action(‘rcl_remember_form_head’); – реколл хук, срабатывает в шапке формы восстановления пароля

do_action(‘lostpassword_form’); – вордпресс экшен для дополнения своими полями формы восстановления пароля. Не передает ничего. Срабатывает внутри тега form.lostpassword_form в Кодексе вордпресс.

Хуки и фильтры формы входа:

do_action(‘rcl_login_form_head’); – реколл хук, срабатывает в шапке формы входа

do_action(‘login_form’); – вордпресс экшен для дополнения своими полями формы входа. Не передает ничего. Срабатывает внутри тега form.login_form в Кодексе вордпресс.

apply_filters(‘signform_fields_rcl’,$signfields) – реколл фильтр для формы авторизации

Хуки и фильтры формы регистрации:

do_action(‘rcl_register_form_head’); – реколл хук, срабатывает в шапке формы регистрации.

do_action(‘register_form’); – вордпресс экшен, для дополнения своими полями формы регистрации. Не передает ничего. Срабатывает внутри тега form.register_form в Кодексе вордпресс.

Заключение

Определение пользовательских перехватов не сложно, и это также придает нам большую силу и гибкость как разработчикам. Пожалуй, самая запутанная вещь в коде выше – это то, как мы определяем хук в контексте другого хука (то есть мы определяем tutsplus_register_custom_post_type внутри init).

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

Похожее:  15 плагинов для улучшения страницы авторизации в WordPress | Wordpress в квадрате

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

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