template-loader.php


<?php
/**
 * --------------------------------------------
 *   テンプレート読み込み処理
 * --------------------------------------------
 *
 * Loads the correct template based on the visitor's url
 * @package WordPress
 *
 * 訪問者のURLを元に現在のテンプレートを読み込む
 */


/**
 * WP_USE_THEMESが定義 & trueならばアクションフック:template_redirect 実行
 *
 * do_action('template_redirect')
 *   リクエストされたページの表示に使用するテンプレートファイルを判断する前に実行し、
 *   プラグインがテンプレートファイルの選択を上書きできるようにする。
 *  ※参考:Codex プラグイン API/アクションフック一覧
 */
if ( defined('WP_USE_THEMES') && WP_USE_THEMES )
    /** アクションフック:template_redirect 実行 */
    do_action('template_redirect');


/**
 * Halt template load for HEAD requests. Performance bump. See #14348
 * HEADメソッドでリクエストされたテンプレートを停止。実行衝突 #14348参照
 *
 * 'REQUEST_METHOD'
 *   ページにアクセスする際に使用されたリクエストのメソッド名。
 *   'GET', 'HEAD', 'POST', 'PUT' など。
 *   [注意:]
 *    リクエストのメソッドが HEAD だった場合、 PHPスクリプトはヘッダを
 *    送信した後(言い換えれば、 出力バッファリングを行わずに全出力を処理した後)に終了する。
 *  http://php.net/manual/ja/reserved.variables.server.php
 *
 *
 *  [Ticket #14348]
 *  http://core.trac.wordpress.org/ticket/14348
 *    WordPressに対してHTTP HEADリクエストがあると処理は最後まで進み
 *    全体のページコンテンツが作られるが、それは無視される。
 *    これを修正するバッチを組み込む。
 *    大きな問題ではないように見えるが、多くのHEADリクエストを受け取れば大きな違いを生む。
 *    HEADリクエストに対してはかなり反応が早くなり、貴重なリソースの消費の無駄もなくなる。
 *
 *  ※
 *  HEADメソッドは更新情報などヘッダ情報だけが欲しい巡回ロボットなどがリクエストする。
 */
if ( 'HEAD' === $_SERVER['REQUEST_METHOD'] && apply_filters( 'exit_on_http_head', true ) )
	exit();


//--------------------------------
// 以下 リクエストによる分岐
//  ※ 参照:Codex > 条件分岐タグ
//--------------------------------

/**
 * Process feeds and trackbacks even if not using themes.
 * テーマを使わない設定のときでさえフィードとトラックバックは処理を進める。
 */

/*+ ロボットからのリクエストの場合。 */
if ( is_robots() ) :
    /** アクションフック:do_robots 実行 */
	do_action('do_robots');
	return;
/**
 * Syndication(フィード)がリクエストされた場合。
 * このタグは通常、一般のユーザーがページを表示しているときに条件を判断するためではなく、プラグイン開発の際に WordPress 内部で使われる。
 */
elseif ( is_feed() ) :
    /** アクションフックを使ってフィードテンプレートを読み込む */
	do_feed();
	return;
/**
 * フックの中にトラックバックの機構が組み込まれている場合。
 * このタグは通常、一般のユーザーがページを表示しているときに条件を判断するためではなく、プラグイン開発の際に WordPress 内部で使われる。
 */
elseif ( is_trackback() ) :
	include( ABSPATH . 'wp-trackback.php' );
	return;
endif;



/** WP_USE_THEMESが定義 & trueならば */
if ( defined('WP_USE_THEMES') && WP_USE_THEMES ) :
	$template = false;

    /**
     * is_404()
     *   "HTTP 404: Not Found"エラーページが表示されている場合。
     * get_404_template()
     *   カレントまたは親テンプレートから404テンプレートへのパスを検索する。
     *   404.php
     * ※該当ファイルがなければelse処理に入りindex.phpを読み込む。
     */
	if     ( is_404()            && $template = get_404_template()            ) :


    /**
     * is_search()
     *   検索結果のページが表示されている場合。
     *
     * get_search_template()
     *   カレントまたは親テンプレートから検索テンプレートへのパスを検索する。
     *   search.php
     * ※該当ファイルがなければelse処理に入りindex.phpを読み込む。
     */
	elseif ( is_search()         && $template = get_search_template()         ) :


    /**
     * is_tax()
     *   タクソノミーのアーカイブページが表示されている場合。
     *
     * get_taxonomy_template()
     *   カレントまたは親テンプレートからタクソノミーテンプレートへのパスを検索する。
     *   優先順位:
     *    1: taxonomy-{taxonomy}-{term}.php
     *    2: taxonomy-{taxonomy}.php
     *    3: taxonomy.php
     *        ↓
     *    is_archive()の判定処理へ
     */
	elseif ( is_tax()            && $template = get_taxonomy_template()       ) :


    /**
     * is_front_page()
     *   サイトのフロントページが表示されている場合(投稿・固定ページにかかわらず)。
     *   true を返すのは、表示設定の「トップページの表示」として
     *    (1)「最新の投稿」を設定している場合には、メインブログページが表示されるとき
     *    (2) 「固定ページ (以下を選択)」を設定している場合には、「フロントページ」として選択した固定ページが表示されるとき
     *
     * get_front_page_template()
     *   カレントまたは親テンプレートからフロントページテンプレートへのパスを検索する。
     *   front-page.php
     */
	elseif ( is_front_page()     && $template = get_front_page_template()     ) :


    /**
     * is_home()
     *   メインブログページが表示されている場合。
     *
     * get_home_template
     *   カレントまたは親テンプレートからホームページテンプレートへのパスを検索する。
     *   優先順位:
     *    1: home.php
     *    2: index.php
     */
	elseif ( is_home()           && $template = get_home_template()           ) :


    /**
     * is_attachment()
     *   投稿または固定ページの添付ファイルが表示されている場合。
     *   添付ファイルは、投稿画面のメディアアップロード機能を使ってアップロードした画像などのファイルの事で、
     *   テンプレートを使って独自のページ内に表示できる。
     *
     * get_attachment_template()
     *   カレントまたは親テンプレートから添付ファイルテンプレートへのパスを検索する。
     *   優先順位:
     *    1: MIME_TYPE.php - image.php, video.php, audio.php, application.php, その他 MIME type の最初の部分のファイル名
     *    2: attachment.php
     *        ↓
     *    is_single()の判定処理へ
     */
	elseif ( is_attachment()     && $template = get_attachment_template()     ) :
		remove_filter('the_content', 'prepend_attachment');


    /**
     * is_single()
     *   個別投稿のページ(または添付ファイルページ・カスタム投稿タイプの個別ページ)が表示されている場合。
     *   固定ページには適用されない。
     *
     *   ※WordPress3.5ではquery.php line:1466に次の記述あり
     *   if ( ('' != $qv['attachment']) || !empty($qv['attachment_id']) ) {
     *     $this->is_single = true;
     *            ↓
     *    つまりis_single()にはis_attachment()に該当するものも含まれる。
     *
     * get_single_template()
     *   カレントまたは親テンプレートから個別投稿ページテンプレートへのパスを検索する。
     *   優先順位:
     *    1: single-{post_type}.php
     *    2: single.php
     *  ※該当ファイルがなければelse処理に入りindex.phpを読み込む。
     */
	elseif ( is_single()         && $template = get_single_template()         ) :


    /**
     * is_page()
     *   固定ページが表示されている場合。
     *
     * get_page_template()
     *   カレントまたは親テンプレートから固定ページテンプレートへのパスを検索する。
     *   優先順位:
     *    1: カスタムテンプレート
     *    2: page-slug.php
     *    3: page-ID.php
     *    4: page.php
     *  ※該当ファイルがなければelse処理に入りindex.phpを読み込む。
     */
	elseif ( is_page()           && $template = get_page_template()           ) :


    /**
     * is_category()
     *   あるカテゴリーのアーカイブページが表示されている場合。
     *
     * get_category_template()
     *   カレントまたは親テンプレートからカテゴリーテンプレートへのパスを検索する。
     *   優先順位:
     *    1: category-slug.php
     *    2: category-ID.php
     *    3: category.php
     *        ↓
     *    is_archive()の判定処理へ
     */
	elseif ( is_category()       && $template = get_category_template()       ) :


    /**
     * is_tag()
     *   タグのアーカイブページが表示されている場合。
     *
     * get_tag_template()
     *   カレントまたは親テンプレートからタグテンプレートへのパスを検索する。
     *   優先順位:
     *    1: tag-slug.php
     *    2: tag-ID.php
     *    3: tag.php
     *        ↓
     *    is_archive()の判定処理へ
     */
	elseif ( is_tag()            && $template = get_tag_template()            ) :


    /**
     * is_author()
     *   作成者のアーカイブページが表示されている場合。
     *
     * get_author_template()
     *   カレントまたは親テンプレートから作成者テンプレートへのパスを検索する。
     *   優先順位:
     *    1: author-{nicename}.php
     *    2: author-ID.php
     *    3: author.php
     *        ↓
     *    is_archive()の判定処理へ
     */
	elseif ( is_author()         && $template = get_author_template()         ) :


    /**
     * is_date()
     *   日付別のアーカイブページのいずれかが表示されている場合。(例:月別、年別、日別、時間別)
     *
     * get_date_template()
     *   カレントまたは親テンプレートから日付テンプレートへのパスを検索する。
     *   優先順位:
     *    1: date.php
     *        ↓
     *    is_archive()の判定処理へ
     */
	elseif ( is_date()           && $template = get_date_template()           ) :


    /**
     * is_archive()
     *   各アーカイブページが表示されている場合。
     *   アーカイブページには、カテゴリー、タグ、作成者、日付別のものがある。
     *
     *   ※WordPress3.5ではquery.php line:1574に次の記述あり
     *    if ( $this->is_post_type_archive || $this->is_date || $this->is_author || $this->is_category || $this->is_tag || $this->is_tax )
     *       $this->is_archive = true;
     *            ↓
     *    つまり下記に該当するものもis_archive()には含まれる。
     *    is_tax()、is_tag()、is_category()、is_author() 、is_date()
     *
     *
     * get_archive_template()
     *   カレントまたは親テンプレートからアーカイブテンプレートへのパスを検索する。
     *   優先順位:
     *    1: archive-{post_type}.php
     *    2: archive.php
     *  ※該当ファイルがなければelse処理に入りindex.phpを読み込む。
     */
	elseif ( is_archive()        && $template = get_archive_template()        ) :


    /**
     * is_comments_popup()
     *   コメントポップアップウィンドウが表示されている場合。
     *
     * get_comments_popup_template()
     *   カレントまたは親テンプレートからコメントテンプレートへのパスを検索する。
     *   comments-popup.php
     *  ※該当ファイルがなければelse処理に入りindex.phpを読み込む。
     */
	elseif ( is_comments_popup() && $template = get_comments_popup_template() ) :


    /**
     * is_paged()
     *    表示中のページが複数のページにわたる場合。
     *    これは例えばアーカイブページやメインページに表示する投稿数よりも多い投稿があり、
     *    複数ページに分かれているときを指し、2ページ目以降のときに true を返す。
     *    ただし、1つの投稿や固定ページの本文が <!--nextpage--> クイックタグで複数ページに分けられている場合は当てはまらない。
     *
     * get_paged_template()
     *   カレントまたは親テンプレートから複数ページテンプレートへのパスを検索する。
     *   paged.php
     *  ※該当ファイルがなければelse処理に入りindex.phpを読み込む。
     */
	elseif ( is_paged()          && $template = get_paged_template()          ) :


    /**
     * 上記の条件に該当しない場合
     *
     * get_index_template()
     *   カレントまたは親テンプレートからindexテンプレートへのパスを検索する。
     */
    else :
		$template = get_index_template();
	endif;

	/** フィルターフック:template_include 実行 → テンプレート確定 */
	if ( $template = apply_filters( 'template_include', $template ) )
		/** 確定したテンプレート読み込み */
	    include( $template );
	return;
endif;


「template-loader.php」への1件のフィードバック

  1. There are actually quite a lot of details like that to take into consideration. That is a nice point to convey up. I provide the ideas above as basic inspiration but clearly there are questions just like the one you carry up where the most important factor can be working in trustworthy good faith. I don?t know if best practices have emerged around things like that, but I’m positive that your job is clearly identified as a fair game. Each boys and girls really feel the influence of just a moment’s pleasure, for the remainder of their lives.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です