[_s] archive.phpとsearch.php

前回からの続きです。

archive.php

archive.phpを見ていきます。

<?php
/**
 * The template for displaying archive pages
 *
 * @link https://developer.wordpress.org/themes/basics/template-hierarchy/
 *
 * @package yottagin_s
 */
get_header();
?>

	<div id="primary" class="content-area">
		<main id="main" class="site-main">
		<?php if ( have_posts() ) : ?>
			<header class="page-header">
				<?php
				the_archive_title( '<h1 class="page-title">', '</h1>' );
				the_archive_description( '<div class="archive-description">', '</div>' );
				?>
			</header><!-- .page-header -->

			<?php
			/* Start the Loop */
			while ( have_posts() ) :
				the_post();
				/*
				 * Include the Post-Type-specific template for the content.
				 * If you want to override this in a child theme, then include a file
				 * called content-___.php (where ___ is the Post Type name) and that will be used instead.
				 */
				get_template_part( 'template-parts/content', get_post_type() );
			endwhile;
			the_posts_navigation();
		else :
			get_template_part( 'template-parts/content', 'none' );
		endif;
		?>
		</main><!-- #main -->
	</div><!-- #primary -->

<?php
get_sidebar();
get_footer();

single.phpと似ていますが、if-elseが入っている分少し読みにくいので、php部分だけ抜き出して、馴染みやすい形にします。

<?php
//表示するアーカイブがある時は…
if ( have_posts() ) {
  //そのアーカイブのタイトルを表示する。
  the_archive_title( '<h1 class="page-title">', '</h1>' );
  //そのアーカイブのディスクリプションを表示する。
  the_archive_description( '<div class="archive-description">', '</div>' );
  //表示するアーカイブがある限りWordPressループを回す。
  while ( have_posts() ) {
  //記事を選択して、ポストタイプに従ったテンプレートで表示する。
  //普通はcontent.phpを読み込まれる。
    the_post();
    get_template_part( 'template-parts/content', get_post_type() );
  }
  //前後のナビゲーションを表示する。
  the_posts_navigation();
} 
//表示するアーカイブがない時は…
else {
  //content-none.php を読み込む。
  get_template_part( 'template-parts/content', 'none' );
}

アーカイブがある時はそのタイトルと内容を表示する、アーカイブがない時は何もありませんと表示します。

また、 get_template_part( ‘template-parts/content’, get_post_type() ); のコメントで、 get_post_type()をわざわざ第2引数に使う意図が書かれています。single.phpの時にわざわざこう書く理由が良くわからなかったのですが、子テーマを作成するときに、異なるテンプレートを読み込むような拡張がしやすいようこう書いているようです。

search.php

search.phpを見てみます。

<?php
/**
 * The template for displaying search results pages
 *
 * @link https://developer.wordpress.org/themes/basics/template-hierarchy/#search-result
 *
 * @package _s
 */
get_header();
?>
	<section id="primary" class="content-area">
		<main id="main" class="site-main">
		<?php if ( have_posts() ) : ?>
			<header class="page-header">
				<h1 class="page-title">
					<?php
					/* translators: %s: search query. */
					printf( esc_html__( 'Search Results for: %s', '_s' ), '<span>' . get_search_query() . '</span>' );
					?>
				</h1>
			</header><!-- .page-header -->
			<?php
			/* Start the Loop */
			while ( have_posts() ) :
				the_post();
				/**
				 * Run the loop for the search to output the results.
				 * If you want to overload this in a child theme then include a file
				 * called content-search.php and that will be used instead.
				 */
				get_template_part( 'template-parts/content', 'search' );
			endwhile;
			the_posts_navigation();
		else :
			get_template_part( 'template-parts/content', 'none' );
		endif;
		?>
		</main><!-- #main -->
	</section><!-- #primary -->
<?php
get_sidebar();
get_footer();

archive.phpとほぼ変わりません。同じようにphp部分だけ抜き出してみます。

<?php
//表示するアーカイブがある時は…
if ( have_posts() ) {
  // Search Results for 検索単語 と表示する。
  printf( esc_html__( 'Search Results for: %s', '_s' ), '<span>' . get_search_query() . '</span>' );
  //表示する検索結果がある限りWordPressループを回す。
  while ( have_posts() ) {
    the_post();
    //contnt-search.phpというテンプレートファイルを読み込む。
    get_template_part( 'template-parts/content', 'search' );
  }
  //前後のナビゲーションを表示する。
  the_posts_navigation();
//表示するアーカイブがない時は…
} 
//表示するアーカイブがない時は…
else {
   //content-none.php を読み込む。
  get_template_part( 'template-parts/content', 'none' );
}

検索結果があればそれを表示します、なければ何もありませんと表示します。

次回に続きます。