[_s] index.php

前回からの続きです。

index.php

index.phpを見ていきます。

<?php
/**
 * The main template file
 *
 * This is the most generic template file in a WordPress theme
 * and one of the two required files for a theme (the other being style.css).
 * It is used to display a page when nothing more specific matches a query.
 * E.g., it puts together the home page when no home.php file exists.
 *
 * @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() ) :
			if ( is_home() && ! is_front_page() ) :
				?>
				<header>
					<h1 class="page-title screen-reader-text"><?php single_post_title(); ?></h1>
				</header>
				<?php
			endif;
			/* 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();

if ( is_home() && ! is_front_page() )の部分が何をしたいのか、私にはすぐ理解できませんでした。

		<?php
		if ( have_posts() ) :
			if ( is_home() && ! is_front_page() ) :
				?>
				<header>
					<h1 class="page-title screen-reader-text"><?php single_post_title(); ?></h1>
				</header>
				<?php
			endif;

is_home()とis_front_page()

codexの以下のページを読むと理解できると思うのですが、私にはわかりにくかったです。

https://codex.wordpress.org/Creating_a_Static_Front_Page

総当たりで挙動を調べてくれている下記のページで理解できました。

https://noumenon-th.net/programming/2016/06/30/is_home_is_front_page/
  • 「最新の投稿」(デフォルト設定)の場合、フロントページではis_home/is_front_pageのどちらもtrueを返します。
  • 「固定ページ>フロントページ」で指定したフロントページでは、is_front_pageがtrueを返します。
  • 「固定ページ>投稿ページ」で指定したページでは、is_homeがtrueを返します。

つまり、_sの if ( is_home() && ! is_front_page() ) は、管理画面でトップページに固定ページを使う設定にしている場合に使われる条件分岐で、index.phpを投稿ページ一覧表示のテンプレートに用いる際に使われます。

wordpressでは、管理画面で固定ページをフロントページに設定した場合、front_page、homeという単語が特別な意味をもつようになります。is_home() と is_front_page() のソースのコメントを読むのが、一番理解しやすいと思います。

is_front_page()

	/**
425	 * Determines whether the query is for the front page of the site.
426	 *
427	 * This is for what is displayed at your site's main URL.
428	 *
429	 * Depends on the site's "Front page displays" Reading Settings 'show_on_front' and 'page_on_front'.
430	 *
431	 * If you set a static page for the front page of your site, this function will return
432	 * true when viewing that page.
433	 *
434	 * Otherwise the same as @see is_home()
435	 *
436	 * For more information on this and similar theme functions, check out
437	 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
438	 * Conditional Tags} article in the Theme Developer Handbook.
439	 *
440	 * @since 2.5.0
441	 *
442	 * @global WP_Query $wp_query Global WP_Query instance.
443	 *
444	 * @return bool True, if front of site.
445	 */
446	function is_front_page() {
447	        global $wp_query;
448	
449	        if ( ! isset( $wp_query ) ) {
450	                _doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
451	                return false;
452	        }
453	
454	        return $wp_query->is_front_page();
455	}

is_home()

/**
458	 * Determines whether the query is for the blog homepage.
459	 *
460	 * The blog homepage is the page that shows the time-based blog content of the site.
461	 *
462	 * is_home() is dependent on the site's "Front page displays" Reading Settings 'show_on_front'
463	 * and 'page_for_posts'.
464	 *
465	 * If a static page is set for the front page of the site, this function will return true only
466	 * on the page you set as the "Posts page".
467	 *
468	 * For more information on this and similar theme functions, check out
469	 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
470	 * Conditional Tags} article in the Theme Developer Handbook.
471	 *
472	 * @since 1.5.0
473	 *
474	 * @see is_front_page()
475	 * @global WP_Query $wp_query Global WP_Query instance.
476	 *
477	 * @return bool True if blog view homepage, otherwise false.
478	 */
479	function is_home() {
480	        global $wp_query;
481	
482	        if ( ! isset( $wp_query ) ) {
483	                _doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
484	                return false;
485	        }
486	
487	        return $wp_query->is_home();
488	}

次回に続きます。