ACFの真/偽フィールドで記事一覧への表示・非表示を切り替える【WP_Query】

WordPressで、投稿一覧に記事を載せるか載せないかをチェックのON/OFFで切り替えたいという要望があり、
Advanced Custom Fieldsで実装してみたので紹介します。
ACFの真/偽(True/False)のフィールドを追加して、WP_Queryで記事一覧の表示を制御したサンプルです。

手順1:真/偽フィールドを作成

プラグインのインストール方法、フィールドグループの追加方法は割愛します。
こんな感じでサクサクと追加していきましょう。

ここではフィールド名を'show_in_wpquery'としました。

Presentationタブにある「Stylized UI」をオンにすると、記事編集時に分かりやすくなるのでおすすめです。

手順2:WP_Queryの絞り込み条件を設定

チェックをONにした記事を表示する

「チェックをONにした記事を表示する」コードサンプルはこちら。

$args = array(
    'post_type' => '投稿タイプ',
    'meta_query' => array(
        'key' => 'show_in_wpquery', // ACFで設定したフィールド名
        'value' => '1',
    )
);

チェックが入っているとデータベースに'1'が登録されるので、それを利用して絞り込みします。
これで、チェックの入った記事のみを表示します。

チェックをONにした記事を非表示にする

別パターン「チェックをONにした記事を非表示にする」コードサンプル。
先ほどとは逆に、'1'以外のものを表示しようとこちらのコードにしてみましたが、これだとチェックON/OFFが未入力の記事は表示されませんでした。

失敗例

$args = array(
    'post_type' => '投稿タイプ',
    'meta_query' => array(
        'key' => 'show_in_wpquery', // ACFで設定したフィールド名
        'value' => '1',
        'compare' => 'NOT LIKE'
    )
);

成功例

'1'が付いた記事と'show_in_wpquery'の値が付いていない記事(=NULLになっている記事)をどちらも表示させて、無事解決しました。

$args = array(
    'post_type' => '投稿タイプ',
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => 'show_in_wpquery',
            'value' => '1',
        ),
        array(
            'key' => 'show_in_wpquery',
            'compare' => 'NOT EXISTS',
        )
    ),
);

関連投稿

検索語を上に入力し、 Enter キーを押して検索します。キャンセルするには ESC を押してください。

トップに戻る