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

フィルターフックで
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(); ?>



