Intereting Posts
Простой вход в систему с тактовой синхронизацией Переменная Не работает Внутри is_author () Массив Intercom Event на WordPress Комментировать сообщение Использовать короткие коды в пользовательских метабоксах с помощью wp_editor? Выделенный сервер и класс WPDB: огромное замедление веб-сайта Отображение роли, которой назначен текущий пользователь Общий вопрос о взаимоотношениях типа «Родитель» и «Дети» В чем разница между терминами и тегами? отображать заголовок / содержание на странице сообщений, используя двадцать пятнадцать Импортировать данные из CSV с пользовательской таксономией редактировать сообщения через интерфейс Что стоит использовать add_action, когда мы можем просто использовать add_filter? Можно ли использовать плагин для хранения всех пользовательских функций для расширения других плагинов Создайте «новые страницы» в разделе администрирования плагина Настройка темы с помощью панели администратора. (Внешний вид-Настройка)

Подключить разные функции к одному и тому же фильтру. ИЛИ Пропустить дополнительные аргументы для существующего фильтра?

Возможно ли связать 3 разных функции с одним и тем же фильтром, например:

<?php if(a){ add_filter('the_content', 'fnc_1'); } else if(b){ add_filter('the_content', 'fnc_2'); } else{ add_filter('the_content', 'fnc_3'); } ?> 

Или, если это невозможно, то могу ли я передать дополнительный аргумент той же функции, чтобы отметить мои 3 разных условия? Что-то вроде:

 <?php if(a){ add_filter('the_content', 'fnc_1', 'condition_a'); } else if(b){ add_filter('the_content', 'fnc_1', 'condition_b'); } else{ add_filter('the_content', 'fnc_1', 'condition_c'); } ?> 

Все, что я мог найти из моего чтения, это то, что он должен что-то делать с apply_filters , но не мог обойти его.

Пожалуйста, кто-нибудь скажет мне, как это сделать? Благодаря!

Solutions Collecting From Web of "Подключить разные функции к одному и тому же фильтру. ИЛИ Пропустить дополнительные аргументы для существующего фильтра?"

Поскольку это действительно интересный вопрос, я отвечу на компиляцию ответа.

Способ 1

Полностью штраф, будет работать. Вот компактный кусок кода, который я использовал для его проверки:

 function fnc_1( $content ) { return 'func1 :: '.$content; } function fnc_2( $content ) { return 'func2 :: '.$content; } function fnc_3( $content ) { return 'func3 :: '.$content; } $a = false; $b = false; if ( $a ) add_filter( 'the_content', 'fnc_1' ); elseif ( $b ) add_filter( 'the_content', 'fnc_2' ); else add_filter( 'the_content', 'fnc_3' ); 

Способ 2

add_filter не позволяет передавать дополнительные аргументы функции фильтра, но если вам действительно нужно использовать одну функцию, вы можете обернуть собственный фильтр вокруг фильтра следующим образом:

 add_filter( 'wpse31470_filter_wrapper', 'wpse31470_filter_wrapper_func', null, 2 ); function wpse31470_filter_wrapper_func( $content, $condition ) { if ( $condition ) return 'TRUE :: '.$content; else return 'FALSE ::'.$content; } add_filter( 'the_content', 'wpse31470_the_content_filter' ); function wpse31470_the_content_filter( $content ) { $condition = true; return apply_filters( 'wpse31470_filter_wrapper', $content, $condition ); } 

Цель wpse31470_the_content_filter – обернуть аргумент, предоставленный фильтром the_content и передать его на свой собственный wpse31470_filter_wrapper вместе с любыми дополнительными аргументами.