Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:如何在类别中执行嵌套排序以获得所需的结果_Php_Wordpress_Function_Sorting - Fatal编程技术网

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

PHP:如何在类别中执行嵌套排序以获得所需的结果,php,wordpress,function,sorting,Php,Wordpress,Function,Sorting,有一个插件,我正试图适应我的meta_标签与WordPress一起使用。 它被称为类别的标题 我试图实现的是嵌套排序。我有三把钥匙。选择编号、发布月份和发布年份。我想按发布年份(asc)、发布月份(asc)和选择号(asc)对其类别内的帖子进行排序。例如:1955年10月1日、1956年10月2日、1956年10月5日等等 我已经修改了代码,但是,它只按列出的最后一个meta_键排序,按发布年份排序 这是代码 add_action('pre_get_posts','sort_categories

有一个插件,我正试图适应我的meta_标签与WordPress一起使用。 它被称为类别的标题

我试图实现的是嵌套排序。我有三把钥匙。选择编号、发布月份和发布年份。我想按发布年份(asc)、发布月份(asc)和选择号(asc)对其类别内的帖子进行排序。例如:1955年10月1日、1956年10月2日、1956年10月5日等等

我已经修改了代码,但是,它只按列出的最后一个meta_键排序,按发布年份排序

这是代码

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';
}
}

任何帮助都将不胜感激。谢谢。

看一看。您提供了一个比较函数,可以查看每个项目的内部并选择订购依据。

在您的示例中,每次执行
$x->query\u vars['meta\u key']
时,您都会覆盖上一个值,因此只添加最后一个meta\u key作为选择选项

除此之外,WordPress只支持通过单个meta_键/meta_值比较进行拉取。要获得您想要的更复杂的比较,您应该在
posts\u页面上进行筛选,以添加更多比较,并
posts\u orderby
构建所需的order by子句。要完成此任务,您需要具备原始SQL查询编写的基本知识


您可以考虑重构数据,并将发布日期设置为一个真实的日期格式,并使用Type Engress来获取Meta值的字符串格式,并将其转换为日期字段,然后对其进行正确的基于日期的排序操作。我理解这些概念,但还没有确定解决方案。我已经按照建议查看了usort,但不知道如何应用。再次感谢您提供的任何额外帮助。谢谢大家的关注。谢谢你们对这段代码的评估。我将研究SQL查询。但是,如果我理解响应的第二部分是将发布日期放在WordPress字段的常规月日中并按日期排序,那么我希望维护单独的数据。文章的发布日期可能是2010年1月10日,而文章的发布日期是1956年3月27日。我不是一个专家,更不是一个新手,有时可以“破解”代码使其工作。虽然如果有一天完整的答案会出现在这里会很好,但看起来我必须更加努力才能做到这一点。我不认为你需要将发布日期移到文章的实际发布日期。您仍然可以将其保存为PosteTa,但可以将其保存到单个字段中,以便更容易进行排序。在MySQL中查找typecasting,看看如何像对日期字段一样对varchar字段进行排序,而不必像对单独字段那样进行复杂的比较。无耻的插件时间-我不久前在MySQL中写了一篇关于类型转换的短博文: