カテゴリー別アーカイブ: WordPress

任意のページをトップに

WordPress 2.1 の新機能として、任意の(静的)ページをトップページにできるようになった。 が、このページはホームとは見做されない(is_home() は false になる)らしい。例えば footer.php でホームとそれ以外で表示される内容が変わるように作られているテーマもあるのだが、何しろこの機能では front page ではあっても home とは見做されないので、思ったようには変わってくれない。if (is_home()) の部分を
PHP:
  1. if (get_option('show_on_front') == 'page' && get_option('page_on_front') == get_the_ID())
  2. ...

みたいにやるのだろうか。 また逆に、最新記事を別のページに割り付けることもできる。URL 的にはトップではないのだが、そっちでは is_home() も true と判断されるし home.php も適用されてしまう。 とにかく、こういう「仕様」であるらしい。

WordPress 2.1 に移行

このサイトの WordPressを 2.0.7 から 2.1 に移行した。意外に問題は少ない。2週間ほど出遅れている分だけ情報があるのがありがたい。

日本語化

WordPress 2.1用日本語リソースをもらってくる。wp-content/languages/ 以下に置いたほうがいいそうなので、ja_UTF.mo, ja_UTF.po と名前を変えて置く。

メイルの文字化け

コメントが付いたときの通知メイルのタイトル部分が化ける。これに関して、メールタイトル文字化けに2007.1.24追記として情報があった。 wp-includes/pluggable.phpの中の wp_mail()を変更するのだが、pluggable.php冒頭に
/* These functions can be replaced via plugins. They are loaded after plugins are loaded. */
と書かれており、確かに各々の関数は if ( !function_exists ...): endif; で囲まれている。 というわけで、local.phpという自分用のプラグイン・ファイルを wp-content/plugins/ に作って、
PHP:
  1. function wp_mail($to, $subject, $message, $headers = '') {
  2.         return @mb_send_mail($to, $subject, $message);
  3. }

と書くことにした。ここに書いておけば、バージョンアップでwp-includes/ 以下が更新されても修正し忘れずにすむ。

その他の日本語関係

WordPress 2.1 抜粋表示方法 the_excerpt()という情報もあるのだが、特に手を入れなくても文字化けせずにRSSリーダで読めているし、自分のところの記事にトラックバックしてみたがこちらも問題なさそうだった。ここではいまのところ何も手を入れていない。これらは自分以外のところでしか問題がでないので、何とも確認しにくい。

プラグイン

根幹に関わるプラグインはいまのところ問題なさそうだ。細かいものでは、Link Relがちょっとおかしな挙動になってしまったようだ。しかしあまり重要ではないので当面ははずしておこう。そのうちゆっくり見直すことにする。 もうひとつ挙動がおかしいのはTam-attachmentだが、「WordPress 2.1 への対応は現在調査中ですのでしばらくお待ちください」ということなので、しばらく待つことにする。

検索窓

WordPressを使っているサイトを見てまわると、サイドバーに記事の検索を行なうための窓があることがしばしばある。単語を入力する窓はあってもsubmitのボタンがないこともあり、ああそれでもいいんだっけなどと思っていた。 「検索」ボタンがなくフォームだけがポッカリ開いていると、それが何を意味しているのかわからないので、そのフォームに「Search...」などと表示させておきたい。しかも単語を入力するときにはその表示を消したい、と思って調べたのでメモしておく。 [[http://fb.skr.jp/bowz/archives/001990.html|見つけたこの例]]の type="search" は MacのSafari限定なので普通は type="text" にする。ついでに文字の色を変化させる。 文字の色はスタイルシートで、入力される検索語をクラス word で、「(検索)」と表示させるときをクラス promptで、 input.prompt { /* 入力を促す Search... など(フォーカスすると消える)の色 */ color: #999999; } input.word { /* 検索語の色 */ color: #000000; } のように指定する。

Tam Attachmentプラグインと PJW Mime Configプラグイン

画像以外のアップロードファイルを管理するのに便利なものを探してみた。差分ファイル diff をそのまま置くことができなかったのだ。そこで[[http://blog.ftwr.co.uk/wordpress/mime-config/|PJW Mime Configプラグイン]]でアップできるファイルの種類を増やし、[[http://ideasilo.wordpress.com/2006/08/10/tam-attachment/|Tam Attachmentプラグイン]]で管理できるようにした。 ところで Firefoxでは diff ファイルを開こうとすると、ブラウザでそのまま開いてはくれず外部アプリケーションを要求する。[[http://forum.mozilla.gr.jp/?mode=al2&namber=30029&rev=&&KLOG=190|もじら組フォーラム]]に既に議論があった。ちょっと眺めるだけなのだからブラウザ内で表示してくれてもよさそうなものだが。アップする際にファイル名を ***.diff.txt として誤魔化せばいいのか。しかしあまりいい気持ちではないな。

Inline Google Maps Plugin改

[[http://blog.macfeeling.com/archives/2239|MacFeling]]で紹介されているのを見つけて、 [[http://pasero.net/~mako/blog/s/35#inline_google_maps_plugin|先日書いたinline google maps plugin]]---WordPressの個々の記事やページにGoogleマップを置ける---の「ひとつの地図にひとつのマーク」という制約を改造して、複数のマークを置けるようにしてみた。書式の互換性がなくなってしまったので、ファイル名を gmaps-hm.php と変えておいた。 * [[http://pasero.net/~mako/blog/gmaps-hm/|gmaps-hm]] オリジナルのほうは「ひとつの地図にひとつのマーク」をより便利に使えるように [[http://macdiggs.com/index.php/2006/10/13/inline-google-maps-for-wordpress-version-2/|v2.0]]へと進化しているが、こちらは v1.1改。 [gmap name='20061015' lat='38.27501322074987' lng='140.83431959152222' zoom='12'] [gmark lat='38.27501322074987' lng='140.83431959152222' desc='ひとつの場所' label='P'] [gmark lat='38.281717' lng='140.869314' desc='もうひとつの場所' label='Q'] [/gmap] === WP-SimpleGmaps ==== 似たようなプラグイン [[http://aoina.com/archives/45|WP-SimpleGmaps]]というのを見つけた。でもこれもひとつの地図にひとつのマークのようだ。

wp-slimstat

アクセス解析プラグインを wp-shotstatから[[http://www.duechiacchiere.it/wp-slimstat/|wp-slimstat]]に変えてみる。そこから 0.9.2を。 日本語化ファイルは [[http://bd.dotted.jp/archives/90/|BirDesign']]さんのところから 0.9.1 用のをそのままいただいた。 ところが WordPress database error: [You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ‘’ at line 3] SELECT `tp`.`post_title` FROM `wp_posts` AS `tp` WHERE (1 = 1) AND `tp`.`ID` = の表示が大量に出る。検索して[[http://www.myblackroom.com/index.php/30/statistics-for-your-blog/|対処法]]を発見した (中ほどの #1 Lots of database errors の項)。permalinkを使っていると出るらしい。この対処法で解決した。 ついでに[[http://equine.ddo.jp:8080/~takeshi/diary/?p=1044|wp-slimstatの高速化]]という情報も発見したが、0.9.2では既に対策済のようだ。

Google マップを使う

WordPress でGoogle マップを使ってみる。

Plug 'n' Play Google Map

新しい版はPlug 'n' Play Google Map。旧版の日本語の解説がある

マップ型の目次といった使い方になるのか。このサイトのマップ

記事だけでなく、(静的)ページのマークも地図に載るように改造した1)

ついでに、ページのマークは「アルファベット付」マークになるようにした。Tutorialのソースを参考に切り貼り。印刷時にもアルファベット付マークになるように printImagemozPrintImage も設定するようにした。印刷用のマーク(例: "A")は


http://www.google.com/mapfiles/markerAie.gif


http://www.google.com/mapfiles/markerAff.gif

とか言う名前であった。

Inline Google Maps Plugin

“目次”マップではなく、個々の記事にマップを貼りたい。wp-dokuwikiプラグインに付属しているはずなのだが、うまく動かない。

Inline Google Maps Plugin というのがあった。これは簡単そう。

[gmap name='20061007' lat='38.27501322074987' lng='140.83431959152222' zoom='12' desc='プラグインのテスト']
[gmark lat='38.27501322074987' lng='140.83431959152222' desc='プラグインのテスト']
[/gmap]

ひとつのマップにひとつのマークしか置くことができない。

コメントにあるように、当分はこのままらしい。


  1. (静的)ページにも緯度経度情報を入力できるようにGeo プラグインもちょっと改造した。

Organizerプラグイン

「半月記」と銘打ちながら2ヶ月あまりも放置している間に、[[http://pasero.net/~mako/blog/s/27|Organizerプラグイン]]にトラックバックがあり、多くの人に見られている模様。こりゃちゃんと更新しなきゃいかんなと思いつつも、WordPressは安定していてほとんど書くことないし。何か長続きするネタを考えないと。 さて紹介していただいたはいいものの、実はOrganizerプラグイン、まったく使えていない。ここと、別に運用している某所の2個所にいれてみたが、なぜか挙動が多少違う(ここではサブディレクトリの作成と削除だけができるが、サブディレクトリへの移動すらできないし画像編集などは機能しない。某所ではサブディレクトリの移動はできるがやはり画像編集は機能しない)が、いずれにしろ使い物にならないのだ。 こことその某所の共通点は、[[http://www.sakura.ne.jp/rs/index.shtml|さくらインターネットのレンタルサーバ]]ということである(2つのサーバは別々だが)。 さくらでOrganizerちゃんと動いてるよ、という方いますか?

mod_rewrite

しばらく間が空いてしまった。WordPress自体があまり手がかからないようで、ひととおり設定してしまえば特に問題もなく、書くこともない。

今回の件は WordPress カテゴリに含めるのも何だという気もするが、その関連ということで。

WordPress導入時、.htaccessに自動的に

CODE:
  1. # BEGIN WordPress
  2. <ifmodule mod_rewrite.c>
  3. RewriteEngine On
  4. RewriteBase /
  5. RewriteCond %{REQUEST_FILENAME} !-f
  6. RewriteCond %{REQUEST_FILENAME} !-d
  7. RewriteRule . /index.php [L]
  8. </ifmodule>
  9. # END WordPress

と書き込まれる。実在するファイル名・ディレクトリ名でない場合、/index.php が呼ばれるようになる。

さて、WordPress 導入以前に同じサイトで某日記システムを使っていたのだが、その URL は


http://www.example.com/?date=20050325

のようになるものであった。現在この URL で指示されるものはないのだが、上記により、404 エラーにはならず、トップページが表示される。

検索エンジンに旧い形式の URL が残っていて、しかもいま WordPress で作られたトップページがその旧い形式の URL の内容として着々と更新され続ける。WordPress で書いた最新の記事の内容が、http://www.example.com/?date=20050325 のものとして検索されてしまうのだ。

放っておいてもその連鎖は断ち切れないので、ロボット対策を参考に、.htaccess に次のように書き加えてみた1)

CODE:
  1. <ifmodule mod_rewrite.c>
  2. RewriteCond %{HTTP_USER_AGENT} archiver [NC]
  3. RewriteCond %{QUERY_STRING} .*date=200.*
  4. RewriteRule ^.*$ - [G,L]
  5. RewriteCond %{HTTP_USER_AGENT} crawler [NC]
  6. RewriteCond %{QUERY_STRING} .*date=200.*
  7. RewriteRule ^.*$ - [G,L]
  8. RewriteCond %{HTTP_USER_AGENT} robot [NC]
  9. RewriteCond %{QUERY_STRING} .*date=200.*
  10. RewriteRule ^.*$ - [G,L]
  11. RewriteCond %{HTTP_USER_AGENT} slurp [NC]
  12. RewriteCond %{QUERY_STRING} .*date=200.*
  13. RewriteRule ^.*$ - [G,L]
  14. RewriteCond %{HTTP_USER_AGENT} spider [NC]
  15. RewriteCond %{QUERY_STRING} .*date=200.*
  16. RewriteRule ^.*$ - [G,L]
  17. RewriteCond %{HTTP_USER_AGENT} googlebot [NC]
  18. RewriteCond %{QUERY_STRING} .*date=200.*
  19. RewriteRule ^.*$ - [G,L]
  20. RewriteCond %{HTTP_USER_AGENT} msnbot [NC]
  21. RewriteCond %{QUERY_STRING} .*date=200.*
  22. RewriteRule ^.*$ - [G,L]
  23. RewriteCond %{HTTP_USER_AGENT} findlinks [NC]
  24. RewriteCond %{QUERY_STRING} .*date=200.*
  25. RewriteRule ^.*$ - [G,L]
  26. </ifmodule>

旧URLへのアクセスは、(1)せっかく検索して見つけて来てくれる人には今のトップページをみていただく (2)検索ロボットなら 410 エラーを返す、とした。こうしておけばそのうち検索エンジンから消えるだろうし、昔の記事に直接リンクしている人はほぼいないだろうから、旧URLへのアクセスは絶滅するだろうと考えた。

----

という対策をとったのが実は1ヶ月前。だいたい思ったとおりに絶滅に向かっていったのだが、Yahoo の Slurp というのは行儀が悪いのか2)、なかなか根絶できない。

そして今日、検索で旧 URL をたどってくる人がなぜか増えている。確認すると、.htaccess の当該部分がすっかり消えている。ファイルの時刻を見ると、絶対に自分で何かをした時刻ではない。WordPress がこれを書き換えることはないと思うし、そうするとこれを置いているレンタルサーバの問題なのだろうか。なんだか気持ちが悪い。


  1. (A or B or C) and D は mod_rewrite の文法でどう書くのだろう。はっきりしないので冗長に書いた。
  2. ログを見るとアクセス頻度もやたらと多い

Organizerプラグイン

画像ファイルを管理するプラグインを探していて、見つけた。 [[http://imthi.com/organizer/|Organizerプラグイン]]は * wp-content/uploadsディレクトリ(または設定しているアップロード用ディレクトリ)とその中のサブディレクトリのファイルを一覧 * アップロード用ディレクトリ内のファイルのコピー・ファイル名変更・削除 * サブディレクトリの作成・名前変更・削除 * ファイルのアップロード * 画像の拡大縮小 * 複数ユーザとパーミッションに対応 * アップロード用ディレクトリでファイル名を変更したら、記事内での参照個所も自動的に変更 * roles に対応。[[http://redalt.com/wiki/Role+Manager|Role Manager]]で管理 というもの。特に最後の3点が嬉しい。そのほかはこの前に導入した[[http://soderlind.no/archives/2006/01/03/imagemanager-20/|ImageManagerプラグイン]]([[http://bd.dotted.jp/archives/85/|日本語版]])でカバーされていたので。 [[http://pasero.net/~mako/blog/|ここ]]と、別の管理している某所にいれてみた。その某所ではうまく機能するのに、ここではディレクトリの中のファイルを見つけてくれない('No files in this directory')。ほかのプラグインと干渉しているのか、はたまた別の問題なのか。 その某所とここの大きな違いは、[[http://support.sakura.ad.jp/support/manual/rs/setdom_h.shtml|ドメインのエイリアス設定]]にしていることか。これが何らか影響しているのか。 というわけで、インストールとだいたいの動作は確認できたが、こまかくは見ていない。