【问题标题】:WordPress: PHP: How to perform a nested sort within a category for the desired resultsWordPress:PHP:如何在类别中执行嵌套排序以获得所需结果
【发布时间】:2010-01-07 21:38:42
【问题描述】:

我正在尝试调整一个插件以适应我的 meta_tags 以与 WordPress 一起使用。 它被http://www.mikesmullin.com称为按标题分类。

我想要实现的是嵌套排序。我有三个 meta_key。选择编号、发布月份和发布年份。我想按发布年份 (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';
}
}

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

【问题讨论】:

  • 我已经按照建议查看了 usort,但无法弄清楚如何申请。同样,任何额外的帮助将不胜感激。谢谢 - 所有人都在寻找。

标签: php wordpress function sorting


【解决方案1】:

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

【讨论】:

  • 我现在正在浏览它。我了解这些概念,但尚未确定解决方案。
【解决方案2】:

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

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

您也可以考虑重组您的数据,并将发布日期转换为真实日期格式,并使用类型转换来获取元值的字符串格式并将其转换为日期字段,然后进行适当的基于日期的排序操作它。

【讨论】:

  • 感谢您对此代码的评估。我将研究一个 SQL 查询。但是,如果我将响应的第二部分理解为将发布日期放在 WordPress 字段的常规月份日期并按日期排序,则希望维护单独的数据。帖子的日期可能是 2010 年 1 月 10 日,而文章的发布日期是 1956 年 3 月 27 日。我不是专家,更不是一个可以“破解”代码以使其有时工作的新手。虽然如果有一天完整的答案会出现在这里会很好,但看起来我必须更加努力才能做到这一点。
  • 我认为您不需要将发布日期移至帖子的实际发布日期。您仍然可以将其保存为 postmeta,但将其保存到单个字段中以便于排序。查看 MySQL 中的 typecasting 以了解如何对 varchar 字段进行排序,如日期字段,而不必像处理单独的字段那样进行复杂的比较。
  • 无耻的插入时间 - 不久前我写了一篇关于在 mysql 中进行类型转换的简短博文:top-frog.com/2009/08/10/…
猜你喜欢
  • 2011-03-14
  • 2011-03-08
  • 2020-10-13
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
  • 2012-04-20
相关资源
最近更新 更多