WordPressを2.2から2.7にバージョンアップしたらエラーが出まくった

正月休みを利用して、WordPress のバージョンを 2.2.3 から 2.7 にアップしました。WordPress 自体のアップグレードは、WordPress のアップグレード – WordPress Codex 日本語版 の手順に従ってさくっと完了したのですが、プラグイン関連でエラーが多発して対応に追われてしまいました。

さくらインターネットで php のエラーログを吐くように設定する

さくらインターネットでは そのままだと php のエラーがどこにも吐かれないようなので、おしえてBP! wordpress/管理画面が表示されない を参考にしてエラーログを吐くようにしました。

Trackping Separator プラグイン

トラックバックとコメントを分けて表示させるプラグイン『Trackping Separator』のバージョンを 2.0 にあげたところ、コメント数の表示やトラックバックの表示でエラーが多発。調べてみると、1.1.1 から 2.0 になって仕様が大きく変更されたようです。(うーん、改悪だ・・・)

Trackping Separator 2.0 からは comments_number() で コメントの数のみ取得するよう変更され comments_only_popup_link() と comments_only_number() が削除されたので 1.x からのアップデートの際にはいくつか書き換えが必要になるかもしれません。

Trackping Separator でコメントとトラックバック・ピンバックの数を個別に取得する

というわけで、該当箇所を grep して以下のように変更。

変更前

<?php comments_only_popup_link('0 comment', '1 comment', '% comments'); ?>
<?php comments_only_number('0 comment', '1 comment', '% comments'); ?>

変更後

<?php comments_popup_link('0 comment', '1 comment', '% comments'); ?>
<?php comments_number('0 comment', '1 comment', '% comments'); ?>

ほかにも、トラックバックを表示させる方法が、ループを使ってごちゃごちゃしなくても、listtrackpings() を使えばOKになっていたので、comments.php を次のように変更しました。

変更前

<?php foreach ($comments as $comment) : ?>
    <? if ($comment->comment_type == "trackback" || $comment->comment_type == "pingback" || ereg("<pingback />", $comment->comment_content) || ereg("<trackback />", $comment->comment_content)) { ?>
            <li id="comment-<?php comment_ID() ?>">
                <cite>
                    <span class="author"><?php comment_author_link() ?></span>
                    <span class="date"><?php comment_date( $hemingway->date_format() . '.y' ) ?> / <?php comment_date('ga') ?></span>
                </cite>
                <div class="content">
                    <?php if ($comment->comment_approved == '0') : ?>
                    <em>Your comment is awaiting moderation.</em>
                    <?php endif; ?>
                    <?php comment_text() ?>
                </div>
                <div class="clear"></div>
            </li>
    <? } ?>
<?php endforeach; /* end for each ping */ ?>

変更後

    <?php listtrackpings('both','
        <li id="trackback-%id">
            <cite>
                <span class="author"><a href="%url">%origin</a></span>
                <span class="date">%date</span>
            </cite>
            <div class="content">%content</div>
            <div class="clear"></div>
        </li>
    '
) ?>

Ultimate Tag Warrior

新しい記事(=この記事)を投稿してページを表示したところ、

PHP Catchable fatal error:  Object of class stdClass could not be converted to string in /home/xxxxx/www/wordpress/wp-includes/formatting.php on line 908

というエラーが発生して、本文が表示されませんでした。オーマイガー・・・調べてみると、WordPress › Support » Catchable fatal error: Object of class stdClass could not be converted to string で Ultimate Tag Warrior が原因だということがわかりました。WordPress 2.3 から、本体にタグ機能が追加されているとのことなので、これを機に Ultimate Tag Warrior をやめて、標準のタグ機能に移行することにしました。

素晴らしいことに、WordPress 自身に Ultimate Tag Warrior のタグ情報をインポートする機能があったので、これを使ってデータを移行。あとは、テンプレートを grep して Ultimate Tag Warrior を使っている箇所を変更して完了。「関連するエントリ」の表示だけ、標準のタグ機能では対応できなかったので、Simple Tags というプラグインを導入しました。

[参考サイト]

» タグ付け機能 – WordPress Codex 日本語版

新しい WordPress の感想

上記のような対応に時間をとられてしまいましたが、新しい WordPress は概ね好印象です。管理画面の UI がすっきりしたし、特にプラグインのバージョンアップや追加が管理画面から行えるようになったのはすごく便利。といっても、これらの変更は 2.3 からみたいですが・・・最近、仕事で Movable Type の最新バージョンも触ってみたのですが、こちらも数年前から大きく変わっており、WordPress も Movable Type もまだまだ進化しているなぁという印象を受けました。


About this entry