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_query
や template_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千葉の勉強会でお話しされたようなので、資料へのリンクを張っておきます。
実際のサイトに落とし込む
作れられるページ、工夫しないといけないページが分かったら、コードを書いて実装していく訳ですが、もちろプラグインで提供されている物もあります。
あわせてテーマファイルを作る時にはテンプレート階層を理解しておくとスムーズに制作できるでしょう。