web-dev-qa-db-ja.com

複数のメタキーとフィールドによるWP_Queryの順序

複数のメタキーとフィールド/カスタムフィールドでクエリを並べるには?

これは私のコードです:

$args = array
    (
        'post_type' => 'listing',
        'posts_per_page' => -1,
        'tax_query' => array
        (
            array
            (
                'taxonomy' => 'listing_category',
                'field' => 'slug',
                'terms' => urldecode($category)
            ),
            array
            (
                'taxonomy' => 'location',
                'field' => 'slug',
                'terms' => urldecode($location)
            )
        ),

        //*** THIS NOT WORK
        'meta_query'    => array
        (
            array(
                'key'     => 'listing_status',
                'orderby' => 'meta_value',
                'order' => ASC,
            ),
            array(
                'key'     => 'listing_total_rank',
                'orderby' => 'meta_value',
                'order' => DESC,
            ),
            array(
                'key'     => 'listing_free_date',
                'orderby' => 'meta_value',
                'order' => ASC,
            ),
            array(
                'key'     => 'title',
                'orderby' => 'meta_value',
                'order' => ASC,
            ),
        ),
        //***
    );

$listings = new WP_Query( $args );

'meta_query'の一部はコード内では機能しません。

4
Sevi

値を設定せずにメタクエリを使用しています。あなたがそれをしている方法はそれらを注文するためではなく、投稿を問い合わせるために使用しています。

名前付きメタクエリの使用

投稿をさまざまなメタデータで並べ替えるには、メタクエリに名前を付け、それを使って順序を設定します。これはあなたのための簡単な例です:

$args = array(
    'meta_query' => array(
        'relation' => 'AND',
        'query_one' => array(
            'key' => 'key_one',
            'value' => 'value_one', // Optional
        ),
        'query_two' => array(
            'key' => 'key_two',
            'compare' => 'EXISTS', // Optional
        ), 
    ),
    'orderby' => array( 
        'query_one' => 'ASC',
        'query_two' => 'DESC',
    ),
) );

WP_Query()のコーデックスページの this セクションをチェックして、投稿の並べ替えに慣れてください。

7
Jack Johansson