あけましておめでとうございます!

謹賀新年

あけましておめでとうございます。
今年もよろしくお願いいたします。

wordpressもいよいよ3.0でMU統合などの情報もあります。今年もまた検証に明け暮れることになるのでしょうか。しかし、日々成長してゆくwordpressの世界がとてもすばらしく、目が離せませんね!

Nonce! Pleaseが超強力!

Ktai Styleでも有名なYuriko.NetさんのNonce! Pleaseを導入してみました。
結果ですが、Akismetで受けていたスパムがここ数日0です!
まさかこんなに強力だったとは思いませんでした。
しかもプラグインディレクトリーに登録されているのでwordpress上から直接ダウンロード・インストール可能で、有効にするだけの簡単設定;-)

まあ、スパムの世界も日々成長しているのでいたちごっこなのでしょうが、とてもすばらしいプラグインをありがとうございます!

Ktai Styleでカテゴリ一覧ページを構築

Ktai Styleでサイトを構成していて、要望があったので構築した際のメモ書き。

携帯サイトを構成した場合のfooterメニューにアーカイブやカテゴリーというリンクがある(defaultテーマの場合、今回の場合はdefaultテーマを利用した改造テーマ)。
このカテゴリーをクリックし、カテゴリー一覧から個別ページへ飛んだ際に、ページ下部に表示される次の記事へのリンクと前の記事へのリンクは全体の記事の前後リンクになる。
これを、カテゴリー一覧から飛んだときにはカテゴリーに絞り込んでの前後リンクにしてほしいと要望があった。

まあ前後リンクをカテゴリーに絞るのは難しくはない。が、single.phpで前後リンクをカテゴリーに絞ってしまうと、TOPページなどからカテゴリに関係なく飛んできた場合も、カテゴリ毎のリンクになってしまう。
まあ、だからカテゴリ一覧から飛んできた場合、カテゴリに絞ってシングルページを見ている場合にはカテゴリに絞ったリンクを表示するように分岐を設けただけなんだけど。

まず、最初の改造。(全てテーマのみの改造、コアは修正していない)
category.phpを作成して一覧リンクを生成する際に「?category=1」を挿入する。

<dl>
<?php for ($count = $ks_settings['ol_count']; have_posts() ; $count++) :
	the_post(); ?>
	<dt><?php 
	$link = ks_ordered_link($count, $ks_settings['ol_max'], get_permalink(), get_the_title(), '%link', false, false);
	$pattern = "/(.*\.html)(.*)/i";
	echo preg_replace( $pattern, '$1?category=1$2', $link ) . ' '; ?> <img localsrc="46" alt="@ " /><font color="<?php echo ks_option('ks_date_color'); ?>"><?php ks_time(); ?></font></dt>
<?php endfor; ?>
</dl>

ソースのほとんどはdefaultのものなので一部のみ記述。
ks_ordered_linkをecho=falseして取得した後に「?category=1」を追加しているだけ。

次にsingle.phpを改造。
こちらは「?category=1」があることを確認して表示するリンクを分岐で分けているだけ。

if($_GET['category']) {
	$category = htmlspecialchars($_GET['category']);
}

ページの先頭でとりあえずGETしておく。

if( $category ) {
	$previous_post = ks_previous_post_link(array('format' => '<div align="left"><img localsrc="7" alt="« ">*.%link</div>', 'in_same_cat' => true, 'echo' => false));
	$next_post = ks_next_post_link(array('format' => '<div align="right">#.%link<img localsrc="8" alt=" »"></div>', 'in_same_cat' => true, 'echo' => false));
	$pattern = "/(.*\.html)(.*)/i";
	echo preg_replace( $pattern, '$1?category=1$2', $previous_post );
	echo preg_replace( $pattern, '$1?category=1$2', $next_post );
} else {
	ks_previous_post_link('<div align="left"><img localsrc="7" alt="« ">*.%link</div>');
	ks_next_post_link('<div align="right">#.%link<img localsrc="8" alt=" »"></div>');
}

やっていることはほぼ一緒。$categoryを調べてカテゴリーを絞る必要がある場合はks_previous_post_linkでin_same_catをtrue、echoをfalseにしてカテゴリに絞られたリンクを生成し一時取得。前後リンクに同じく「?category=1」を付加することで次のページに飛んでも絞込みを有効にしている。
それ以外の場合は普通に表示した。

Ktai Styleのコードを使用して行っているが、PC版でもコードも使用方法もほぼ一緒なので、同じことは簡単にできそう。

home.phpとindex.php

前回、既存のURLを維持するため、wordpress1つでさまざまな方法をとっていることを紹介したが、この時点ではサイトトップを表示するのにhome.phpを使用していた。

しかし、固定ページ+ブログを構築する際、困ったことが起こった。

表示設定で固定ページを選択し、サイトトップにページで作ったindexを指定、indexにはページテンプレートの記述をいれたhome.phpを指定してある。次にブログページにはURLを維持するため空で作ったblogページを親とするindexを指定。このindexにはブログ用のテンプレートを割り当てるか、自動でindex.phpが割り当てられる。と、考えていた。

しかし、現実にはどちらのページにもhome.phpが適用されてしまった。

サイトトップに自動でhome.phpが割り当てられるのは分かっていた。日本語Codexにもそう書かれてある。しかし、ブログトップにもhome.php->index.phpの順で割り当てられるとは思わなかった。しかも指定したページテンプレートは見事に無視される。
home.phpはループなしでがっつり作りこんでいるのでブログとしては役に立たない。これは困った。

そこで、home.phpを使用するのをやめた。サイトトップのindexには今まで作っていたhome.phpをリネームしてページテンプレートとして割り当てて、ブログトップにはブログ用に作成したページテンプレートを割り当てた。
すると、サイトトップには割り当てたページテンプレートが適用される。が、ブログトップはindex.phpが適用された。どうやら固定ページを指定した場合のブログトップに指定したページにはページテンプレートを適用できないようだ。もちろんhome.phpは削除している。

まあ、これでサイトトップとブログトップが無事表示できたわけなのでOKなのだが。
固定ページをサイトトップとして使いたい場合のhome.phpの使用には十分注意してもらいたい。

WP-DBManagerでバックアップ

2010/1/14追記:どうも動いていなかった模様。ファーストサーバから回答を頂いた。

「現在ご契約中のサーバでのデータベース機能(MySQL) は、ホスト名で
のアクセスを前提に提供させて頂いており、MySQL のパスはご案内いた
しておりません。

また、弊社サーバでは mysqldump をご用意いたしておりません。

  ※個別にmysqldump をご用意させていただく等の対応も
    行なっておりません。」

フォーラムでも混乱を招いてしまったので早めに追記しておきます。

以前にもWP-DBManagerの記事を載せたのですが、今回wordpress2.8.4、WP-DBManager2.50でファーストサーバーのバックアップ方法を覚書。以前の記事では一部エラーが残っていたが、今回はきっちり動きました。

WP-DBManagerはプラグインの新規追加から検索すれば簡単に見つかります。インストールも自動でOK。
有効化すると「バックアップフォルダが安全じゃないよ!」と怒られるので、プラグインフォルダにあるhtaccess.txtを.htaccessにリネームしてWP-DBManagerが自動生成したwp-content配下のbackup-dbフォルダにアップロード、以降怒られません。

日本語化の方法は今回は小粋空間さんを参考にしました。ご覧あれ。

日本語化するとメニューも「データベース」になります。ここからDB オプションを選びましょう。
mysqldumpのパスもmysqlのパスも自動検索は無理です。以下の設定で。
mysqldumpのパス:

/usr/local/mysql

mysqlのパス:

/usr/local/bin

これでDBバックアップをクリックすればエラーはでないはずです。試しに手動バックアップしてFTPで確認してみてください。メールでも送れます、便利ですねぇ。