
本記事の概要
エントリポイントであるindex.phpからインクルードされるwp-blog-header.phpが基点になり、wp-load.phpで環境設定、wp-config.phpでDB接続情報、wp-settings.phpでWordPress初期設定を実行します。
次にwp-includs/functions.phpのwp関数を実行し、URLにマッチしたクエリを確定し、wp-includes/query.phpのquery_postsメソッドで投稿を取得します。
URLにて確定されたクエリは、MySQLクエリに変換され、wp_postテーブルとwp_postmetaテーブルからposts配列に、表示すべき投稿・固定ページデータを格納し、template-loader.phpにてテンプレート階層の優先度に従って、ベーステンプレートが決定されます。
WordPress起動時のコアファイルの役割の概要
- -index.php(WordPressのエントリーポイント)
- —–wp-blog-header.php
- ———wp-load.php(環境設定)
- ————-wp-config.php(DB接続情報)
- —————–wp-settings.php(WordPress初期設定のコア)
- ———wp関数(WordPressメイン関数実行)
- ———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配下
- 404.php
- search.php
- single-投稿タイプスラッグ.php>single.php
- カスタムテンプレートスラッグ.php>page-任意のページスラッグ.php>page.php
- front-page.php>home.php
archive.php配下
- category-スラッグ.php>category.php
- archive-投稿タイプスラッグ.php
- taxonomy-タクソノミスラッグ.php>taxonomy.php
- date.php
パーツテンプレートの構成
ベーステンプレートから読み込まれる共通パーツテンプレートで、例えばsearchform.phpはheader.phpやsidebar.phpからget_search_form()で読み込まれ、検索結果をsearch.phpに表示します。
- header.php:get_header()で読み込み
- footer.php:get_footer()で読み込み
- sidebar.php:get_sidebar()で読み込み
- sidebar-archives.php:get_sidebar(‘archives’)で読み込み
- sidebar-categories.php:get_sidebar(‘categories’)で読み込み
- loop-main.php:get_template_part(‘loop’, ‘main’)で読み込み
- searchform.php:get_search_form()で読み込み
テンプレートタグというWordPress関数
起動時のコアモジュールから生成された、URLに基づく適切な情報を格納したグローバル変数$wp_post->postsから、テンプレートタグ(WordPressビルトイン関数)で、データをブラウザにレンダリング表示します。
WordPressでデータを表示するには、テンプレートタグ以外にPHP本体のビルトイン関数が使えますが、両者の違いとしてテンプレートタグは管理画面の「設定」に基づいて値を表示するなど、よりWordPress寄りな関数になっています。
header.php:ヘッダーパーツテンプレート
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//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:検索フォームパーツテンプレート
1 2 3 4 5 |
//検索フォームを動作させるには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:検索結果ベーステンプレート
1 2 3 4 5 6 |
//ヘッダーパーツを読み込み <?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:カテゴリサイドバーパーツテンプレート
1 2 3 4 5 6 7 8 |
<?php $args=array( 'title_li'=>'カテゴリナビ', 'show_count'=>true ); //カテゴリーページへのリンク一覧をli囲みで表示 wp_list_categories($args); ?> |
front-page.php:トップページベーステンプレート
1 2 3 4 5 6 7 8 9 10 11 |
//ヘッダーパーツを読み込み <?php get_header(); ?> //WordPressループ <?php get_template_part('loop', 'main'); ?> //サイドバーパーツを読み込む <?php get_sidebar(); ?> //フッターパーツを読み込み <?php get_footer(); ?> |
index.php:カテゴリ・アーカイブベーステンプレート
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//ヘッダーパーツを読み込み <?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ループパーツテンプレート
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
//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:個別記事ページベーステンプレート
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//ヘッダーパーツを読み込み <?php get_header(); ?> //WordPressループの中でコンテンツを読み込む <!--?php the_content(); ?--> //前後の投稿へのリンク <?php previous_post_link(); ?> <?php next_post_link(); ?> //サイドバーパーツを読み込む <?php get_sidebar('categories'); ?> <?php get_sidebar('archives'); ?> //フッターパーツを読み込み <?php get_footer(); ?> |
404.php:HTTPステータス404テンプレート
1 2 3 4 5 6 7 8 |
//ヘッダーパーツを読み込み <?php get_header(); ?> //トップページのURL <a href="<?php echo home_url(); ?>">トップに戻る</a> //フッターパーツを読み込み <?php get_footer(); ?> |