WordPress: ブログ内検索ページのあれこれ
ふと自分のブログで検索してみたら、3件しか表示されない。そんなばかな。以前はちゃんと10件なら10件表示されていたと思うのだが。確証は持てない。
3件というのは、このブログの1ページの表示件数である。とにかく検索結果がこれでは使えないので、検索結果ページ(search.php)では全件表示するように変更。
function.php 内に以下を追記。
function hwl_home_pagesize( $query ) {
if ( is_admin() || ! $query->is_main_query() )
return;
if ( is_search() ) {
// Display all found posts for the page of search result
$query->set( 'posts_per_page', -1 );
return;
}
}
add_action( 'pre_get_posts', 'hwl_home_pagesize', 1 );
‘posts_per_page’, -1 の「-1」を「5」にすれば5件表示、「10」なら10件表示。-1 にすれば全件表示になる。
加えて、検索フォームに何も入力せず検索すると、以前から全投稿と全ページが表示される仕様だった。これはこれで困ることもなかったのでそのままにしておいたが、空白で検索した場合は別途その旨表示してもいいかなと思い以下のように変更。
search.php の該当部分。
<?php if (isset($_GET['s']) && empty($_GET['s'])) { ?>
<p>検索条件が入力されていません。</p>
<?php } else { ?>
<p><?php printf( __( '<span class="search_word">%s</span> の検索結果' ), get_search_query() ); ?></p>
<ul id="logs">
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><span class="date"><?php the_time('YmdHis'); ?></span><span class="title"><?php the_title(); ?></span></a></li>
<?php endwhile; else: ?>
<li><?php _e('Sorry, no posts matched your criteria.'); ?></li>
<?php endif; ?>
</ul>
<?php } ?>