У меня проблемы с тем, чтобы обернуть голову вокруг $valueи $var. Я прочитал кодекс, и это звучит так, как будто его $valueможно изменить $var, но я не нашел никаких примеров этого в дикой природе. Кажется, он используется как способ передачи переменной. В каком случае, в чем разница между этим и $var?
apply_filters(
$filter_name,// used for add_filter( $filter_name, 'callback' );
$value_to_change,// the only variable whose value you can change
$context_1,// context
$context_2 // more context);
Поэтому, когда эта функция вызывается как:
// wp-login.php line 94
apply_filters('login_body_class', $classes, $action );
Если я правильно понимаю. Я не добавляю переменную для сбора возвращенного значения из apply_filters, так как оно автоматически применяется к $ value_to_change?
r00tAcc3ss
@ r00tAcc3ss Ничего не происходит автоматически. Вы должны изменить значение в вашем обратном вызове. Вы также можете вернуть его без изменений, если хотите - в зависимости от контекста.
fuxia
О, да. Я имел в виду, мне не нужно принимать возвращенное значение в другую переменную и присваивать ему значение $ value. Это делается, если я изменил значение $ в подключенной функции и вернул «автоматически».
r00tAcc3ss
11
Что такое фильтры?
Фильтры - это функции, через которые WordPress передает данные в определенные моменты выполнения непосредственно перед тем, как предпринимать какие-либо действия с данными (например, добавлять их в базу данных или отправлять на экран браузера). Фильтры располагаются между базой данных и браузером (когда WordPress генерирует страницы) и между браузером и базой данных (когда WordPress добавляет новые сообщения и комментарии в базу данных); Большая часть ввода и вывода в WordPress проходит как минимум через один фильтр. WordPress выполняет некоторую фильтрацию по умолчанию, и ваш плагин может добавить свою собственную фильтрацию.
Привязка к фильтру
Чтобы позволить пользователям изменять некоторые конкретные данные (значение, выходные данные функции и т. Д.), Через apply_filtersфункции предоставляются ловушки фильтра .
Эти ловушки фильтра включают имя (или тег ) фильтра и, по крайней мере, имя функции, которая должна использоваться для фильтрации (то есть, изменения каким-либо образом) данных.
Чтобы изменить заголовок сообщения, вы можете использовать the_titleловушку фильтра, которая определяется следующим образом:
apply_filters('the_title', $title, $id );
Это означает, что фильтр имеет тег / имя the_title, первый параметр $title- это данные, которые должны быть изменены (т. Е. Заголовок записи), а второй параметр $id- дополнительная информация (в данном случае идентификатор записи).
Например, чтобы отобразить заголовок каждого сообщения в UPPERCASE, вы можете использовать следующую строку:
add_filter('the_title','strtoupper');
Если мы посмотрим на add_filterфункцию, мы увидим, что она определяется следующим образом:
Мы указали только первый и второй (обязательный) параметр, в то время как третий и четвертый параметры установлены в соответствующие значения по умолчанию (т. Е. 10И 1).
Более сложный фильтр
Если вы хотите отфильтровать только определенный пост , вы можете использовать дополнительную информацию (в случае этого фильтра: идентификатор). Чтобы сделать это, вам нужно указать количество параметров (в данном случае это 2), а для того, чтобы сделать это снова, вам нужно указать параметр приоритета (который предшествует количеству аргументов).
Предположим, мы хотим повлиять только на заголовок поста с идентификатором 42, тогда он выглядит так:
add_filter('the_title','my_strtoupper',10,2);function my_strtoupper($title, $id){if(42=== $id)return strtoupper($title);return $title;}// function my_strtoupper
В этом случае мы должны указать все четыре доступных параметра.
Какие параметры у меня есть?
Чтобы определить (количество) доступных параметров определенного фильтра, вы должны посмотреть, где он определен (в данном случае: здесь ).
+1 за исчерпывающий ответ и безупречный класс (приятное форматирование).
Боско
Спасибо, это очень тщательно, но на самом деле не объясняет, о чем я спрашивал. например. разница между переменной $ value и переменной $ var в фильтре.
r00tAcc3ss
Хм, я бы сказал, так и есть, но это, конечно, мое субъективное чувство. Я добавлю немного информации о фильтре и его параметрах.
Что такое фильтры?
Привязка к фильтру
Чтобы позволить пользователям изменять некоторые конкретные данные (значение, выходные данные функции и т. Д.), Через
apply_filters
функции предоставляются ловушки фильтра .Эти ловушки фильтра включают имя (или тег ) фильтра и, по крайней мере, имя функции, которая должна использоваться для фильтрации (то есть, изменения каким-либо образом) данных.
Чтобы изменить заголовок сообщения, вы можете использовать
the_title
ловушку фильтра, которая определяется следующим образом:Это означает, что фильтр имеет тег / имя
the_title
, первый параметр$title
- это данные, которые должны быть изменены (т. Е. Заголовок записи), а второй параметр$id
- дополнительная информация (в данном случае идентификатор записи).Например, чтобы отобразить заголовок каждого сообщения в UPPERCASE, вы можете использовать следующую строку:
Если мы посмотрим на
add_filter
функцию, мы увидим, что она определяется следующим образом:Мы указали только первый и второй (обязательный) параметр, в то время как третий и четвертый параметры установлены в соответствующие значения по умолчанию (т. Е.
10
И1
).Более сложный фильтр
Если вы хотите отфильтровать только определенный пост , вы можете использовать дополнительную информацию (в случае этого фильтра: идентификатор). Чтобы сделать это, вам нужно указать количество параметров (в данном случае это 2), а для того, чтобы сделать это снова, вам нужно указать параметр приоритета (который предшествует количеству аргументов).
Предположим, мы хотим повлиять только на заголовок поста с идентификатором 42, тогда он выглядит так:
В этом случае мы должны указать все четыре доступных параметра.
Какие параметры у меня есть?
Чтобы определить (количество) доступных параметров определенного фильтра, вы должны посмотреть, где он определен (в данном случае: здесь ).
Рекомендации :
apply_filters
функцияadd_filter
функцияисточник