问题描述

我正在使用自定义分类术语页面模板,其中我们希望连接到按出版日期 (自定义日期字段) 排序的术语的项目 – 如果同一天有多个项目 (格式如 YYYY-MM-DD),则按标题排序,如果自定义字段尚未填写 (较旧的项目),最后按标题排序。

所以,我用 WP_query 尝试了一百种不同的方式,它确实会返回大部分结果,因为我想要它们 – 但是在这种情况下,它只返回具有 publication_date 的 meta_key 的项目。所有其他项目都被忽略,不显示。我使用”or” 的关系尝试了一个 meta_query,并将 publication_date 作为 EXISTS 和 NOT EXISTS 进行比较,但是对我来说返回了 0 个结果。

此外,该站点运行 3.5.2 仍然,他们不想升级。

这是我最近的一个查询,让我看到以正确顺序显示 publication_date 自定义字段的帖子:

$term = get_queried_object(); // find the term of the taxonomy page we are on
$wp_query = new WP_Query( array(
'post_type' => 'resource',
'tax_query' => array(
    array(
        'taxonomy' => 'resource_types',
        'field' => 'slug',
        'terms' => $term->name,
    )),

'meta_key' => 'publication_date',
'orderby' => 'meta_value_num',
'order' => 'DESC',
'paged' => $paged,
'posts_per_page' => '10',
));

我也尝试使用 wpdb 并运行 SQL 查询,但我真的不知道如何完成我想要做的。如果有人可以帮助我,那真是太棒了!

提前致谢。

最佳解决方案

感谢大家的帮助!

最后,下面的查询给了我所期望的结果 – 这是为了显示和排序”publication_date” 的自定义字段的职位,按日期排序,如果有多个相同的日期 (例如,标记为 2013 年 6 月的 4 个),它会按标题排序。然后,在通过所有发布日期填写完毕的帖子之后,它将再次按照标题按字母顺序循环遍历剩余的帖子。

这让我在同一查询中设置结果,并保持我的分页:

$term = get_queried_object();
the_post();
$wp_query = new WP_Query( array(
'post_type' => 'resource',
    'tax_query' => array(
        array(
            'taxonomy' => 'resource_types',
            'field' => 'slug',
            'terms' => $term->name,
        )),
 'meta_query' => array(
       'relation' => 'OR',
        array( //check to see if date has been filled out
                'key' => 'publication_date',
                'compare' => '=',
                'value' => date('Y-m-d')
            ),
          array( //if no date has been added show these posts too
                'key' => 'publication_date',
                'value' => date('Y-m-d'),
                'compare' => 'NOT EXISTS'
            )
        ),
'meta_key' => 'publication_date',
'orderby' => 'meta_value title',
'order' => 'ASC',
'paged' => $paged,
'posts_per_page' => '10',
));

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。