Intereting Posts
Удалить номер в URL-адресе Влияние спам-комментариев на использование ресурсов хостинга (CPU) Установка и загрузка дополнительных плагинов при выполнении модульных тестов Есть ли способ определить $ post var вне цикла? Разрешить посетителям загружать изображение и выбирать изображение водяного знака Не использует admin-ajax для ajax-представлений? загрузка javascript CDN с локальным резервным (не jQuery) Не удалось подключиться к FTP-серверу 127.0.0.1/:21 WP_Query с дочерним элементом Общий хостинг, несколько сайтов, не может войти в WP из-за перенаправления .htaccess Отображение числовой разбивки на страницы и предыдущей и следующей ссылки в WordPress? Как создать таблицу базы данных, добавить данные, обновить и удалить с помощью wpdb через плагины? Ссылки wp_mail мертвы Почему необходимо предотвратить прямой доступ к включенным файлам? Созданные WordPress ссылки – menus и home_url () – не используя https, несмотря на настройки

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

Возможно ли связать 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 вместе с любыми дополнительными аргументами.