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 }