仅针对主要的 WordPress 循环

WordPress 正在将 pre_get_posts 过滤器应用于它生成的任何循环。这意味着我们在回调函数中进行的所有更改都将应用于所有退出循环。

显然,在大多数情况下,它不是我们想要的。

在大多数情况下,我们只想定位 主循环 ,仅适用于非管理员屏幕。

我们可以使用 is_main_query() 方法和 is_admin() 全局函数来检查我们是否在正确的位置。

add_action( 'pre_get_posts', 'my_callback_function' );

function my_callback_function( $query ) {
    if( !$query->is_main_query() || is_admin() ) return;

    // this code will run only if
    // - this query is main query
    // - and this is not admin screen
}