Можно ли использовать add_filter() внутри другой функции?
Я новичок в WordPress и сейчас разрабатываю свой первый плагин, столкнувшись с трудностями.
Как я могу вставить действие add_filter
внутри моей функции submit? Мне нужно, чтобы действие add_filter
выполнялось после нажатия пользователем кнопки submit.
Я пробовал так, но это не сработало.
if(isset($_POST['btn_submit'])) {
function addContent($content = '') {
$content .= "Мой контент";
return $content;
}
add_filter('the_content', 'addContent');
}
Любая помощь будет очень ценной. Спасибо!

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

Я хочу добавить контент внизу каждой записи на моем сайте, и add_filter() сделал это, но действие add_filter() обрабатывается только при активации плагина. Но что если я хочу, чтобы оно обрабатывалось после нажатия кнопки отправки? Будет ли работать apply_filters()? Я уже прочитал документацию по apply_filters() и не нашел решения своего вопроса.

Я просто хочу сказать, что уже решил эту проблему. Я отделил функцию addContent от функции submit и добавил строку кода внутри функции submit, которая вызывает функцию для добавления контента.
Что-то вроде этого:
`function addContent($content = '') { $content .= "Мой контент"; return $content; }
add_filter('the_content', 'addContent');
if(isset($_POST['btn_submit'])) { $content .= addContent(); }`
Это сработало для меня.. спасибо большое.

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

@Shaon, Спасибо за ваш ответ. У меня не получилось эффективно реализовать это решение, но я нашел вполне рабочую функцию: http://core.trac.wordpress.org/ticket/15311#comment:13
