Intereting Posts
symfony, как получить выбранные данные из выбранного Как открыть файл Excel с помощью PHPExcel для чтения и записи? Круговая зависимость. Инъекция объектов, которые напрямую зависят друг от друга удалить * из таблицы не работает PHP – генерировать 8-символьный хеш из целого числа CodeIgniter current_url не отображает строки запроса Действительно ли CURL NOBODY приносит тело? PHP + MYSQL на Duplicate KEY все еще увеличивает ключ INDEX Как я могу использовать несколько типов содержимого заголовков PHP на одной странице? Это возможно? Дружественные URL-адреса – переписывание мод и переадресация php Как разрабатывать, подделывая логин для тестирования ACL в Symfony 2 создать суперглобальные переменные в php? Слияние двух изображений PNG с библиотекой PHP GD mysql Выберите один столбец дважды из той же таблицы с разными датами в предложении where Обслуживание файлов из Google Cloud Store на сайте GAE PHP

Разница между add_filter и add_action

Я просматривал свои функции. add_filter и задавался вопросом, почему CODE A использует add_action а CODE B использует add_filter ?
Основная цель CODE A заключается в том, чтобы включать и исключать определенные категории.
Основная цель CODE B – исключить определенные категории.

Правильно ли использовать add_action для CODE A
и add_filter для CODE B?

,
CODE A: Отобразить определенную категорию (называемую «признаком») для главной страницы, а не «последние сообщения»,

 function featured_category( $query ) { if ( $query->is_home() && $query->is_main_query() ) { $query->set( 'category_name', 'featured' ); $query->set( 'category__not_in', array(60, 61) ); $query->set( 'posts_per_page', 5 ); } } add_action( 'pre_get_posts', 'featured_category' ); 

,
,
CODE B: Исключить «категории статей, спонсируемых по почте» для результатов поиска

function search_filter ($ query) {

  if ( $query->is_search && $query->is_main_query() ) { $query->set('post_type', 'post'); $query->set( 'category__not_in', array(60, 61) ); $query->set( 'posts_per_page', 20 ); } return $query; } add_filter('pre_get_posts', 'search_filter'); 

Solutions Collecting From Web of "Разница между add_filter и add_action"

pre_get_posts – это действие, а не фильтр. $query передается по ссылке, поэтому CODE A работает, не возвращая ничего.

CODE B возвращает $query но снова этот код работает, потому что запрос передан по ссылке. Возвращаемое значение крючка не привязано ни к чему.

 do_action_ref_array( 'pre_get_posts', array( &$this ) ); 

add_action и add_filter используются в разных контекстах, но код тот же ( add_action – это псевдоним add_filter ). В то время как оба набора кода будут работать, правильное использование – add_action .