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

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

Это правильно использовать add_action для кода A
а также add_filter для кода B?

КОД А. Отображение определенной категории (называемой «избранная») для домашней страницы вместо «самых последних сообщений»

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' );

КОД Б: Исключить «категории спонсируемых сообщений» для результатов поиска

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');

5

Решение

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

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

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

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector