Intereting Posts
Отправлять электронную почту администратору, когда пользователь / член обновляет определенные данные пользователя / члена Вызовите настраиваемое поле в пункт меню Как загрузить пост-контент на индексной странице с помощью ajax при нажатии заголовка на боковой панели Почему я заблокирован из системы? Цикл WordPress, вызывающий ошибки тайм-аута (превышено максимальное время выполнения 30 секунд) Плагин для использования веб-службы Отображение виджета на боковой панели только тогда, когда другие виджеты не отображаются? Разделы настройки не отображаются с помощью `active_callback` Как найти все сообщения без категории и присвоить «Без рубрики»? Результат поиска conditonal tag Проверка доступности API Rewrite Управление памятью при разработке плагинов the_date () не работает Не удается обновить поле user_name_name Создание нового блога с использованием PHP

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

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

У меня есть следующая ситуация:

  • Одна функция плагина проверяет данные POST, представленные в форме.
  • Если проверка не выполнена, генерируется ошибка WP
  • Если в WP Error есть шаблон, он должен показать его, иначе он должен быть нормальным.

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

В файле шаблона темы:

$errors = apply_filters('form_errors',''); if ($errors != '') {echo $errors;} 

Я хотел бы иметь что-то вроде следующего в плагине:

 $errors = validate_form($_POST) // the following line won't work as a callback function is needed. // Using a callback function would probably not solve the issue, as different // errors need to be passed depending on which form is validated. add_filter('form_errors', $errors); // the following would work, but how to pass the actual errors as argument to the return_error function? add_filter('form_errors', 'return_errors'); 

Любые идеи, чтобы избежать объявления $ errors как глобального?

Solutions Collecting From Web of "Как получить доступ к переменным плагина из шаблонов тем, не используя глобальные переменные?"

Использование add_filter автоматически передаст $errors вашей функции обратного вызова:

 add_filter('form_errors', 'return_errors'); function return_errors($errors) { // validate $errors based on form conditions return $errors; } 

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

 return apply_filters('form_errors', $errors, $posted); 

Вы можете использовать:

 add_filter('form_errors', 'return_errors', 10, 2); function return_errors($errors, $posted) { // form validation code using $errors or $posted return $errors; } 

Обратите внимание на причину, по которой вам необходимо установить приоритет фильтра явно, поскольку третий аргумент в этом случае – это значит, что вы можете «перейти к» четвертому аргументу для add_filter что также является числом аргументов фильтра для передачи.