Intereting Posts
ACF Gallery & mqTranslate, название и описание не отображаются на других языках Новое меню Customizer (WP 4.3) – как называется? Пользовательский плагин кэширования старых данных $ _GET не работает в WordPress 3.1? Обновить параметр, сохраненный в многомерном массиве Следуйте за мной в блогах на WordPress (несколько авторов) Проблема с французским сайтом Добавление столбца тега Alt Tag в список медиатеки Загруженные изображения не отображаются в Media Library, если в IPTC есть специальные символы Добавить категории на страницы создавая подключаемый модуль, в котором будут задействованы функции сохранения / обновления сообщений Страница WordPress не отображается – заменена на последние 10 сообщений? WordPress: отображение всех тегов сообщений из определенного термина таксономии Создание системы онлайн-регистрации и заказа Как настроить общий контент между основным сайтом и субдоменом?

add_filter и remove_filter добавлены до и после wp_query

Я только что начал с WordPress Development и нашел следующий блок кода онлайн (в каком-то учебнике)

function filter_where( $where = '' ) { // posts in the last 30 days $where .= " AND post_date > '" . date('Ym-d', strtotime('-30 days')) . "'"; return $where; } add_filter( 'posts_where', 'filter_where' ); $args = array( 'posts_per_page' => -1, ); $the_query = new WP_Query($args); remove_filter( 'posts_where', 'filter_where' ); 

Я не могу понять, почему add_filter и remove_filter вызывается до и после WP_Query? В каком сценарии нам нужно использовать описанную выше модель?

Это было сделано, чтобы ограничить влияние этих фильтров на этот один запрос между обоими вызовами.

Вероятно, есть другие экземпляры WP_Query во время загрузки страницы, и вы не хотите изменять их результаты.

Представьте, что происходит, когда вы не удаляете фильтр: все позже new WP_Query(); вызовы будут ограничены определенным периодом. Все сообщения от автора, всех страниц, пользовательских типов сообщений … это действительно больно.

Вам даже не нужен второй вызов, вы можете удалить фильтр с первого обратного вызова:

 function filter_where( $where = '' ) { remove_filter( current_filter(), __FUNCTION__ ); // posts in the last 30 days $where .= " AND post_date > '" . date('Ym-d', strtotime('-30 days')) . "'"; return $where; }