WordPress中get_posts/WP_query的orderby与order排序失效求助
解决WordPress按post_modified降序排序的问题
嘿,我来帮你搞定这个按文章修改时间排序的麻烦!你说用get_posts()和WP_Query都没生效,大概率是参数设置的小问题或者被其他代码干扰了,我给你一步步捋清楚:
一、正确的get_posts()写法
先确保你的参数数组里明确指定了orderby为post_modified,order为DESC,别漏了关键参数,比如:
// 自定义你的查询参数 $args = array( 'post_type' => 'post', // 替换成你需要的文章类型,比如自定义类型就写对应的slug 'posts_per_page' => -1, // 按需调整,-1表示获取所有符合条件的文章 'orderby' => 'post_modified', // 核心:按修改时间字段排序 'order' => 'DESC', // 核心:降序(最新修改的在前) 'post_status' => 'publish' // 只取已发布的文章,按需调整 ); // 执行查询 $modified_posts = get_posts($args); // 遍历输出示例 foreach ($modified_posts as $post) { setup_postdata($post); echo '<h3>' . get_the_title() . '</h3>'; echo '<p>最后修改时间:' . get_the_modified_date() . '</p>'; } wp_reset_postdata(); // 别忘了重置全局post对象
二、正确的WP_Query写法
WP_Query的参数和get_posts基本一致,但要注意循环的规范写法,避免全局变量冲突:
$args = array( 'post_type' => 'post', 'posts_per_page' => 10, 'orderby' => 'post_modified', 'order' => 'DESC' ); $modified_query = new WP_Query($args); // 开始循环 if ($modified_query->have_posts()) { while ($modified_query->have_posts()) { $modified_query->the_post(); // 输出内容示例 the_title('<h3>', '</h3>'); echo '<p>修改时间:' . get_the_modified_date('Y-m-d H:i:s') . '</p>'; } wp_reset_postdata(); // 必须重置,否则后续查询会出错 } else { echo '没有找到符合条件的文章'; }
三、排查为什么排序没生效
如果上面的代码还是没效果,你可以从这几个方向查:
- 检查参数拼写:别把
post_modified写成post_modify,order的DESC大小写不敏感,但尽量用大写规范写法。 - 检查是否被其他代码干扰:有些主题或插件会通过
pre_get_posts钩子修改查询参数,你可以暂时禁用其他插件、切换到默认主题测试,或者在functions.php里临时移除自定义的pre_get_posts钩子试试。 - 查看实际执行的SQL:用下面的代码输出WP_Query生成的SQL语句,确认
ORDER BY部分是不是post_modified DESC:$modified_query = new WP_Query($args); echo $modified_query->request; // 输出SQL,检查排序子句 - 清除缓存:WordPress自带缓存、插件缓存(比如WP Rocket)或者服务器缓存可能会显示旧的排序结果,清一下缓存再看。
要是还是搞不定,把你写的代码片段贴出来,我帮你揪出问题~
内容的提问来源于stack exchange,提问作者OM The Eternity
相关产品推荐
相关产品推荐

