カスタム投稿の1ページ当たりの表示件数設定
wordpress カスタムポスト post_type 一覧 件数
1.初期値設定
/*** 初期値 ***/ function get_def_post_per_page($post_type = '') { $def = array( 'custom_post' => 10, ); if($post_type) { return $def[$post_type]; } else { return $def; } }
2.クエリ調整
/*** クエリ調整 ***/ function change_posts_per_page($query) { if ( is_admin() || !$query->is_main_query() ) return; if(is_archive() || is_tax()) { if(is_tax()) { $term = get_queried_object(); $taxonomy = $term->taxonomy; $post_type = get_taxonomy($taxonomy)->object_type[0]; } else { $post_type = get_query_var('post_type'); } if($post_type) { $cnt = get_option($post_type . '_cnt'); if(!$cnt) { $cnt = get_def_post_per_page($post_type); } $query->set( 'posts_per_page', $cnt ); //表示件数を指定 } } } add_action( 'pre_get_posts', 'change_posts_per_page' );
3.管理画面設定
/*** 保存件数データ取得 ***/ function get_post_per_page($post_type) { $def_post_per_page = get_def_post_per_page(); $cnt = get_option($post_type . '_cnt'); if(!isset($cnt) || $cnt == '') { $cnt = $def_post_per_page[$post_type]; } return $cnt; } /*** 設定→表示設定に項目追加 ***/ function add_reading_post_per_page() { $def_post_per_page = get_def_post_per_page(); foreach($def_post_per_page as $key => $value) { $post_obj = get_post_type_object($key); add_settings_field($key . '_cnt', '1ページに表示する最大投稿数【' . $post_obj->labels->name . '】', 'get_post_per_page_field', 'reading', 'default', array('post_type' => $key) ); register_setting('reading', $key . '_cnt'); } } add_action( 'admin_init', 'add_reading_post_per_page' ); function get_post_per_page_field( $args ) { $post_per_page = get_post_per_page($args['post_type']); ?> <input id="<?php echo $args['post_type'] ?>_cnt" name="<?php echo $args['post_type'] ?>_cnt" type="number" step="1" min="1" value="<?php echo esc_html( $post_per_page ); ?>" class="small-text"> <?php }