如何通过WordPress REST API获取文章列表并置顶粘性文章?
解决WordPress REST API粘性文章不置顶的问题
问题原因
WordPress REST API的/wp/v2/posts端点默认不支持orderby=sticky参数,直接使用会返回参数无效的错误。而ignore_sticky_posts参数仅用于控制是否排除粘性文章,并非让它们在结果中置顶,因此调整这个参数不会改变排序结果。
解决方案:修改REST查询逻辑
要让粘性文章始终置顶,需要通过钩子修改REST API的文章查询规则,将粘性优先级设为最高。将以下代码添加到主题的functions.php文件或自定义插件中:
add_filter( 'rest_post_query', 'rest_prioritize_sticky_posts', 10, 2 ); function rest_prioritize_sticky_posts( $args, $request ) { // 仅在未指定自定义排序或默认按日期排序时生效 if ( ! isset( $request['orderby'] ) || $request['orderby'] === 'date' ) { $args['orderby'] = 'sticky date'; $args['order'] = 'DESC'; } return $args; }
这段代码的作用是:通过rest_post_query过滤器拦截REST的文章查询请求,当用户没有指定自定义排序规则,或者使用默认的日期排序时,将查询的排序规则改为先按粘性状态排序,再按日期排序,这样粘性文章会自动排在所有非粘性文章的前面。
验证效果
添加代码后,直接请求wp-json/wp/v2/posts即可看到粘性文章置顶。如果需要使用其他自定义排序(比如按标题、修改时间),这段代码不会干扰原有逻辑,仅在默认场景下生效。
内容的提问来源于stack exchange,提问作者richard
相关产品推荐
相关产品推荐

