Wordpress 3.1でmeta_queryでorderbyをどのように使用しますか?


21

カスタム投稿のリストを、選択したメタデータでmeta_queryでフィルタリングした後に並べることは可能ですか?

たとえば、ウェビナーと呼ばれるカスタム投稿タイプがあります。今後のすべてのウェビナーをリストし、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のドキュメント内に答えが見つかりません。

誰でも助けることができますか?前もって感謝します。

回答:


17

新しいmeta_query配列は、クエリが返す投稿を選択します。そう、あなたはその中の「キー」を示してmeta_queryいますが、あなたはまだ古い方法を使用することができます

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

これらの行は、結果のクエリを並べ替える方法を示すため、meta_queryに加えて。そのため、同じmeta_keyを2回指定する場合があります。


9
この答えは完全に正しくありません。既存のmeta_queryの外にorderbyとmeta_keyを追加すると、結果は実際に提供されたキーでソートされますが、値が基準を満たさない場合でも、そのメタキーが設定されている投稿も含まれますmeta_queryで(少なくとも、それがテストで私にとって機能した方法です)。これを行うより良い方法は、ここで説明するように、orderbyパラメーターとして配列を渡すことです。core.trac.wordpress.org
17065#comment

1

私は、というカスタム投稿に次のコードを使用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',

外側の配列に?


なるほど。「meta_key」と「meta_value」が減価償却されたというWordpressのドキュメントに混乱しました。私はそれらを使用できないことを意味したと思いましたが、それは誤解を招くものだったと思います。ありがとう!
ジェフK.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.