2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Wordpress] 固定ページを作成せずに静的ページを設置する

Posted at

静的ページの多い Wordpressサイト

先日、下記のような環境での作業を依頼されました。

クライアントから提供された環境は AWS EC2 で Wordpress がインストールされており、FTP で入れるのは wp-content フォルダ以下のみというものです。

この案件では静的ページが多数ありました。
例えば「物語」という静的ページを作るなら、普通は固定ページに「物語」を作り、スラッグに story と設定します。

いちいち固定ページを作りたくない

しかしローカル、ステージング、プロダクションと3箇所に固定ページを作るのが面倒になりました。

そうだ!パスで判断して get_template_part() で表示すればいいんじゃね?

index.php
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.phparchive-xxx.php など)でゴチャゴチャするのが嫌いなので index.php でルーティングをしたいタイプです。

固定ページを使うパターン

各話あらすじは story という固定ページを作って、宣伝担当さんが更新できるようにしました。

index.php
if (is_page('story')){
  // 固定ページ「story」
  header(' ', true, 200);
  get_template_part('story/index');

普通の記事(ニュース)のパターン

途中を飛ばして先に普通の記事について。
archive.php とか single.php をテーマのルートに置きたくないのでここでルーティングしています。

index.php
} else if (is_singular()) {
  // ブログ記事
  get_template_part('template/news/single');

} else{
  // それ以外
  get_template_part('template/news/archive');
}

静的ファイルを使うパターン

この記事の本題、静的ファイルパターンです。

放送情報 onair は更新頻度が少ないので静的ページです。
固定ページは作成していません。

index.php
} 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なら下記のように書きます。

index.php
} else if ($wp_query->query['pagename'] === 'special/comment'){
  header(' ', true, 200);
  get_template_part('special/comment/index');

おまけでカスタム投稿タイプ goods と、カスタムタクソノミー type に対応するパターンです。

index.php
} 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');

おわり

「静的ページをたくさん作るけどルーティングのためだけに固定ページを作りたくねえ!」
という方はお役立てください。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?