在使用meta_query过滤后,是否可以通过我选择的元数据来排序我的自定义帖子列表?例如,我有一个名为webinars的自定义帖子类型。我试图列出所有即将举行的网络研讨会,并通过名为webinar_startDate的自定义元字段对它们进行排序。

使用以下查询,我能够成功返回网络研讨会,但不包括旧的网络研讨会。但是,它们仍然按照发布的顺序出现,而不是通过webinar_startDate出现。

<?php $my_array =  array(
    'meta_query' => array(
            array(
                'key' => 'webinar_startDate',
                'value' => date("Y-m-d H:i:s"),
                'compare' => '>=',
                'type' => 'DATETIME'
            )
    ),
    'orderby' => 'meta_value',
    'post_type' => 'webinars',
    'posts_per_page' => 20,
    'order' => 'ASC'
); ?>


我怀疑由于从3.0到3.1的更改,使用了orderby => meta_value可能有所不同,但是我无法在WordPress文档中找到答案来解释这一点。

谁能帮忙?提前谢谢。

#1 楼

新的meta_query数组选择查询返回的帖子。因此,是的,您正在指示该meta_query中的“键”,但是除了meta_query之外,您仍然可以使用

'orderby' => 'meta_value', 
'meta_key' => '_events_meta',


的旧方法,因为这些行表示如何对结果查询进行排序。所以是的,您可能两次指示相同的meta_key。

评论


这个答案并不完全正确。如果您在现有meta_query之外添加orderby和meta_key,则结果的确会按提供的键进行排序-但即使值不符合条件,它也会包括设置了该meta键的所有帖子在meta_query中(至少,这就是我在测试中的工作方式)。更好的方法可能是将数组作为orderby参数传递,如下所述:core.trac.wordpress.org/ticket/17065#comment:14

–MathSmath
2012年4月3日在16:59

#2 楼

我对名为events的自定义帖子使用以下代码,以使所有帖子都处于循环中。

$evtLoop = new WP_Query(array('post_type' => 'events',
                              'posts_per_page' => 10,
                              'orderby' => 'meta_value', 
                              'meta_key' => '_events_meta',
                              'order'=>'DESC'));


我认为您使用代码的方式大致相同。我认为您缺少带有要排序的元字段名称的meta_key。如果将

'meta_key' => 'webinar_startDate',


添加到外部数组中,也许会有所帮助?

评论


我现在明白了。我对Wordpress文档感到困惑,说“ meta_key”和“ meta_value”已贬值。我以为那意味着我不能使用它们,但是我想那是误导。谢谢!

–杰夫·K。
2011年3月2日21:55