web-dev-qa-db-ja.com

姓と名によるカスタムフィールドの順序

最初に姓、次に名の順にクエリを並べ替える方法を探しています。ラストネーム+ファーストネームの部分ではあまり運がありませんでしたが、私はラストネームを行うことができました。これは私が思い付いたものです:

$posts = get_posts(
    [
        'post_type'      => 'soldier',
        'post_status'    => 'publish',
        'posts_per_page' => 5,
        'meta_key'       => 'last_name',
        'orderby'        => 'meta_value',
        'order'          => 'DESC',
        'meta_query'     => [
            [
                'key'     => 'last_name',
                'orderby' => 'meta_value',
                'order'   => ASC
            ],
            [
                'key'     => 'first_name',
                'orderby' => 'meta_value',
                'order'   => ASC
            ],
        ],
        'paged'          => $soldier_paged
    ]
);
1
Mark Anthony

コードにはいくつかの問題がありますが、関係のないものもありますが、一般的には、複数のメタキーで並べるには名前付きメタクエリが必要です。

$posts = get_posts( [
    'post_type'      => 'soldier',
    'posts_per_page' => 5,
    'paged'          => $soldier_paged,
    'meta_query'     => [
        'last_name_clause'  => [
            'key'     => 'last_name',
            'compare' => 'EXISTS'
        ],
        'first_name_clause' => [
            'key'     => 'first_name',
            'compare' => 'EXISTS'
        ],
    ],

    'orderby' => [
        'last_name_clause'  => 'ASC',
        'first_name_clause' => 'ASC',
    ],
] );
1
Milo