首页 > 解决方案 > 带有 orderby meta_value_num 的 WordPress WP_Query Meta_key 无法正常工作

问题描述

我有以下 WP_Query(来自 var_dump 的输出):

array(7) { ["post_type"]=> string(4) "post" ["ignore_sticky_posts"]=> bool(false) ["posts_per_page"]=> int(5) ["orderby"]=> string(14) "meta_value_num" ["order"]=> string(4) "DESC" ["meta_type"]=> string(7) "NUMERIC" ["meta_key"]=> string(17) "vw_post_views_all" } 

它应该做的是抓取前 5 个查看的帖子。视图数据存储在 vw_post_views_all 元键中。我检查了数据库,一些具有较高值的​​帖子没有显示在显示的 5 中。我查看了其他 stackoverflow 帖子,有些人建议使用"meta_type" => "numeric",但我尝试了它并没有改变任何东西。

我注意到的一件事是元值作为长文本保存在数据库中,而不是数字。我们有一些非常古老的帖子,有几千次浏览。例如,一个帖子有 20985,但显示的是一个有 4700 视图的帖子。在我看来,查询没有按整数值正确排序,因为 4 确实高于 2,但 4700 不高于 20985。我不确定如何将所有这些元值转换为 int 值不过,数据库。

或者,查询根本没有检索帖子,因为它们已经有几年了?我们有很多帖子......这可能是 WP_Query 的问题吗?我尝试将 20k 值更新为 5k,但它仍然不起作用。

标签: phpwordpress

解决方案


我发现了问题!我安装的 Post Types Order 插件劫持了查询。停用插件后,查询按预期工作。

请注意,如果有人正在阅读并且有类似的问题,那么在撰写本文时,该插件提供了一个设置,该设置自动允许插件劫持整个站点上所有循环的查询。您可以禁用它,然后"orderby" => "menu_order"在您希望此插件影响的查询中手动使用。不幸的是,这对我在这个特定的网站上不起作用,但我似乎记得过去在其他网站上使用过它。


推荐阅读