Можно ли использовать add_filter() внутри другой функции?

7 февр. 2012 г., 15:38:10
Просмотры: 13.2K
Голосов: 2

Я новичок в WordPress и сейчас разрабатываю свой первый плагин, столкнувшись с трудностями.

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

Я пробовал так, но это не сработало.

if(isset($_POST['btn_submit'])) {

    function addContent($content = '') {            
        $content .= "Мой контент";

        return $content;
    }

    add_filter('the_content', 'addContent');
}

Любая помощь будет очень ценной. Спасибо!

1
Комментарии

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

EAMann EAMann
7 февр. 2012 г. 17:26:35
Все ответы на вопрос 3
3

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

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

7 февр. 2012 г. 15:46:27
Комментарии

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

ronniel ronniel
7 февр. 2012 г. 16:15:27

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

Что-то вроде этого:

`function addContent($content = '') { $content .= "Мой контент"; return $content; }

add_filter('the_content', 'addContent');

if(isset($_POST['btn_submit'])) { $content .= addContent(); }`

Это сработало для меня.. спасибо большое.

ronniel ronniel
7 февр. 2012 г. 16:31:14

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

mor7ifer mor7ifer
7 февр. 2012 г. 16:31:22
0

Вы также можете записать следующим образом:

    function addContent($content = '') {    
     $content .= "Мой контент";    
     return $content; 
    }

   if(isset($_POST['btn_submit'])) {
    add_filter('the_content', 'addContent'); }
7 февр. 2012 г. 17:38:55
0

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

28 мар. 2012 г. 03:23:13