WordPress:PHP:如何在类别中执行所需结果的嵌套排序

时间:2010-01-07 21:38:43

标签: php wordpress function sorting

有一个插件,我试图适应我的meta_tags用于WordPress。 它被称为按标题分类http://www.mikesmullin.com

我想要实现的是嵌套排序。我有三个meta_keys。选择 - 否,发布月和发布年。我想按发布年(asc),发布月(asc),然后选择 - 否(asc)对其类别中的帖子进行排序。例如:1955 10 selection-no-1,1956 10 selection-no-2,1956 10 selection-no-5,依此类推。

我修改了代码,但是,它只按发布年份列出的最后一个meta_key进行排序。

这是代码。

add_action('pre_get_posts','sort_categories_by_title');

function sort_categories_by_title($x) {
if(is_category()) {
    $x->query_vars['orderby'] = 'meta_value';
    $x->query_vars['meta_key'] = 'selection-no';
    $x->query_vars['meta_key'] = 'release-month';
    $x->query_vars['meta_key'] = 'release-year';
    $x->query_vars['order'] = 'asc';
}
}

非常感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:1)

看看usort。您提供了一个比较功能,可以查看每个项目并选择要订购的内容。

答案 1 :(得分:0)

在您的示例中,每次执行$x->query_vars['meta_key']时都会覆盖以前的值,因此您只是将最后一个meta_key添加为选择选项。

除此之外,WordPress仅支持通过单个meta_key / meta_value比较进行拉取。要获得更复杂的比较,您应该在posts_where_paged上过滤以添加更多比较,并posts_orderby来构建您需要的order by子句。您需要具备原始SQL查询编写的基本知识才能实现此目的。

您也可以考虑重构数据并将发布日期置于实际日期格式中,并使用类型转换来获取meta_value的字符串格式并将其转换为日期字段,然后执行基于日期的正确排序操作它