You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WP REST API中is_main_query()始终返回false的解决方法求助

解决WP REST API中is_main_query()返回false的问题

我太懂这个坑了——当初第一次对接WP REST API时也踩过同样的雷。核心问题在于REST API的查询逻辑和前端归档页完全不同,下面给你两种靠谱的解决方案:

为什么is_main_query()在这里失效?

WordPress的REST API请求不会触发传统意义上的"主查询"(也就是对应$wp_query的全局主查询对象),它会单独创建一个WP_Query实例来处理接口请求,所以is_main_query()在REST环境下永远返回false,你之前基于这个条件写的排序逻辑自然不会生效。


方案一:调整pre_get_posts的判断条件

你可以在原有的pre_get_posts钩子中,补充对REST请求的判断,替代或配合is_main_query()的检查。首先先写一个辅助函数来识别REST请求:

function is_rest_request() {
    return defined('REST_REQUEST') && REST_REQUEST;
}

然后修改你的pre_get_posts回调代码:

add_action('pre_get_posts', 'custom_sort_events');
function custom_sort_events($query) {
    // 同时满足:是events文章类型 + (主查询 OR REST请求)
    if ( $query->get('post_type') === 'events' && ( $query->is_main_query() || is_rest_request() ) ) {
        // 应用你的时间戳排序规则
        $query->set('meta_key', '你的时间戳元数据键名');
        $query->set('orderby', 'meta_value_num');
        $query->set('order', 'ASC'); // 按需求换成DESC也可以
    }
}

这样不管是前端归档页的主查询,还是REST API的查询,都会执行你的排序逻辑。


方案二:使用REST API专属过滤器(更推荐)

WP REST API为每个自定义文章类型提供了专属的查询过滤器:rest_{post_type}_query,针对你的events类型就是rest_events_query。用这个过滤器可以精准修改REST请求的查询参数,完全不会影响前端的查询逻辑:

add_filter('rest_events_query', 'rest_sort_events_query');
function rest_sort_events_query($args, $request) {
    // 给REST查询添加排序规则
    $args['meta_key'] = '你的时间戳元数据键名';
    $args['orderby'] = 'meta_value_num';
    $args['order'] = 'ASC';
    
    return $args;
}

这种方式更贴合REST API的设计逻辑,也能避免前后端查询逻辑互相干扰。


额外小提示

如果你的APP需要直接获取这个时间戳元数据,别忘了把它注册到REST API的响应里:

add_action('rest_api_init', 'register_events_meta_rest');
function register_events_meta_rest() {
    register_rest_field('events', '你的时间戳元数据键名', array(
        'get_callback' => function($post) {
            return get_post_meta($post['id'], '你的时间戳元数据键名', true);
        },
        'schema' => array(
            'type' => 'integer',
            'description' => '活动的时间戳'
        ),
    ));
}

这样APP端就能直接拿到这个时间戳,方便后续的展示和处理。

内容的提问来源于stack exchange,提问作者Stefan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:17:29