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',
)
),
);