WordPressで保存された履歴を削除し、さらに履歴を保存する数を制限もしくは無効にする方法

WordPressから記事をExportして、さらにImportすることがあります。WordPressでは、Exportすると
xmlのファイルになるのですが、これがサイズが大きいことがあります。中を見てみると、過去の版(履歴)も含まれています。
これは、exportしてimportしたときに、前のサイトでの編集の履歴までインポートできるので、便利な機能ではあるのですが、
記事を書いている最中にマメに「保存」「保存」とするとどんどん版がふえて、エクスポートファイルのサイズも
どんどん大きくなってしまいます。そこで、サイズの削減のために過去の履歴を削除することを考えてみます。

削除は簡単で、mySQLのサーヴァーに接続して下のコマンドを実行します。

DELETE FROM wp_posts WHERE post_type="revision";

テーブル名「wp_posts」は該当するものにかえてください。「接頭辞_posts」の形式です。重要なデータの場合は、念のため
実行する前にテーブルをバックアップしたほうがいいでしょうね。

ちなみに、あるサイトでこれを実行したところ、18MBあったエクスポートファイルが3.4MBになりました。1/6!

そもそも、なんでこんなにたくさんリビジョンを保存するのであろうか。必要あるのかしら? と思われた向きには、
保存する履歴の数を指定する機能があります。ただしWordpress 2.6以降のみ? 調査はしていません。

その方法は wp-config.phpに次のような行を追加するだけ。

define('WP_POST_REVISIONS', 数);

「数」に数字をいれると、その数だけにリビジョンが制限されます。0やfalseにするとリビジョンを保存する機能が
無効になるようです。

いやー、こんな定数があるなんて知らなかった…WordPressにはまだまだおもしろい機能がたくさんありそうです。

参考文献

  1. How to delete existing WordPress post revisions stored/saved, My Digital Life, 2008
  2. Disable and turn off post revisions tracking in wordpress 2.6 or above, My Digital Life, 2008
  3. How to store every post revisions on each auto save in wordpress with limit on versions count, My Digital Life, 2008

Blogger(blogspot.com)をよそへリダイレクトする方法

ウェブのURLを変更する場合、301リダイレクトをすると検索エンジンが「URLが変更になったんだな」と認識してくれることになっていますが、Bloggerからよそへひっこす場合、定番の.htaccessを使った方法やPHPのスクリプトを使う方法がつかえません。かわりの方法を試してみたのでメモしておきます。

手順は以下のとおり。

  1. 移転元のBloggerから、移転先のWordpressへ記事をインポートしておく。パーマリンクも同じにしておく。
  2. Bloggerの「レイアウト」「HTMLの編集」で、<header>と</header>の間に下記の2行をいれる。
    <meta content='0;url=http://your.new.blog.domain.com/newdir/' http-equiv='refresh'/>
    <meta name="ROBOTS" content="NOINDEX, NOFOLLOW"/>
    
  3. 同じくBloggerの「レイアウト」「HTMLの編集」で、「<b:section class=’main’ id=’main’ showaddelement=…」のすぐあとに以下のコードをいれる。
    <b:widget id='Redirector' locked='true' title='Blog Posts' type='Blog'>
    <b:includable id='main'>
    <b:if cond='data:blog.pageType == "item"'>
    <b:loop values='data:posts' var='post'>
    <script type='text/javascript'>
    var new_page=&#39;your.new.blog.domain.com/newdir/&#39;;
    var permalink = &#39;<data:post.url/>&#39;;
    var timestamp = &#39;<data:post.timestampISO8601/>&#39;;
    timestamp = timestamp.split(&#39;-&#39;);
    timestamp = timestamp[0]+&#39;/&#39;+timestamp[1];
    new_page = permalink.replace(/youroldblog.blogspot.com/20[0-9]{2}/[0-9]{2}/,new_page+timestamp);
    document.location.href = new_page;
    </script>
    </b:loop>
    </b:if>
    </b:includable>
    </b:widget>
    

このコードでは移転元と移転先のパーマリンクがwordpressでいうところの「/%year%/%monthnum%/%postname%.html」であるということを前提としています。ちがう場合は、timestampあたりを適当に修正してください。このコードは参考文献[1]をベースに、おかしいところを多少変更しました。

「1.」が案外むづかしい。ふつうにインポートすると、パーマリンクが保存されません。記事の数が多い場合は困るね。要検討です。

「2.」の meta http-equiv=’refresh’は正確には301リダイレクトにはなりませんが、Yahoo!やGoogleは転送前の時間が0または1の場合は301として、それより大きい場合は302として扱うそうです(参考文献[2])。なので、これでよしとしよう。

というわけで、ためしにやってみました。http://unixjp.blogspot.com/2006/05/blog-post.htmlにアクセスすると、http://narak.jp/wptest/2006/05/blog-post.htmlへリダイレクトされるようにしました。Google/Yahoo!が301扱いを
してくれているかどうかはわかりませんが….

参考文献

  1. How To Redirect Blogger Beta To WordPress.Com, laffers.net, 2007
  2. 301 Moved Permanentlyでウェブサイトを転送する方法, たんきゅうラボ, 2006

WordPressのサブページの一覧を自動的に表示する方法

WordPressにはふつうのブログの記事「Post」と、それ以外に「Page」という記事の投稿方法があります。ポストは通常の
ブログの記事のように時系列にそって書き足していくようなものに向いているのに対し、ページは比較的静的な内容のものを書くのに
向いていると言われています(参考文献[1])。
サイトの内容をすべて「ポスト」で書いて、カテゴリーやタグを利用して分類する手もありますが、
今回のテストサイトでは、ニュース記事を「ポスト」で、通常のコンテンツを「ページ」で構築してみました。

ぺージには階層構造を持たせることができ、ページの下にサブページを作成することができます。そして、「ページ」はテンプレートタグ(参考文献[2])を使っていろいろな方法で表示できますが、サブページの取り扱いが十分とはいえないので、多少工夫する必要があります。

まず、親ページの一覧の取り方ですが、参考文献[4]にあるように

<?php wp_list_pages('title_li=&depth=1'); ?>

とすれば<li>で囲まれたアイテムとしてページの一覧がリンクつきで出力されます。問題はサブページです。ページが2階層のとき、現在表示しているページが親ならば自分の子供たちを、現在表示しているページが子供ならば兄弟たちを表示したいのですが、そのようなタグがないので、以下のようにします。

<?php 
if (is_page() && $post->post_parent ) { //サブページのとき
   $parent=$post->post_parent;
} else { //トップページのとき
   $parent=$post->ID;
}
$ul_top_title = get_the_title($parent);
$ul_top_url = get_permalink($parent);
if(wp_list_pages("title_li=&child_of=$parent&echo=0" )):
?>
<div id="sidebar">
<ul>
<li id="sidebartop"><a href="<?php echo $ul_top_url; ?>"> <?php echo $ul_top_title; ?> </a> </li>
<?php 
$children = wp_list_pages('title_li=&sort_column=menu_order&child_of='.$parent.'&echo=0');
echo $children;
?>
</ul>
</div>
<?php endif; ?>

深入りして解説はしませんが、ざっと言うとまずいま表示しているのが親ページか子ページかを判別し、
親ページなら自分自身、子ページなら親のページIDを$parentにセットします。次に、$parentに子ページがあれば
サイドバークラスのdiv要素を挿入して、$parentの子供の一覧を挿入する。子ページがなければ何もいれない。
という感じになっています。詳しくは参考文献[3][4][5][6]あたりを御覧になるといいかも。

これでサンプルサイトで言うと、このような表示が実現できています。

Pages and Sub Pages

図1. サンプルサイトでの表示

WordPressのいいところはのひとつは、テンプレートにすきなようにPHPのコードをかけるところですね。ってあたりまえ?

参考文献

  1. Pages, WordPress Codex
  2. テンプレートタグ, WordPress Codex 日本語版
  3. Conditional Tags, WordPress Codex
  4. WordPressのサブページナビゲーションを動的にする方法, ブログヘラルド, 2007
  5. WordPressテーマ(テンプレート)カスタマイズのまとめ(日本語訳), 2008

WordPressでRSSにページの更新も含めるプラグイン「Feed Control」

WordPressには「ページ」というふつうのブログのポストとは違う記事をかく方法があって、使い方によっては大変便利なのですが、
これがデフォルトではRSSに含まれません。「ページ」だけ、あるいは「ページ」と「ポスト」の両方をつかってサイトを作る場合、
これではこまってしまいますね。そんなときはfeed controlというプラグインをつかうといいですね。

使い方は簡単。

  1. feedcontrol_v1-0.zipをダウンロードする。
  2. zipファイルの中身を、インストールするWordPressのディレクトリのwp-content/plugins/以下に展開する。
  3. WordPressの管理画面の「プラグイン」でfeed controlを「有効」にする。
  4. 「設定」の「feed control」でfeed controlの設定をする。特に変更しなくてOK。
Feed Control

図1. 管理→Feed Control

すると…

Feed

図2. 「ページ」も含まれたRSS Feed

みごとに「ページ」もRSSに含まれています! って、 この画面では「ポスト」なのか「ページ」なのか、みただけではわかりませんが…ここにみえてるのはぜんぶ「ページ」ですね。

これは大変便利なのでみなさんもお使いになってみてくださいねー!

参考文献

  1. Feed Control, slipstream, 2006
  2. ページのRSS配信を可能にするプラグイン Feed Control, WordPress Go Go, 2007
  3. 早山高校(サンプルサイト)のフィード

WordPressでブログではないふつうのサイトを構築する

わけあって、WordPressをつかってふつうの(ブログでない)サイトを作ってみようとおもい、試しに作ってみました。

sample site

図1. サンプルサイト

名前とかはもちろん適当です。1人で2日間ぐらいでできちゃったんですが、「WordPressサイト構築スタイルブック」のサンプルを参考にさせていただいたのでそのはやさでできました。参考ていうか、そのまま? ^^; この本は非常に面白いので、お勧めします。わたしも買いました。

図2. WordPressサイト構築スタイルブック

もちろんまるごとおなじではなくて、「ページ」を使ってサイトを構築してるんだけども、サブページの一覧をだすようにしたり、
デフォルトではRSSにはポストだけしか含まないのを「ページ」を含むようにしたり、いろいろ変更してあります。おかげで、
WordPressのバックエンドやテンプレートタグの概要がつかめました。そのへんのTipsも稿を改めて書いておきますね。

参考文献

  1. WordPressサイト構築スタイルブック」のサンプル
  2. 国立谷山早山高等学校サイト(サンプル)
  3. WordPress.org