WordPress でトップページを静的ページにして、サブディレクトリにブログを配置する方法

基本的な情報は、Pages - WordPress Codex 日本語版に書いてあるんだけど、なんだかややこしいので整理しておこう。

WordPress のバージョンは 2.6 として書いています。それ以前のバージョンではプラグインなどを導入しないと使えない機能があるかも知れません。

目標とするサイト構造

今回、目標とするサイト構造は、http://example.com/ に静的なトップページがあり、http://example.com/blog/ にアクセスするとブログのトップページが表示されるというもの。http://example.com/ で表示されるトップページには http://example.com/blog/ へのリンクが含まれる。またブログの記事は全て http://example.com/blog/ 以下に配置される。

ページテンプレートを2つ作成する

以下の2つのページテンプレートを作成する必要がある。いずれも使用中のテーマの中に保存する。

  • sitetop.php:サイト全体のトップページ用(ファイル名は sitetop.php 以外でも構わないが、home.php は NG なので注意)
  • blog.php:ブログのトップページ用

sitetop.php

<?php
/*
Template Name: サイトトップ
*/
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="ja">

<head profile="http://gmpg.org/xfn/11">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>サイト名</title>
</head>

<body>
<h1>サイトのトップページ</h1>
<p><a href="<?php bloginfo('url'); ?>/blog">ブログへのリンク</a></p>
</body>
</html>

blog.php

<?php
/*
Template Name: ブログトップ
*/
?>

<?php query_posts('cat=-0'); //すべてのブログ記事を取得
    load_template( TEMPLATEPATH . '/index.php'); //indexを読み込む
?>

ページの作成

管理画面にログインし、新規ページを作成する。

  • タイトル:「サイトトップ」、パーマリンク:「home(sitetop などとしても可)」、ページテンプレート:「サイトトップ」に設定
  • タイトル:「ブログトップ」、パーマリンク:「blog」、ページテンプレート:「ブログトップ」に設定

表示設定の変更

管理画面の「オプション>表示設定」をクリックし、「トップページの表示」から「固定ページ」を選択して、以下のように設定する。

  • トップページ:「サイトトップ」
  • 投稿ページ:「ブログトップ」

パーマリンク設定の変更

管理画面の「オプション>パーマリンク設定」をクリックし、「カスタム構造」のテキストフィールドに以下のように記入する。

/blog/post/%post_id%

ただし、この部分は変更しても構わない。

/blog/%year%/%monthnum%/%postname%/

など、/blog/ で始まる構造であれば問題ない。