2021.04.13WEB - WordPress

特定のカスタムフィールドを持つもののみを表示/非表示

フィルターフックで

functions.php に

function custom_loop_rules ( $query ) {
    if ( is_admin() || ! $query->is_main_query() ){
        return;
    }
    if ( $query->is_archive() || $query->is_search() ) { //アーカイブ、検索結果に適用
        $query -> set( 'posts_per_page', '20' ); //表示件数
        $query->set( 'meta_key', 'キー' ); //フィールドのキー
        $query->set( 'meta_compare', '!=' ); //〇〇じゃなかったら
        $query->set( 'meta_value', '〇〇' ); //値
        return;
    }
}
add_action('pre_get_posts','custom_loop_rules');

meta_compare のところは ‘NOT EXISTS’ 等でも可。
真偽値において思うように動作しなかったので、 ‘meta_value’ を true じゃなかったら、という風に書きました。(falseで実装できなかった)

WP_Queryで

固定ページなどの外部テンプレでループかつページネーション(WP-PageNavi使用)

<?php
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$wp_query = new WP_Query();
$param = array(
'posts_per_page' => 20, //表示件数
'post_type' => 'カスタム投稿タイプ',
'paged' => $paged,
'meta_query' => array(
  array(    
      'key'=>'キー', //フィールドのキー
      'value' => 〇〇 //値
  ),
  array(    
    'key'=>'キー', //フィールドのキー
    'orderby' => 'meta_value_num',
    'order' => 'DESC' //昇順・降順入れる
),
),
'tax_query' => array( //さらにタクソノミーで絞りたい場合
	array(
		'taxonomy' => 'タクソノミー', //タクソノミー
		'field' => 'slug', //スラッグで出しわける
		'terms' => 'ターム', //ターム
		),
	)
);
$wp_query->query($param);
if($wp_query->have_posts()): while($wp_query->have_posts()) : $wp_query->the_post();
?>

<li>ループの内容</li>

<?php endwhile; endif; ?>
</ul>
<?php wp_pagenavi(array('query' => $wp_query)); ?>
<?php query_posts($query_string); wp_reset_postdata(); ?>