按两个日期排序。默认录入日期和自定义字段(如果存在)

时间:2019-04-22 作者:Chris

我有一个自定义的帖子类型,其中有一个按日期排序的选项。但是,有一个自定义日期字段允许更改显示日期。此自定义日期字段并非始终填写。

现在我正在尝试按日期排序,如果存在自定义日期字段,则在排序时使用该字段。

由于我相信orderby会按自定义字段排序,然后在排序的输入日期上加上Tack,所以我有以下几点并不能真正起作用。

$args = array( 
    \'post_type\' => array(\'post\'),
    \'order\'     => \'DESC\',
    \'orderby\'   => array(\'upcoming_class_date\' => \'DESC\', \'date\' => \'DESC\'),
    \'category_name\'   => \'upcoming class\',
    \'meta_key\'      => \'company\',
    \'meta_value\'    => $company,            
    \'showposts\' => 40
);

$loop = new WP_Query( $args );
我想在查询后获取结果并重新使用它们,但这似乎效率很低。

1 个回复
最合适的回答,由SO网友:sMyles 整理而成

我在这里看到您的代码有几个问题:

你有category_name 设置为upcoming class ... 类别段塞中没有空格,因此这是错误的。如果你想拥有一切upcomingclass 类别,然后使用upcoming,class https://developer.wordpress.org/reference/classes/wp_query/#category-parameters

您有一个元查询company 但听起来您也在尝试按自定义字段排序upcoming_class_date, 因此,此字段也需要包含在查询中。您需要将其更改为高级元查询来处理此问题。https://developer.wordpress.org/reference/classes/wp_query/#custom-field-post-meta-parameters

您说过自定义帖子类型,但您的代码post 作为岗位类型

这是我想到的一些关于如何设置查询参数的快速示例代码:

$args = array(
    \'post_type\'     => array( \'post\' ),
    \'order\'         => \'DESC\',
    \'orderby\'       => array( \'upcoming_class_date\' => \'DESC\', \'date\' => \'DESC\' ),
    \'category_name\' => \'upcoming class\',
    \'showposts\'     => 40,
    \'meta_query\' => array(
        \'relation\' => \'AND\',
        array(
            \'key\'     => \'company\',
            \'value\'   => $company,
            \'compare\' => \'=\',
        ),
        array(
            \'relation\' => \'OR\',
            array(
                \'key\'     => \'upcoming_class_date\',
                \'compare\' => \'EXISTS\',
            ),
            array(
                \'key\'     => \'upcoming_class_date\',
                \'compare\' => \'NOT EXISTS\',
            )
        )

    ),
);
您会注意到EXISTSNOT EXISTS .. 这是因为您说过,有时一篇文章没有该字段的值——为了确保该值包含在查询中,我们必须同时添加这两个字段,并设置relationOR (这样一来,它会返回带有该字段的帖子和不带该字段的帖子)。

我看到的另一个潜在问题是保存日期的格式——这可能会导致排序问题,但您没有提供格式的详细信息。

我建议阅读关于类似问题的回答,以更好地了解WP\\U Query如何处理元查询:https://wordpress.stackexchange.com/a/285012/51201

您还可以执行orderby 使用元查询数组键(但必须将其更改为关联数组)——上面的链接中有相关的示例。

相关推荐

Ajaxify Post Sort

我这里有一些代码,当您单击某些链接时,它会重新加载页面,并根据我设置的查询数组对我的帖子进行排序。我只是想知道如何让它通过ajax加载和排序,而不是重新加载页面?以下是我使用的代码: <?php $sort= esc_attr($_GET[\'sort\']); if($sort == \"title_asc\") { $order= \"&orderby=title&order=ASC\"; } if($sort == \"ti