静的ページの多い Wordpressサイト
先日、下記のような環境での作業を依頼されました。
クライアントから提供された環境は AWS EC2 で Wordpress がインストールされており、FTP で入れるのは wp-content
フォルダ以下のみというものです。
この案件では静的ページが多数ありました。
例えば「物語」という静的ページを作るなら、普通は固定ページに「物語」を作り、スラッグに story
と設定します。
いちいち固定ページを作りたくない
しかしローカル、ステージング、プロダクションと3箇所に固定ページを作るのが面倒になりました。
そうだ!パスで判断して get_template_part()
で表示すればいいんじゃね?
global $wp_query;
if (is_page('story')){
// 固定ページ「story」
get_template_part('story/index');
} else if ($wp_query->query['pagename'] === 'onair'){
// 静的ページ「onair」
header(' ', true, 200);
get_template_part('onair/index');
// 〜略〜
} else if (is_singular()) {
// ブログ記事
get_template_part('template/news/single');
} else{
// それ以外
get_template_part('template/news/archive');
}
解説
このサイトはアニメ作品のサイトなので「物語」「放送情報」「最新情報」などがあります。
そして筆者はテンプレート階層ファイル(page-xxxx.php
や archive-xxx.php
など)でゴチャゴチャするのが嫌いなので index.php
でルーティングをしたいタイプです。
固定ページを使うパターン
各話あらすじは story
という固定ページを作って、宣伝担当さんが更新できるようにしました。
if (is_page('story')){
// 固定ページ「story」
header(' ', true, 200);
get_template_part('story/index');
普通の記事(ニュース)のパターン
途中を飛ばして先に普通の記事について。
archive.php
とか single.php
をテーマのルートに置きたくないのでここでルーティングしています。
} else if (is_singular()) {
// ブログ記事
get_template_part('template/news/single');
} else{
// それ以外
get_template_part('template/news/archive');
}
静的ファイルを使うパターン
この記事の本題、静的ファイルパターンです。
放送情報 onair
は更新頻度が少ないので静的ページです。
固定ページは作成していません。
} else if ($wp_query->query['pagename'] === 'onair'){
// 静的ページ「onair」
header(' ', true, 200);
get_template_part('onair/index');
テーマフォルダに onair/index.php
を作って更新します。
https://****.***/onair
にアクセスすると $wp_query->query['pagename']
には onair
が入りますので、それを利用して分岐しています。
しかしコンテンツは表示されますが、固定ページを作っていないので 404 Not Found
が返されてしまいます。
対策として header(' ', true, 200);
で正常値を返します。
分岐のパターン
下層フォルダへの対応も簡単です。
https://****.***/special/comment
というURLなら下記のように書きます。
} else if ($wp_query->query['pagename'] === 'special/comment'){
header(' ', true, 200);
get_template_part('special/comment/index');
おまけでカスタム投稿タイプ goods
と、カスタムタクソノミー type
に対応するパターンです。
} else if (is_post_type_archive('goods') || is_tax('type')) {
// カスタム投稿タイプ「goods」のアーカイブ
get_template_part('template/goods/archive');
} else if (is_singular('goods')) {
// カスタム投稿タイプ「goods」のシングル
get_template_part('template/goods/single');
おわり
「静的ページをたくさん作るけどルーティングのためだけに固定ページを作りたくねえ!」
という方はお役立てください。