はじめに
すべてのテンプレートファイルがブラウザによってレンダリングされる全コンテンツを生成するわけではありません。一部のテンプレートファイルは、comments.php
、header.php
、footer.php
、sidebar.php
、content-{$slug}.php
などの他のテンプレートファイルによって呼び出されます。これらのテンプレートファイルを順に見ていくことで、それぞれの目的と構築方法を理解します。
Header.php
多くのサイトは、ページや投稿に関係なく同じヘッダーを持っています。しかし、一部のサイトでは、ページに応じてセカンダリナビゲーションや異なるバナー画像などのわずかなバリエーションがあります。あなたの`````header.php`````ファイルは、[条件付きタグ](/read/wordpress/27ca28664440fcc0.md)を使用すれば、これらのすべてのバリエーションを処理できます。
ほとんどのテーマには`````header.php`````ファイルがあり、このファイルの機能性と保守性はその作成をほぼ要求します。
以下は、twenty fifteenテーマに見られるheader.phpの例です。
``````bash
<!DOCTYPE html>
<html <?php language_attributes(); ?> class="no-js">
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>">
<meta name="viewport" content="width=device-width">
<link rel="profile" href="http://gmpg.org/xfn/11">
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>">
<!--[if lt IE 9]>
<script src="<?php echo esc_url( get_template_directory_uri() ); ?>/js/html5.js"></script>
<![endif]-->
<?php wp_head(); ?>
</head>
<body <?php body_class(); ?>>
<div id="page" class="hfeed site">
<a class="skip-link screen-reader-text" href="#content"><?php _e( 'Skip to content', 'twentyfifteen' ); ?></a>
<div id="sidebar" class="sidebar">
<header id="masthead" class="site-header" role="banner">
<div class="site-branding">
<?php if ( is_front_page() && is_home() ) : ?>
<h1 class="site-title">
<a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a>
</h1>
<?php else : ?>
<a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a>
<?php endif;
$description = get_bloginfo( 'description', 'display' );
if ( $description || is_customize_preview() ) :
echo $description;
endif; ?>
<button class="secondary-toggle"><?php _e( 'Menu and widgets', 'twentyfifteen' ); ?></button>
</div><!-- .site-branding -->
</header><!-- .site-header -->
<?php get_sidebar(); ?>
</div><!-- .sidebar -->
<div id="content" class="site-content">
`
最初はコードが少し daunting に見えるかもしれませんが、分解すると十分にシンプルになります。オープニングコメントの後、head
が作成されます。テンプレートタグwp_head()
は、私たちのスタイルと、functions.php
ファイルでキューに入れたフッターではなくヘッダーに表示されるスクリプトをすべて引き込みます。
次に、body
が開かれ、HTMLとPHPの混合が存在します。サイトブランディングのdiv内にあるいくつかの条件付きタグは、ユーザーがいるページに基づいて表示される内容を少し調整します。次に、サイトナビゲーションが引き込まれます。最後に、メインサイトコンテンツのdivが開かれ、footer.php
ファイルで閉じられる可能性が高いです。
重要なテンプレートタグの一つは、body_class()
で、body
タグのオープニングに見られます。これは、テンプレートファイルや使用されている他の設定に応じてボディクラスを提供することで、テーマのスタイリングを非常に簡単にする便利なタグです。
Footer.php
多くの場合、開発者は[ウィジェットエリア](/read/wordpress/04cc9481108cdfdf.md)をフッターに配置し、エンドユーザーが異なるコンテンツタイプをフッターに簡単にドラッグアンドドロップできるようにします。
以下は、Twenty Fifteenテーマの`````footer.php`````ファイルの例です。
``````bash
</div><!-- .site-content -->
<footer id="colophon" class="site-footer" role="contentinfo">
<div class="site-info">
<?php
/**
* Fires before the Twenty Fifteen footer text for footer customization.
*
* @since Twenty Fifteen 1.0
*/
do_action( 'twentyfifteen_credits' );
?>
<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentyfifteen' ) ); ?>"><?php printf( __( 'Proudly powered by %s', 'twentyfifteen' ), 'WordPress' ); ?></a>
</div><!-- .site-info -->
</footer><!-- .site-footer -->
</div><!-- .site -->
<?php wp_footer(); ?>
</body>
</html>
`
404.php
ユーザーが存在しないページを訪れようとすると、404.phpテンプレートを作成していない限り、index.php
ページにリダイレクトされます。ページが見つからないか、もはや利用できないことを説明するメッセージを持つことは良いアイデアです。このテンプレートを作成することで、テーマの視覚的な側面を一貫性のあるものに保ち、エンドユーザーに役立つ情報を提供します。
以下は、twenty fifteenテーマの404.phpテンプレートファイルの例です。
<?php get_header(); ?>
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<section class="error-404 not-found">
<header class="page-header">
<h1 class="page-title"><?php _e( 'Oops! That page can’t be found.', 'twentyfifteen' ); ?></h1>
</header><!-- .page-header -->
<div class="page-content">
<?php _e( 'It looks like nothing was found at this location. Maybe try a search?', 'twentyfifteen' ); ?>
<?php get_search_form(); ?>
</div><!-- .page-content -->
</section><!-- .error-404 -->
</main><!-- .site-main -->
</div><!-- .content-area -->
<?php get_footer(); ?>
Comments.php
コメントを作成する際に関与するコードについては、[コメントテンプレートページ](https://developer.wordpress.org/themes/template-files-section/partial-and-miscellaneous-template-files/comments/)で詳しく説明されています。
<a name="sidebar-php"></a>
## Sidebar.php
多くのテーマは、ウィジェットを表示するためにサイドバーを利用します。テーマでサイドバーが機能するためには、登録され、その後サイドバー用のテンプレートファイルが作成される必要があります。[サイドバーの登録](/read/wordpress/fc464b1c9c7a76ef.md)については、後の章で詳しく学びます。サイドバーファイルには、条件付きステートメントや`````is_active_sidebar( 'sidebar-name' )`````関数が含まれており、ウィジェットがサイドバー内で使用されていることを確認し、不要に空のHTMLがページに追加されないようにします。
以下は、twenty fifteenテーマのサイドバーテンプレートファイルの例です。下部に、`````<?php dynamic_sidebar( 'sidebar-1' ); >`````を使用してサイドバーが引き込まれていることに注意してください。これにより、そのサイドバーに配置されたウィジェットが、このテンプレートを引き込んでいるページに表示されます。
``````bash
<?php if ( has_nav_menu( 'primary' ) || has_nav_menu( 'social' ) || is_active_sidebar( 'sidebar-1' ) ) : ?>
<div id="secondary" class="secondary">
<?php if ( is_active_sidebar( 'sidebar-1' ) ) : ?>
<div id="widget-area" class="widget-area" role="complementary">
<?php dynamic_sidebar( 'sidebar-1' ); ?>
</div><!-- .widget-area -->
<?php endif; ?>
</div><!-- .secondary -->
<?php endif; ?>
`
Content-{$slug}.php
多くのテーマ開発者は、テンプレートファイルを小さな部分に分割します。彼らはしばしば、page.php, home.php, comments.php
などのテンプレートファイルにラッパーやページアーキテクチャ要素を配置しますが、その後、これらのページのコンテンツを表示するコードを別のテンプレートファイルに配置します。content-{$slug}.php
に入ります:一般的な例はcontent-page.php, content-post.php, content-portfolio.php, content-none.php
です。これらはWordPressが特定の方法で認識し解釈するファイル名ではなく、特定のタイプのコンテンツを表示するための一般的なアプローチです。
たとえば、ブログ投稿では、著者の名前、投稿の日付、おそらく投稿のカテゴリを表示したいことがよくあります。また、前の投稿や次の投稿へのリンクもあるでしょう。その情報は通常のページには適切ではありません。同様に、ポートフォリオページでは、ブログ投稿やページのフィーチャー画像とは異なる方法で表示したいフィーチャー画像やギャラリーがあるでしょう。
get_template_part()
テンプレートタグを使用してcontent-{$slug}.php
ファイルを引き込みます。content-page.php
ファイルを引き込むには、get_template_part( 'content', 'page' );
を呼び出します。
以下は、twenty fifteenのcontent-page.php
テンプレートファイルの例です。
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<header class="entry-header">
<?php the_title( '<h1 class="entry-title">', '</h1>' ); ?>
</header><!-- .entry-header -->
<div class="entry-content">
<?php the_content(); ?>
<?php
wp_link_pages( array(
'before' => '<div class="page-links"><span class="page-links-title">' . __( 'Pages:', 'twentyfifteen' ) . '</span>',
'after' => '</div>',
'link_before' => '<span>',
'link_after' => '</span>',
'pagelink' => '<span class="screen-reader-text">' . __( 'Page', 'twentyfifteen' ) . ' </span>%',
'separator' => '<span class="screen-reader-text">, </span>',
) );
?>
</div><!-- .entry-content -->
<?php edit_post_link( __( 'Edit', 'twentyfifteen' ), '<footer class="entry-footer"><span class="edit-link">', '</span></footer><!-- .entry-footer -->' ); ?>
</article><!-- #post-## -->