用于CPT查询的自定义日期字段有问题(WordPress)

时间:2020-10-21 作者:Lorn Waterfield

我已经尽可能多地阅读了这里的问题和答案,没有一个解决方案对我有效。不知道我做错了什么。

我有一个元键为“start\\u date”的CPT“event”-它以YYYY-MM-DD HH:MM:SS格式保存到DB,格式与标准的post\\u date格式完全相同。

然而,我有一个查询,它不是按meta键排序这些帖子,而是按post\\u日期排序,无论我怎么做。

我已经按照start\\u date正确地获得了实际的CPT归档排序,但是我在其他地方使用的查询(在主页部分)将无法工作。

我的问题是:

$the_query = new WP_Query( array(
    \'post_type\' => \'event\',
    \'posts_per_page\' => 2,
    \'order_by\' => \'meta_value\',
    \'meta_key\' => \'start_date\'
) );
if ( $the_query->have_posts() ) {
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
我尝试了很多变体,但它仍然只是按post\\u日期显示帖子,而不是按start\\u日期显示帖子。

知道我做错了什么吗?

谢谢

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

我猜是因为你order_by 应该是什么时候orderby - 那个order_by 这不仅仅是一个问题,对吧?

而且,如果元值是日期,那么还应该设置meta_type 参数到DATE 使分拣工作如预期的那样进行。

因此,请尝试:

$the_query = new WP_Query( array(
    \'post_type\'      => \'event\',
    \'posts_per_page\' => 2,
    \'orderby\'        => \'meta_value\', // it\'s orderby; not order_by
    \'meta_key\'       => \'start_date\',
    \'meta_type\'      => \'DATE\',       // and set meta_type to DATE
) );

更新

如果上述操作仍然无效,请尝试使用meta_query 而不是那些meta_keymeta_type, 并设置orderbystart_date - 中的键meta_query 对于元数据start_date:

$the_query = new WP_Query( array(
    \'post_type\'      => \'event\',
    \'posts_per_page\' => 2,
    \'meta_query\'     => array(
        \'start_date\' => array(
            \'key\'  => \'start_date\',
            \'type\' => \'DATE\',
        ),
    ),
    \'orderby\'        => \'start_date\',
) );
但是,如果有插件或自定义代码覆盖orderby, e、 g.通过pre_get_posts, 那么我怀疑上述方法是否有效。

但你可以试试,谁知道它神奇地工作。。。此外,请尝试清除站点缓存,以防万一。