WordPressの起動1 – WordPressテンプレートファイルの構成

WordPress起動時のコアファイルの役割の概要

  1. -index.php(WordPressのエントリーポイント)
  2. —–wp-blog-header.php
  3. ———wp-load.php(環境設定)
  4. ————-wp-config.php(DB接続情報)
  5. —————–wp-settings.php(WordPress初期設定のコア)
  6. ———wp関数(WordPressメイン関数実行)
  7. ———template-loader.php(テンプレート選択)

エントリポイントであるindex.phpからインクルードされるwp-blog-header.phpがすべての基点になり、このようにエントリーポイントがindex.phpから別ファイルに分離されていることで、WordPressのインストールディレクトリを自由に変更することができます。

  • ①wp-load.php(環境設定)⇒②wp-config.php(DB接続情報)⇒③wp-settings.php(WordPress初期設定のコア)

というリンクの中でWordPress起動のための前準備をします。

次にwp-includs/functions.phpの中に定義されているwp関数を実行しますが、その中からwp-includes/class-wp.phpに定義されているWPクラスのmainメソッドを実行することでURLにマッチしたクエリを確定し、wp-includes/query.phpにあるWP_Queryクラスの$wp->query_postsメソッドで投稿を取得します。

URLにて確定されたクエリは、MySQLクエリに変換され、WP_Queryクラスのオブジェクトである$wp_queryグローバル変数の$wp_query->posts配列に、wp_postテーブルとwp_postmetaテーブルから、表示すべき投稿・固定ページデータを格納し、のちに選択されるテンプレート上に出力します。

最後にtemplate-loader.phpにてテンプレート階層に従って、該当テンプレートが決定されます。

ベーステンプレートの構成

template-loader.phpの条件文の中で、テンプレート階層の優先度によってベーステンプレートが選択されます。

index.php配下

  1. 404.php
  2. search.php
  3. single-投稿タイプスラッグ.php>single.php
  4. カスタムテンプレートスラッグ.php>page-任意のページスラッグ.php>page.php
  5. front-page.php>home.php

archive.php配下

  1. category-スラッグ.php>category.php
  2. archive-投稿タイプスラッグ.php
  3. taxonomy-タクソノミスラッグ.php>taxonomy.php
  4. date.php

パーツテンプレートの構成

ベーステンプレートから読み込まれる共通パーツテンプレートで、例えばsearchform.phpはheader.phpやsidebar.phpからget_search_form()で読み込まれ、検索結果をsearch.phpに表示します。

  1. header.php:get_header()で読み込み
  2. footer.php:get_footer()で読み込み
  3. sidebar.php:get_sidebar()で読み込み
  4. sidebar-archives.php:get_sidebar(‘archives’)で読み込み
  5. sidebar-categories.php:get_sidebar(‘categories’)で読み込み
  6. loop-main.php:get_template_part(‘loop’, ‘main’)で読み込み
  7. searchform.php:get_search_form()で読み込み

テンプレートタグというWordPress関数

起動時のコアモジュールから生成された、URLに基づく適切な情報を格納したグローバル変数$wp_post->postsから、テンプレートタグ(WordPressビルトイン関数)で、データをブラウザにレンダリング表示します。

WordPressでデータを表示するには、テンプレートタグ以外にPHP本体のビルトイン関数が使えますが、両者の違いとしてテンプレートタグは管理画面の「設定」に基づいて値を表示するなど、よりWordPress寄りな関数になっています。

header.php:ヘッダーパーツテンプレート

//CSS読み込み
<link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/style.css" type="text/css" />

//ブログタイトル
<title><?php bloginfo('name'); ?></title>

//bodyタグのクラス
<body <?php body_class(); ?>>

//ページタイトル
<h1><a href="<?php echo home_url();?>"><img src="<?php echo get_template_directory_uri(); ?>/images/logo.png"></a></h1>

//ページ情報
<?php bloginfo('description'); ?>

//検索フォームパーツを読み込み
<?php get_search_form(); ?>

//トップページかどうか調べる
</php if( is_home()): ?>

searchform.php:検索フォームパーツテンプレート

//検索フォームを動作させるにはaction属性がトップページのURL、GETメソッド、name属性とid属性にsを設定
<form action="<?php echo home_url(); ?>" method="get" class="searchform">

//検索されたキーワードを表示する(検索した後にフォームにキーワードを残すためにvalue属性にセット)
<input type="text" value="<?php the_search_query(); ?>" name="s" id="s" placeholder="サイト内検索">

search.php:検索結果ベーステンプレート

//ヘッダーパーツを読み込み
<?php get_header(); ?>

//検索結果ページのタイトルに入力キーワードをセット
<h1 class="type-A">php the_search_query();?>の検索結果</h1>
//WordPressループ <?php get_template_part('loop', 'main'); ?> //サイドバーパーツを読み込む <?php get_sidebar(); ?> //フッターパーツを読み込み <?php get_footer(); ?>

sidebar-categories.php:カテゴリサイドバーパーツテンプレート

<?php 
$args=array(
    'title_li'=>'カテゴリナビ',
    'show_count'=>true
);
//カテゴリーページへのリンク一覧をli囲みで表示 
wp_list_categories($args); 
?>

front-page.php:トップページベーステンプレート

//ヘッダーパーツを読み込み
<?php get_header(); ?>

//WordPressループ
<?php get_template_part('loop', 'main'); ?>	

//サイドバーパーツを読み込む
<?php get_sidebar(); ?>

//フッターパーツを読み込み
<?php get_footer(); ?>

index.php:カテゴリ・アーカイブベーステンプレート

//ヘッダーパーツを読み込み
<?php get_header(); ?>

//ページのタイトル
<?php if(is_month()): ?>
    //本来はループの中で使用するが、月別アーカイブならその月の日付を表示する。
    <?php the_time('Y年m月'); ?> 
<?php else : ?>
    //現在表示しているページのタイトルで個別記事なら投稿タイトル、カテゴリアーカイブページならカテゴリ名
    <?php wp_title(''); ?> 
<?php endif; ?>	

//WordPressループ
<?php get_template_part('loop', 'main'); ?>	

//サイドバーパーツを読み込む
<?php get_sidebar('categories'); ?>
<?php get_sidebar('archives'); ?>

//フッターパーツを読み込み
<?php get_footer(); ?>

loop-main.php:WordPressループパーツテンプレート

//WordPressループ
<?php 
if(have_posts()): 
    while(have_posts()): the_post(); 
?>

<?php 
    endwhile;
endif;
?>

//投稿ID
<article id="post-<?php the_ID(); ?>" <?php post_class('news'); ?>>

//カテゴリ表示
<?php the_category(); ?>

//投稿日付表示
<time datetime="<?php the_time('Y-m-d'); ?>"><?php the_time('Y年m月d日'); ?></time>

//タイトルとパーマリンクを表示
<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>

//抜粋文を表示
<?php the_excerpt(); ?>

//アイキャッチ画像を表示
<figure>
<?php if(has_post_thumbnail()): ?>
    <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('thumbnail'); ?></a>
<?php else: ?>
    <a href="<?php the_permalink(); ?>"><img src=<?php get_template_directory_uri(); ?>/images/noimage.png /></a>
<?php endif; ?>
</figure>

//検索結果ページsearch.phpなら
<?php if(is_search()) : ?>
<?php else : ?>
<?php endif; ?>

single.php:個別記事ページベーステンプレート

//ヘッダーパーツを読み込み
<?php get_header(); ?>

//WordPressループの中でコンテンツを読み込む


//前後の投稿へのリンク
<?php previous_post_link(); ?>
<?php next_post_link(); ?>

//サイドバーパーツを読み込む
<?php get_sidebar('categories'); ?>
<?php get_sidebar('archives'); ?>

//フッターパーツを読み込み
<?php get_footer(); ?>

404.php:HTTPステータス404テンプレート

//ヘッダーパーツを読み込み
<?php get_header(); ?>

//トップページのURL
<a href="<?php echo home_url(); ?>">トップに戻る</a>

//フッターパーツを読み込み
<?php get_footer(); ?>