the_posts_paginationを使えば関数呼び出し一発でページネーションを表示できます。
<?php global $wp_query; $total_results = $wp_query->found_posts; $search_query = get_search_query(); ?> <h1><?php echo $search_query; ?>の検索結果</h1> <div><?php get_search_form(); ?></div> <?php if( $total_results >0 ): if(have_posts()): while(have_posts()): the_post(); ?> <p><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p> <div class="contents"> <?php the_content(); ?> </div> <?php endwhile; endif; the_posts_pagination( array('screen_reader_text'=>'') ); else: echo $search_query; echo 'に一致する情報は見つかりませんでした。'; endif; ?>
問題はその出力に、「投稿ナビゲーション」というラベルがついてしまうことです。
このラベルを消したいとします。
ただ単に非表示にするならいくつか方法があります。この出力は、以下のようにh2にscreen-reader-textというクラスがついています。
<h2 class="screen-reader-text">投稿ナビゲーション</h2>
この表示をCSS等で切ってしまえば良いことになります。
.screen-reader-text{ display:none; }
あるいはもっと楽なのが、
the_posts_pagination( array('screen_reader_text'=>' ') );
と、the_posts_pagination関数のscreen_reader_textパラメータにスペース一個を渡してやると、スペースが表示されるために見た目上きえます。
ちなみに、見つけた限り最高の正攻法は、https://kimoba.com/kasegu/the_posts_pagination.htmlさんの、get_the_posts_paginationの結果から文字列置換で取り除いてしまうやりかたです。
ただ、それでは面白くないので、もう少し無駄なことをします。まずcodexへ行きます。
https://codex.wordpress.org/Function_Reference/the_posts_pagination
Defined in wp-includes/link-template.php という記述があるので、実装を見て見ます。
the_posts_pagination ← get_the_posts_pagination ← _navigation_markup
という順番で文字列が生成されているので、_navigation_markupを見てみます。
function _navigation_markup( $links, $class = 'posts-navigation', $screen_reader_text = '' ) { if ( empty( $screen_reader_text ) ) { $screen_reader_text = __( 'Posts navigation' ); } $template = ' <nav class="navigation %1$s" role="navigation"> <h2 class="screen-reader-text">%2$s</h2> <div class="nav-links">%3$s</div> </nav>'; return sprintf( $template, sanitize_html_class( $class ), esc_html( $screen_reader_text ), $links ); }
ありました。この<h2 class="screen-reader-text">%2$s</h2>がこのタイトルの本体です。こいつをそのまま削ってしまえば良いことになります。とはいえ、Wordpressのコアを書き換えるほどクレイジーにはなれないので、
と名前を変えて、上記h2の部分だけを取り除いた各関数をfunctions.phpに定義して呼び出すことにします。
<?php //ページネーション function my_get_the_posts_pagination( $args = array() ) { $navigation = ''; // Don't print empty markup if there's only one page. if ( $GLOBALS['wp_query']->max_num_pages > 1 ) { $args = wp_parse_args( $args, array( 'mid_size' => 1, 'prev_text' => __( 'Previous' ), 'next_text' => __( 'Next' ), 'screen_reader_text' => __( 'Posts navigation' ), ) ); // Make sure we get a string back. Plain is the next best thing. if ( isset( $args['type'] ) && 'array' == $args['type'] ) { $args['type'] = 'plain'; } // Set up paginated links. $links = paginate_links( $args ); if ( $links ) { $navigation = _my_navigation_markup( $links, 'pagination', $args['screen_reader_text'] ); } } return $navigation; } function _my_navigation_markup( $links, $class = 'posts-navigation', $screen_reader_text = '' ) { if ( empty( $screen_reader_text ) ) { $screen_reader_text = __( 'Posts navigation' ); } $template = ' <nav class="navigation %1$s" role="navigation"> <div class="nav-links">%3$s</div> </nav>'; return sprintf( $template, sanitize_html_class( $class ), esc_html( $screen_reader_text ), $links ); } //ページネーションここまで
呼び出しはget_the_posts_paginationと同じです。the_posts_paginationと全く同じにしたいならechoする関数をもう一つ被せる必要があります。
<?php echo my_get_the_posts_pagination( ); ?>