この記事をシェアする

WordPressをCMSとして利用する時、様々なプラグインを使ったりテーマをカスタマイズして機能を実装、あるいは余計な機能を削除しますが、初期状態のWordPresでも実は目に見えていない(例えばメニューでリンクを張っていない)状態でも、自動で作られるページやフィードがあります。
ほとんど自分の覚え書きですが、今回はWordPressで作られているページを把握してみたいと思います。

なお、マルチサイトを考慮していませんのでご注意ください。

作られるページ(テンプレートタグでリンクが提供されているページ)

WordPressをインストール後、投稿や固定ページ(あるいはカスタム投稿タイプ)で記事を投稿していくと個別ページが作成されますが、同時にカテゴリーアーカイブや年月アーカイブなどのアーカイブページも作成されます。

個別ページ(シングルページ)

  • 投稿(post_type = ‘post’)
  • 固定ページ(post_type = ‘page’)
  • 添付ファイルページ(post_type = ‘attachment’)
  • (条件によって)カスタム投稿タイプ(post_type = ‘book’ など)
  • 404エラーページ

<!--nextpage-->タグによって分割された場合も含みます

アーカイブ系

  • サイトのフロントページ(設定によってはブログのインデックスページも)
  • カテゴリーアーカイブ
  • タグアーカイブ
  • 日付アーカイブ(年別、月別、日別の3種類)
  • 作成者アーカイブ
  • (条件によって)カスタム分類(タクソノミー)アーカイブ
  • (条件によって)カスタム投稿タイプアーカイブ
  • 検索結果ページ

フィードについては以前書いた「WordPressのフィードに関する覚え書き」をご覧ください

このページいらないんですけど

例えばWordPressでミニマムな企業サイトなどを構築する場合、作成者アーカイブなど必要無いページが出てくるかと思います。
(カスタム投稿タイプについてはアーカイブを作らないようにする事もできるので割愛)
注意すべきはテンプレートやメニューから作成者アーカイブへのリンクを削除しても、実際にはページにアクセス可能で、うっかりすると検索エンジンに拾われます。

このブログは私一人しか執筆者がいないのに作成者アーカイブもあります

作成者アーカイブについては以前「WordPressで投稿者アーカイブを作らない方法(リライトルールの勉強)」という記事を書きましたが、他のアーカイブページについても rewrite_rules フィルターフックし、flush_rules() を実行(パーマリンク設定を更新)すればOKです。

例)作成者アーカイブを作らない

add_filter( 'author_rewrite_rules', '__return_empty_array' );

こちらのページに必要なフックは全て書いてあります。
今回は例示として「作らない=404を返す」様にしましたが、もちろん独自ルールを作ることも可能です。

もう一つの方法として parse_querytemplate_redirect フックを使って特定のリクエストであれば404を返せばいいでしょう(例えばフィルターが提供されていないフィードや添付ファイルページなど)。

parse_query :クエリー条件が設定された時にフックする。404を返す場合は自力で404ページを実装する必要がある(例えば wp_die() をつかう)

add_action( 'parse_query', 'gs_comment_feed_404' );
function gs_comment_feed_404( $obj ) {
	if ( $obj->is_comment_feed ) { // コメントのフィードが呼ばれたら
		wp_die("Not Found.<br>n".'<a href="/".home_url('/').'">Back to Home.</a>', '', array( 'response' => 404, "back_link" => true ));
	}
}

template_redirect :テンプレートが呼ばれた時にフックする。404を返す場合でもテーマの404.phpを使える

add_action( 'template_redirect', 'gs_attachment_template_redirect' );
function gs_attachment_template_redirect() {
	if ( is_attachment() ) { // 添付ファイルの個別ページなら
		global $wp_query;
		$wp_query->set_404();
		status_header(404);
	}
}

ここに書いていないページは生成されないのか

逆に「カテゴリーの日付アーカイブ」「投稿者の日付アーカイブ」「カスタム投稿タイプの日付アーカイブ」などは作成されていないように思えます。しかし、そのリンクへのテンプレートタグが提供していないだけで、独自のリライトルールを追加すれば可能です。

突き詰めていくとWordPressの動作原理になるのですが、この辺はまがりんこと大曲さん(@jim0912)がWordBench千葉の勉強会でお話しされたようなので、資料へのリンクを張っておきます。

実際のサイトに落とし込む

作れられるページ、工夫しないといけないページが分かったら、コードを書いて実装していく訳ですが、もちろプラグインで提供されている物もあります。

あわせてテーマファイルを作る時にはテンプレート階層を理解しておくとスムーズに制作できるでしょう。


今回参考にしたサイト

まがりんさん宮内さん、いつもありがとうございます。

この記事をシェアする