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
総当たりで挙動を調べてくれている下記のページで理解できました。
- 「最新の投稿」(デフォルト設定)の場合、フロントページでは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 }