add_filter () не работает в цикле

Я пытаюсь заказать сообщения на домашней странице по дате изменения, и я помещаю этот код в function.php моей активной дочерней темы:

function orderby_last_modified() { return 'post_modified DESC'; } 

Если я добавлю фильтр в тот же файл functions.php, он будет работать:

 add_filter('posts_orderby', 'orderby_last_modified'); 

Но я хочу, чтобы фильтр в цикле домашней страницы, когда я меняю эту строку на домашнюю страницу, просто не работает.

 <?php add_filter('posts_orderby', 'orderby_last_modified'); if(have_posts()): while(have_posts()) atom()->template('teaser'); remove_filter('posts_orderby', 'orderby_last_modified'); ?> 

Он не работает в вашем шаблоне, потому что запрос уже произошел до загрузки шаблона. Если вы хотите добавить свой фильтр только при определенных условиях, вам нужно подключить предыдущее действие, например pre_get_posts , и проверить, является ли запрос для главной страницы:

 function add_my_orderby_filter( $query ) { if ( $query->is_home ) { add_filter('posts_orderby', 'orderby_last_modified'); } } add_action( 'pre_get_posts', 'add_my_orderby_filter' ); 

Это будет идти в ваших functions.php вместе с вашей функцией orderby_last_modified .

См. Ссылку на действие WordPress Action для выполнения действий заказа в запросе.