WordPressはURLのクエリ文字列を使用して、ページの表示に使用するテンプレートファイルが見つかるまでテンプレート階層を検索し、複数のテンプレートの中から優先順位が高いものを選択します。
-
インドネシアのITサービス
インターネット技術の急速な発展と普及により、優秀なIT人材を輩出することで知られるジャカルタのビヌス大学(BINUS)やバンドゥンのバンドゥン工科大学、インドネシアコンピューター大学(UNIKOM)の学生の多くがインターネット・WEB業界やソフトウェア業界を志望するようです。
続きを見る
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メソッドで投稿を取得します。
-
WordPressの起動2 - WordPress起動時に読み込まれるコアファイルの順番
index.phpはWordPressのエントリーポイントでwp-blog-header.phpを通して環境設定ファイルwp-load.phpを呼びwp-config.phpの中でDB接続情報を読み込み、WordPressメイン関数を実行実行してtemplate-loader.phpの中でテンプレートを選択します。
続きを見る
URLにて確定されたクエリは、MySQLクエリに変換され、WP_Queryクラスのオブジェクトである$wp_queryグローバル変数の$wp_query->posts配列に、wp_postテーブルとwp_postmetaテーブルから、表示すべき投稿・固定ページデータを格納し、のちに選択されるテンプレート上に出力します。
最後にtemplate-loader.phpにてテンプレート階層に従って、該当テンプレートが決定されます。
ベーステンプレートの構成
template-loader.phpの条件文の中で、テンプレート階層の優先度によってベーステンプレートが選択されます。
-
WordPressによるWEBサイト開発4 - 固定ページと投稿記事の派生テンプレート
商品ページは投稿記事の入力画面に、共通情報用の入力フィールドをカスタムフィールドで追加し、「投稿」というタイトルを「商品登録」に変えて作成することもできますが、WordPressはコンテンツ作成を「投稿(post)」「固定ページ(page)」とは違う第三の投稿タイプ「商品(post_type)」として定義できます。
続きを見る
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:ヘッダーパーツテンプレート
//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(); ?>