kaibukuroのブログ

HTML/CSS/JavaScript/PHPなどのアウトプット

【WordPress】WP_queryでカスタム投稿タイプのループにPICKUP投稿を表示する方法

要件

・WP_queryでカスタム投稿タイプのループ
・その中に特定の投稿だけAdvanced Custom Fields(ACF)値により、先頭に固定表示させ、他は日付順で並べる。
・カスタム投稿名 information

手順

・ACFをチェックボックスにし、keyを「information_pickup」、値を「pickup」と「not」と分けた上で、
次のコードで出力させる。
・日付順の投稿6件のうち、ACFにチェックされているものがあればそれらが優先的に先頭に固定される。

<?php
$args = array(
    // ACFの値を優先させ、それ以外は日付順に並べる
    'posts_per_page' => 6,
    "post_type" => "information",
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => 'information_pickup',
            'value' => 'pickup',
            'compare' => 'LIKE'
        ),
        array(
            'key' => 'information_pickup',
            'value' => 'not',
            'compare' => 'LIKE'
        )
    ),
    'orderby' => array(
        'meta_value' => 'DESC',
        'date' => 'DESC'
    )
);

?>

要点

relation => OR にて、その下2つの配列に、2つのACF値をそれぞれ指定して絞り込ませる。
・さらにその下のorderbyでも、dateとmeta_valueの複数の条件を設定させる必要がある。