WordPress MUの固定ページで悩む


WordPressにはトップページを固定ページにする機能があって、いわゆるブログっぽくない見た目に簡単にできますよということなんですが、いざやってみると思わぬところではまってしまったのでメモっておきます。

やりたいこと

  1. http://example.comでアクセスすると「about」のページが出る
  2. メニューの「home」を選ぶと「最近の投稿」一覧が出る

こういうことがやりたかっただけなんですが、1は確かに簡単にできました。この設定をするだけです。

設定 >> 表示設定 >> トップページの表示 >> 固定ページ (以下を選択)
トップページ: - 選択 - about
投稿ページ:  - 選択 - なし

2の「最近の投稿」一覧を出すのが難しいです。テーマのデフォルトで表示されている「Blog」は「http://example.com」へのリンクになっていて、これで飛ぶと「about」のページになってしまいます。
http://example.com/?page_id=1」というふうに page_idを付けると飛ぶことは飛ぶんですが、記事決め打ちになってしまうので、「最近の投稿」というわけにいきません。

やり方

まず、テーマのディレクトリ(ex. /home/www/wordpress-mu/wp-content/themes/light)に「blog.php」というファイルを作ります。

<?php
/*
Template Name: ブログトップ
*/
?>
<?php query_posts('cat=-0'); //すべてのブログ記事を取得
    load_template( TEMPLATEPATH . '/index.php'); //indexを読み込む
?>
/home/www/wordpress-mu/wp-content/themes/light/blog.php

次に「home」ページを作って、右側の「Template」の指定を「ブログトップ」にします(blog.phpファイルを置いたら選択肢が出てくるようになります)。中身は空っぽでいいです。保存(公開)するとパーマリンクが出てきますので、「パーマリンク: http://satake7.net/home/」を「パーマリンク: http://satake7.net/blog/」に修正しておきます(/homeだと単に気持ち悪いからという理由だけです)。
そして表示設定も修正します。

設定 >> 表示設定 >> トップページの表示 >> 固定ページ (以下を選択)
トップページ: - 選択 - about
投稿ページ:  - 選択 - home

あと、パーマリンク設定をカスタム「/blog/%year%/%monthnum%/%day%/%post_id%/」にすれば OKです。

微調整

Lightテーマが勝手に付ける「Blog」が邪魔なので取ってしまいます。あと、ページで設定した順序で並ばなかったので、「sort_column」を追加しておきました。

-    <li class="<?php echo $pg_li; ?>"><a href="<?php bloginfo('siteurl'); ?>" title="Blog"><span>Blog</span></a></li>
-    <?php wp_list_page('depth=1&title_li=&exclude=143' ); ?>
+    <?php wp_list_page('sort_column=menu_order&depth=1&title_li=&exclude=143' ); ?>
/home/www/wordpress-mu/wp-content/themes/light/header.php

もちろん、ページの順序は登録で付けておきます。以上で、「トップページに固定ページが表示されて、homeでブログの最近の投稿が表示される」ができました。