自定义WP查询订单功能可能吗?

时间:2020-08-04 作者:Runnick

我有一个插件,它有一个元字段,可以以数组格式保存帖子的共享:

["facebook" => 12, "pinterest" => 12]
我想在自定义WP查询中获得3个共享最多的帖子(按所有共享的组合),但不确定如何获得,因为它只允许提供元字段和值,而不允许提供函数?

有没有可能有自定义排序功能?

2 个回复
SO网友:Jacob Peattie

不,这是不可能的。实际上,不能将数组存储为meta。保存后,它们会转换为字符串,因此没有单独的部分可供排序。要做到这一点,您需要将共享号码存储为它们自己的密钥。

SO网友:mozboz

我知道,实现您想要的最明智的方法是编写您自己的代码,将您想要的数据放在一个新的元值中,然后您可以轻松地在WP\\u查询中使用它。

这是一段粗略的代码,但您应该能够看到它是如何工作的,并对其进行修改以满足您的需要。

function map_my_array_metavalue($postID) {

    $arrayValue = get_post_meta($postId, "plugin_meta_key") ; // change plugin_meta_key to whatever it is

    $newValue = $arrayValue[\'facebook\'] + $arrayValue[\'pinterest\'] ; 

    update_post_meta($postId, "combined_share_count", $newValue) ;

}

add_action(\'save_post\', \'map_my_array_metavalue\', 10, 1);
现在可以使用meta键编写简单的WP\\u查询参数\'map_my_array_metavalue\'.

显然,此示例仅在保存帖子时有效,因此您可能需要找到一个更合理的位置来将此代码挂接到其中。如果这种情况不经常发生,那么您可以在记录这些数据的插件更新它时以某种方式进行连接。

注:

您还存在为所有尚未拥有此数据的帖子初始化此数据的问题。例如,您可以对所有帖子ID一次性运行上述代码。

相关推荐

具有ORDER BY另一个定制字段的元查询

编辑:我会尽量详细解释我的问题。我在一个投资组合网站上工作。有几种自定义的帖子类型:项目、出版物、展览、讲座和幻灯片。主页由以下部分组成:带幻灯片的滑块portfolio consisting of:<选定(由客户标记)的项目、出版物、展览和讲座以及剩余的项目、出版物、展览和讲座Now, I have problem with the portfolio section. 为了使用Desandro的无限滚动,需要对其进行分页-单击“加载更多”按钮后加载下一篇文章。前10篇文章由客户按照第二个自定义字