特定のカスタムフィールドを持つもののみを表示/非表示
フィルターフックで
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(); ?>