Если вы в WordPress развития, вы не можете игнорировать крючки долго, прежде чем вы должны углубиться в них головой. Изменение WordPress основных файлов является большой нет-нет, так что всякий раз, когда вы хотите изменить существующую функциональность или создать новую функциональность, вам придется обратиться к крючкам.
В этой статье, я хотел бы развеять некоторые путаницы вокруг крючки, потому что они не только путь к коду в WordPress, но они также учат нас большой шаблон дизайна для развития в целом. Объясняя это в глубину займет немного времени, но медведь со мной: к концу, вы сможете перемешать крючки вокруг, как профессионал.
Дальнейшее чтение на SmashingMag:
- Полезные советы, чтобы начать работу с WordPress крючки
- 10 Полезные WordPress Крюк хаки
- 10 Исключительные WordPress хаки
Почему существуют крючки
Я думаю, что самый важный шаг в захвате крючки, чтобы понять необходимость для них. Давайте создадим версию функции WordPress, которая уже существует, а затем немного развивать ее, используя «крючки мышления».
function get_excerpt($text, $length = 150) {
$excerpt = substr($text,$length)
return $excerpt;
}
Эта функция имеет два параметра: строку и длину, с которой мы хотим ее сократить. Что произойдет, если пользователю нужен отрывок из 200 символов вместо 150-символьного? Они просто изменить параметр, когда они используют функцию. Нет проблем там.
Если вы используете эту функцию много, вы заметите, что параметр для текста, как правило, содержание поста, и что вы обычно используете 200 символов вместо по умолчанию 150. Не было бы славно если вы смогли setup новые значения значения, то, что вы не должны добавить такие же параметры сверх и снова? Кроме того, что произойдет, если вы хотите добавить еще несколько пользовательских текст в конце отрывка?
Таковы виды проблем, которые крючки решить. Давайте взглянем на то, как.
function get_excerpt($text, $length = 150) {
$length = apply_filters("excerpt_length", $length);
$excerpt = substr($text,$length)
return $excerpt;
}
Как вы можете видеть, длина выдержки по умолчанию по-прежнему 150, но мы также применили некоторые фильтры к нему. Фильтр позволяет написать функцию, которая изменяет значение чего-то — в данном случае, длина выдержки. Имя (или тег) этого фильтра, excerpt_length
и если никакие функции не прикреплены к нему, то его значение останется 150. Давайте посмотрим, как мы можем теперь использовать это для изменения значения по умолчанию.
function get_excerpt($text, $length = 150) {
$length = apply_filters("excerpt_length", $length );
$excerpt = substr($text,$length)
return $excerpt;
}
function modify_excerpt_length() {
return 200;
}
add_filter("excerpt_length", "modify_excerpt_length");
Во-первых, мы определили функцию, которая ничего не делает, но вернуть номер. На данный момент, ничего не использует функцию, так что давайте скажем WordPress, что мы хотим, чтобы подключить это в excerpt_length
фильтр.
Мы успешно изменили длину выдержки по умолчанию в WordPress, не касаясь исходной функции и даже не писать пользовательские функции отрывка. Это будет чрезвычайно полезно, потому что если вы всегда хотите выдержки, которые 200 символов долго, просто добавьте это в качестве фильтра, а затем вам не придется указывать его каждый раз.
Предположим, вы хотите, чтобы лавировать на несколько текст, как «Читайте дальше», в конце отрывка. Мы могли бы изменить нашу первоначальную функцию для работы с крючком, а затем привязать функцию к этому крюку, как это:
function get_excerpt($text, $length = 150) {
$length = apply_filters("excerpt_length", $length );
$excerpt = substr($text,$length)
return apply_filters("excerpt_content", $excerpt);
}
function modify_excerpt_content($excerpt) {
return $excerpt . "Read on…";
}
add_filter("excerpt_content", "modify_excerpt_content");
Этот крючок помещается в конце функции и позволяет нам изменить его конечный результат. На этот раз мы также прошли выход, который функция обычно производит в качестве параметра нашего крючка. Функция, которую мы привязим к этому крюку, получит этот параметр.
Все, что мы делаем в нашей функции принимает оригинальное содержание $excerpt
и приложение нашего «Читайте на» текст до конца. Но если мы выберем, мы могли бы также вернуть текст «Нажмите на название, чтобы прочитать эту статью», которая заменит весь отрывок.
Хотя наш пример немного излишним, так как WordPress уже имеет лучшую функцию, мы надеемся, вы получили в борьбу с мышлением за крючки. Давайте посмотрим более подробно на то, что происходит с фильтрами, действия, приоритеты, аргументы и другие вкусные варианты.
Фильтры и действия
Фильтры и действия двух типов крючков. Как вы видели в предыдущем разделе, фильтр изменяет ценность чего-то. Действие, вместо того, чтобы что-то изменять, вызывает другую функцию, чтобы выполнить рядом с ним.
Обычно используется действие крюк wp_head
. Давайте посмотрим, как это работает. Возможно, вы заметили функцию в нижней части раздела вашего сайта head
под названием wp_head()
. Погрузився в код этой функции, вы можете видеть, что она содержит do_action()
вызов. Это похоже apply_filters()
на; это означает, что для запуска всех функций, которые привязаны к wp_head
тегу.
Давайте поставим мета-тег авторского права поверх страницы каждого поста, чтобы проверить, как это работает.
add_action("wp_head", "my_copyright_meta");
function my_copyright_meta() {
if(is_singular()){
echo "";
}
}
Рабочий процесс использования крючков
Хотя крючки лучше документированы в настоящее время, они были пренебречь немного до недавнего времени, понятно. Вы можете найти несколько хороших указателей в Кодексе, но лучше всего использовать это крючок ссылки Адама Брауна, и / или посмотреть на исходный код.
Допустим, вы хотите добавить функциональность в свой блог, который уведомляет авторов, когда их работа публикуется. Для этого вам нужно будет сделать что-то, когда сообщение опубликовано. Итак, давайте попробуем найти крючок, связанный с публикацией.
Можем ли мы сказать, нужно ли нам действие или фильтр? Конечно, мы можем! При публикации публикации публикации мы хотим изменить его данные или сделать совершенно отдельное действие? Ответ последний, так что нам нужно действие. Давайте перейдем к действию ссылку на веб-сайте Адама Брауна, и поиск «Публикация».
Первое, что вы найдете это app_publish_post
. Звучит хорошо; Давайте нажмем на него. Подробная страница не дает нам много информации (иногда это делает), так что нажмите на «Посмотреть крючок в источнике» ссылку рядом с вашей версией WordPress (желательно самая последняя версия) в таблице. Этот веб-сайт показывает только фрагмент файла, и, к сожалению, начало документации отрезаны, так что трудно сказать, если это то, что нам нужно. Нажмите на кнопку «Посмотреть полный файл в SVN», чтобы перейти к полному файлу, чтобы мы могли искать наш крючок.
В файле я просмотра, крючок можно найти в функции, которая — в соответствии с _publish_post_hook()
документацией над ним — это «крюк для планирования пинги и корпуса, когда сообщение опубликовано», так что это не совсем то, что нам нужно.
С некоторыми более исследований в списке действий, вы найдете publish_post
крючок, и это то, что нам нужно. Первое, что нужно сделать, это написать функцию, которая посылает вашу электронную почту. Эта функция будет получать идентификатор поста в качестве аргумента, так что вы можете использовать это, чтобы вытащить некоторую информацию в электронную почту. Вторая задача состоит в том, чтобы подключить эту функцию к действию. Посмотрите на готовый код ниже для деталей.
function authorNotification($post_id) {
global $wpdb;
$post = get_post($post_id);
$author = get_userdata($post->post_author);
$message = "
Hi ".$author->display_name.",
Your post, ".$post->post_title." has just been published. Well done!
";
wp_mail($author->user_email, "Your article is online", $message);
}
add_action('publish_post', 'authorNotification');
Обратите внимание, что функция, которую мы написали, может быть приговочна сама по себе. Он имеет очень специфическую функцию, но он не только можно поть вместе с крючками; вы можете использовать его в коде в любое время. В случае, если вам интересно, wp_mail()
это огромная функция почтового рассылки — посмотрите на WordPress Codex для получения дополнительной информации.
Этот процесс может показаться немного сложным на первый, и, честно говоря, это требует просмотра немного документации и исходного кода на первый, но, как вы становитесь более комфортно с этой системой, ваше время, проведенное исследования, что использовать и когда использовать его будет повторно почти ничего.
Приоритеты
Третий параметр при добавлении ваших действий и фильтров является приоритетом. Это в основном обозначает порядок, в котором прилагается крючки должны работать. Мы не рассмотрели это до сих пор, но присоединение нескольких функций к крючку, конечно, возможно. Если вы хотите, чтобы письмо было отправлено автору, когда его сообщение опубликовано, а также автоматически чирикать пост, они будут написаны в двух отдельных функций, каждая из которых привязана к той же теги ( publish_post
).
Приоритеты определяют, какая функция должна выполняться в первую очередь. Значение по умолчанию составляет 10, но это может быть изменено по мере необходимости. Приоритеты, как правило, не имеют большого значения, однако. Является ли письмо отправлено автору до того, как статья будет отправлена в твиттере, или наоборот, не будет иметь большого значения.
В редких случаях назначение приоритета может быть важным. Возможно, вы захотите перезаписать действия других плагинов (будьте осторожны, в этом случае), или вы можете обеспечить выполнение определенного заказа. Недавно мне пришлось перезаписать функциональность, когда меня попросили оптимизировать веб-сайт. Веб-сайт имел от трех до четырех плагинов, с около девяти файлов JavaScript в общей сложности. Вместо того, чтобы отключить эти плагины, я сделал свой собственный плагин, который overwrote некоторые javaScript-outputting функциональность этих плагинов. Мой плагин затем добавил minified JavaScript код в одном файле. Таким образом, если мой плагин был отключен, все другие плагины будут работать, как ожидалось.
Уточнение аргументов
Четвертый аргумент при добавлении фильтров и действий определяет, сколько аргументов занимает крючковатая функция. Это, как правило, продиктовано сам крючок, и вам нужно будет посмотреть на источник, чтобы найти эту информацию.
Как вы знаете из раньше, ваши функции запускаются, когда они называются apply_filters()
или do_action()
. Эти функции будут иметь тег в качестве первого аргумента (т.е. название крючка вы подключаете), а затем передал аргументы в качестве последующих аргументов.
Например, фильтр default_excerpt
получает два параметра, как видно на включании/post.php.
$post->post_excerpt = apply_filters( 'default_excerpt', $post_excerpt, $post );
Аргументы хорошо названы — $post_excerpt
и — так что легко $post
догадаться, что первый отрывок текста, а второй объект поста. Если вы не уверены, как правило, проще всего либо искать дальше в источнике или вывести их с помощью тестовой функции (убедитесь, что вы не находитесь в производственной среде).
function my_filter_test($post_excerpt, $post) {
echo "<pre>";
print_r($post_excerpt);
print_r($post);
echo "</pre>";
}
add_filter("default_excerpt", "my_filter_test");
Переменные названия крючка
Помнишь, когда мы смотрели на publish_post
это действие? В самом деле, это не используется больше; он был переименован в версии 2.3 до {$newstatus}{$post->post_type}
. С появлением пользовательских типов постов, важно сделать систему достаточно гибкой для них. Этот новый крюк теперь принимает произвольный статус и тип столба (они должны существовать для того чтобы работать, очевидно).
В результате, publish_post
является правильным тегом для использования, но в действительности, вы будете использовать {$newstatus}{$post->post_type}
. Некоторые из них вокруг; именование обычно предполагает, что вам нужно назвать действие.
Кто зацепил на кого?
Чтобы узнать, какая функция крючки в то, что, вы можете использовать аккуратный сценарий ниже, любезно WP Рецепты. Используйте эту функцию без аргументов, чтобы получить массивный список всего, или добавить тег, чтобы получить функции, которые подключены к этому один тег. Это большой, чтобы держать в вашем отладке инструмент пояса!
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 '<pre>';
foreach($hook as $tag => $priority){
echo "<br /><strong>$tag</strong><br />";
ksort($priority);
foreach($priority as $priority => $function){
echo $priority;
foreach($function as $name => $properties) echo "t$name<br />";
}
}
echo '</pre>';
return;
}
Создание собственных крючков
Тонна крючков встроены в WordPress, но ничто не мешает вам создать свой собственный с помощью функций, которые мы смотрели на до сих пор. Это может быть полезно, если вы строите сложный плагин, предназначенный для широкого выпуска; это сделает ваши и другие разработчики рабочих мест намного проще!
В примере ниже, я предположил, что мы строим функциональность для пользователей, чтобы получить возможность отправлять короткие blurbs на стене вашего сайта. Мы напишем функцию, чтобы проверить ненормативную лексику и подключить его к функции, которая добавляет blurbs к стене.
Посмотрите на полный код ниже. Объяснение вытекает.
function post_blurb($user_id, $text) {
$text = apply_filters("blurb_text", $text);
if(!empty($text)) {
$wpdb->insert('my_wall', array("user_id" => $user_id, "date" => date("Y-m-d H:i:s"), "text" => $text), array("%d", %s", "%s"));
}
}
function profanity_filter($text) {
$text_elements = explode(" ", $text);
$profanity = array("badword", "naughtyword", "inappropriatelanguage");
if(array_intersect($profanity, $text_elements)) {
return false;
}
else {
return $text;
}
}
add_filter("blurb_text", "profanity_filter");
Первое, что в коде является обозначение функции, которая добавляет рекламное объявление. Обратите внимание, что я включил apply_filters()
функцию, которую мы будем использовать, чтобы добавить нашу ненормативную лексику проверки.
Далее идет наша функция проверки ненормативной лексики. Это проверяет текст в качестве аргумента против массива известных непослушных слов. Используя, array_intersect()
мы ищем элементы массива, которые находятся в обоих массивах — это будут профанные слова. Если таковые имеются; в return false
противном случае верните исходный текст.
Последняя часть на самом деле крючки эту функцию в нашем рекламном сноте добавления.
Теперь другие разработчики могут подключить свои собственные функции в наш сценарий. Они могут построить спам-фильтр или лучший фильтр ненормативной лексики. Все, что им нужно сделать, это подключить его дюйма
Смешивание и соответствие
Красота этой системы является то, что она использует функции для всего. Если вы хотите, вы можете использовать тот же фильтр ненормативной лексики для других целей, даже за пределами WordPress, потому что это просто простая функция. У вас уже есть функция ненормативной лексики-фильтра? Копировать и вставить его в; Все, что вам нужно сделать, это добавить одну строку, которая на самом деле крючки его дюйма Это делает функции легко многоразового в различных ситуациях, давая вам больше гибкости и сэкономить некоторое время, а также.
Это всё
Надеюсь, теперь вы полностью понимаете, как работает система крючков в WordPress. Он содержит важную картину, что многие из нас могли бы использовать даже за пределами WordPress.
Это один аспект WordPress, что занимает некоторое время привыкнуть, если вы подходите к нему без каких-либо предыдущих знаний. Самая большая проблема, как правило, что люди теряются во всех доступных фильтров или в поиске своих аргументов и так далее, но с некоторым терпением это может быть преодолено легко. Просто начните использовать их, и вы будете мастером в кратчайшие сроки!
Источник: smashingmagazine.com