Archive for category WordPress

Wordpress 2.9.2のプラグインの時間

Wordpressのアップグレードはとても簡単だから、気軽に出来ちゃう。そしてこれまでの問題のことなどすっかり忘れたころに2.9.2に上げて、またしてもプラグインの時間がUTCに戻ってしまった。

もうこれはこういう仕様なのね。永遠に応急処置を続けていくこともできないので、これはプラグイン側の対応をしないといけないだろう。この問題に対応できるようなWordpressプラグインを作ろうかとも思ったんだけど、新たなプラグインを作るよりも、今のプラグインを直すほうが早いし楽だし。。。

プラグインはphpのtime()で時間をとってきて、アクセス情報とともにテキストファイルに書き出すだけ。Wordpressではdate_default_timezone_set(‘UTC’) が宣言されているため、time()はUTCタイムスタンプを返すようになる。他所で実行するときはJSTタイムスタンプが返される。タイムゾーンを判断して切り替えるよりは、どこで使われようとUTCでタイムスタンプを取得して、JSTに変換するのが簡単で手堅い方法だろう。

ちなみに、プラグイン自体をWebサービスにしてしまえばコードの実行は呼び出し元に寄らないので最もスマートな解なんだけど、大したプラグインでもないのに新たに作り直す必要があって、ちょっとやる気が起きない。

改修は簡単で、time()の前にdate_default_timezone_set(‘UTC’) を宣言して、すぐさまdate_default_timezone_set(‘Asia/Tokyo’) で日本時間に戻す。time()で取得してきたタイムスタンプには9時間足せばいい。date_default_timezone_set('UTC');
$timestamp = time() + 9 * 3600;
date_default_timezone_set('Asia/Tokyo');

これで解決したんだけど、date_default_timezoneを弄るのは後々問題を起こしそうだし、場当たり的なコーディングで美しくない。

よりスマートなUTCタイムスタンプの使い方はそふぃのPHP入門にあるように、$hour = gmdate("H");
$minute = gmdate("i");
$second = gmdate("s");
$month = gmdate("n");
$day = gmdate("j");
$year = gmdate("Y");

$timestamp = mktime($hour, $minute, $second, $month, $day, $year) + 9 * 3600;
とすべきかな。

* 2010/3/10 追記:
やっぱり他のところに弊害が出て、gmdateを使った方式に変更。これでほぼ不具合は解消できた。本日、昨日のカウントが間違ってるだけ。。。

Wordpress 2.9.1のプラグインの時間

自作プラグインの時間がUTCに設定されてしまう問題が2.9.1で解決されるだろうとアップデートしてみたら。。。

だめ。。。
やっぱりUTCに設定されてしまう。

Wordpress 2.9のプラグインの時間で施した対処は2.9.1でも有効だったからいいものの。。。

これは本気でプラグイン側で何とか対処しないと。。。

Wordpress 2.9のプラグインの時間

ちょっと分かりづらい現象(バグ)でその対処も良く分かっていないけど、なんとなくうまくいったからなんとなく公開してみる(なんだかなぁ)。

簡単なアクセス記録を取るための自作プラグインを使っているんだけど、Wordpress 2.9にアップグレードした途端に時間が-9時間ズレるようになった。これはどこかでtimezoneがUTCに設定されているんだなと思って調べてみても分からない。ブログのtimezoneはちゃんとUTC+9になっているし、新規投稿の時間もちゃんとJSTになっている。プラグインは他のページからも呼ばれているんだけど、そっちからはちゃんと今までどおり正常に動いているので、Wordpress 2.9の仕業であることが濃厚。

Wordpress 2.9.1のバグフィックスをちらちらと眺めていたら、timezoneに関わるものを発見! 対処法も上がっていたので適用してみたら直った。新規投稿も含め、他の時刻に関連するものにも(今のところ)影響がなさそう。

その対処法というのは、wp-settings.phpの21, 22行目if ( function_exists('date_default_timezone_set') )
date_default_timezone_set('UTC');
をコメントアウトするだけ。

まあ、きっと2.9.1にアップグレードされれば根本的に解決されているだろうから、メモだけここに残してこのままにしておこう。

デザイン変更

このサイトがWordpressでブログ化されて初めてのリニューアル! といってもテーマを変更しただけ (^_^;;)

前のテーマは1.5時代のふるーいもので、今でも動いているのが不思議なくらいなものだった。ウィジェット、jQuery、thickboxなんかに対応していないので、思いっ切って新しいテーマに切り替えてみた。このテーマはArcliteといって、シンプルでいてかつ高機能。デザインの詳細をアドミン画面でいじれるのがいいかな。

・テーマオリジナルのカテゴリ表示のon/off
・jQueryを使うかどうか
・タイトルバックグラウンド
・ウィジェットのタイトルバックグラウンド
・ユーザ指定のCSSの保存
・トップメニューのpage/category選択

これ以上にも設定項目はあるけど、重宝しているのは以上。特に独自CSSを設定できるのはありがたくって、早速codeタグの設定は旧テーマからそのまま引き継いだ(なのでちょっと浮いてます ^_^;;;)。

画像がAJAXで浮き上がってくるのがやはりいいかな。あと、新しいテーマのほうが軽い気がする。そういえば前のテーマはindex.phpにいろいろとこてこてと書かれていたっけ。

まだちょこちょこと修正していきます。

Wordpress Upgrade 2.8.4 to 2.8.5

今回も自動アップデート。3つの環境で無事2.8.4から2.8.5にあがった。

Wordpress 2.8から2.8.2へアップグレード

例によって自動アップグレードでWordpress 2.8から2.8.2へアップグレードした。2.8.2-jaか2.8.2へアップグレードできるみたいだけど、せっかくなのでja版にアップグレードしてみた。複数のブログに行ったけど特に問題はなし。ja版だと何がいいんだろう?

ちなみに、「WordPress 2.8.2 が利用可能です ! アップデートしてください。」ってメッセージがダッシュボードに表示されるんだけど、アップグレード? アップデート? どうもアップグレードが正しそうだけど。

Wordpressアップデート

黎明期からWordpressは非常に満足して使っている。調子に乗っていろいろとWordpressをインストールしている(通常版 x 3、MU版 x 1)。2.7になって非常に使い勝手があがってさらに満足度↑なんだけど、一つ難点はアップデートのペースが速いこと。半年に1回メジャーアップされるとついていくのが大変。

最新は通常版が2.8、MU版が2.7.1。2.7から本体もプラグインも自動アップデート機能がついたので、プラグインは非常に便利にポチポチと気ままにアップデートしていたけど、本体のほうは怖くてできなかった。それでも少しググってみたものの、自動アップデートについてはあまり失敗例がない。MU版は2.8で必要なファイルが勝手に削除される不具合があったみたいだけど、2.8はそのせいか引っ込められていた。

そこで、今日は徹底的にアップデートしてみることにした。通常版2.7 x 2と通常版2.5.1 x 1とMU版2.7を一気に最新版にアップデート!

通常版2.7は非常に簡単で、Wordpressの入っているディレクトリすべてを念のためにバックアップして、ついでにDBもphpMyAdminでバックアップしておく。DBは毎日バックアップとってあるからさらに念のため。そしてadminページにて「自動アップグレード」のリンクをクリックするだけ。おしまい。あ~、なんて簡単なんだ。

MU版2.7も同様にとっても簡単。バックアップを取って「自動アップグレード」のリンクをクリックするだけ。まだ完全に互換性テストを行っていないけど、自作プラグインも含めて一応ちゃんと動いているっぽい。

ちょっと面倒だったのが通常版2.5.1 → 2.8だけど(ちなみにこのサイト)、こちらは日本語版公式ページのアップデート手順に則って作業をするだけ。こちらは若干面倒で、既存ディレクトリから不要なファイルを削除するんだけど、必要/不要の判断がつかない。まあ、それでも手順どおりに作業したけど今のところ問題なし。動かないと分かっているプラグイン(Amazonプラグイン)もあるので、これらは代替のもの(Amazon Reloaded)を後でインストールする必要がある。無事Amazon以外は古いプラグインも有効化することができた。

1.x時代のふる~いテーマをだましだまし使っているけど、今回のアップデートでも無事乗り越えることができた。ここら辺はWordpressの作りの良さに感謝。とはいえ、さすがに古臭いのと、新しい機能が使えないことから、そろそろテーマをフルモデルチェンジしないといけないかな。今のテーマを2.8対応させるか、まったく新規のテーマに乗り換えるか。う~む。

Wordpressの画像の回り込みを解除する

最近(2.7系)のWordpressはビジュアルとHTMLエディタがあってどちらも甲乙つけがたいところだけど、画像の回り込みに関してはいろいろと問題がある。左右の回り込みを指定してエディタ上ではテキストが画像に回り込んでいても、レイアウトに反映されなかったり、ここに書かれている現象が発生したり。これはレイアウトがCSSベースになっていて、そのCSSがテーマに依存しているところにも若干問題がある。要するに、デザインはいいと思っているテーマでも細かいところでちゃんと動かない場合がある、ということ。

せっかく気に入ったデザインでもちゃんとレイアウトできないと使えない。その一つが記事に挿入した画像のまわりにテキストを回り込ませる処理。古いテーマではalignright, alignleft, alignclearが定義されていない。そこで、テーマフォルダ(/wp-content/themes/テーマフォルダ)のstyle.cssに以下の設定がなければ追加する。.alignright {
 float: right;
 }

.alignleft {
 float: left;
 }

.alignclear {
 clear: both;
 }
お好みで以下の設定も追加。img.centered {
 display: block;
 margin-left: auto;
 margin-right: auto;
 }

img.alignright {
 padding: 4px;
 margin: 0 0 2px 7px;
 display: inline;
 }

img.alignleft {
 padding: 4px;
 margin: 0 7px 2px 0;
 display: inline;
 }
ちなみに、これでもレイアウトの崩れを直すことはできなかったので、(なぜか)サムネイルを挿入することで解決。IEでは。

そして、ここからはブラウザ側の問題が絡んできて、IE(試してないけどたぶんFirefoxも)では上記の設定だけでうまくいくんだけど、Chromeでは(たぶんSafariでも)引き続き崩れたまま。どうもIEではalignrightに設定されたテキストに<b>や<p>が入ると回り込みが解除されるようだけど、Chromeでは解除されない。いろいろググるとどうもChromeのほうが正しい処理のように思える。Chromeに対応するためには明示的に回り込みを解除するスタイルを設定すればよい。

でも、普通にstyle=。。。 と設定してもWordpressが非常におせっかいながら削除してくれる。なので、回り込みを解除したい場所に<br class="alignclear" />をHTMLモードにて追加する。この場合はタグとともにWordpressによるおせっかい削除から免れることができる。この設定はIEにはなんら影響を与えないので、今のところベストな解決法かな。

WPMU 2.7 日本語化

何か変だと思ったら昨日アップグレードしたWordpress MU 2.7の日本語化を忘れてた。ところどころ英語になってて、英語に不自由はしないけど日本語と混ざっててとても不自然。

wpmu-jaから日本語化ファイルをダウンロードし、解凍して得られたja.moを~/wp-content/languagesに置く。もとからあるファイルは念のためにリネームしてとっておいたほうがいいかも。

Wordpress MU 2.6から2.7へアップグレード

なにかと手こずらせてくれたWordpress MUだけど、2.7があまりにも魅力的なのでアップグレードしてみた。WPMU 2.6はいろいろと手を入れてきたので簡単にアップグレードできるかどうか不安だったけど、無事アップグレードできた。

一応WPMUサイトのアップグレードページを元に作業したんだけど、何かちょっと手順がおかしい。お陰様で試行錯誤したけど、最終的には以下のような手順になるんじゃないかな。

  1. WPMUのバックアップ
    これはDBのバックアップと、~/WPMU_backup のようなディレクトリを作って、その中に既存WPMUファイルを全てコピーする。
  2. 新しいWPMUファイルのダウンロード
    WPMU 2.7の圧縮ファイルをダウンロードしてきて、~/WPMU_new のようなディレクトリを作ってそこに展開する。
  3. 既存WPMUファイルのwp-adminとwp-includesディレクトリは残して、それ以外を全て削除する
  4. 新しいWPMUファイルを全て既存WPMUディレクトリにコピーする
    wp-adminとwp-includesディレクトリとそれ以下のファイルのほとんどは上書きになる。
  5. バックアップWPMUから.htaccessとwp-config.phpファイルをWPMUディレクトリにコピーする
  6. wp-config.phpファイルを以下のようにアップデートする
    • $base = ‘/’; の次の行に以下の設定を追加する。
      define('DOMAIN_CURRENT_SITE', 'yourdomain.tld'); // don't include "http://www." at the beginningyourdomain.tldにドメイン名を設定する。コメントにもあるように、”http://www.”などは設定しないように。
      define('PATH_CURRENT_SITE', '/'); // this should be the path relative to your domain. For instance, if your WPMU installation is located at 'http://www.example.com/blogs/', then the value of this constant should be set to '/blogs/' instead of just '/'トップディレクトリ以外のインストールの場合はディレクトリパスを設定する。
      define('BLOGID_CURRENT_SITE', '1');
    • 続いてWPMUのセキュリティ強化設定を追加する。
      define('ADMIN_COOKIE_PATH', '/');
      define('COOKIE_DOMAIN', '');
      define('COOKIEPATH', '');
      define('SITECOOKIEPATH', '');
    • define(‘SECURE_AUTH_SALT’… の次の行に以下の設定を追加する。
      define('NONCE_KEY', ''); // replace '' with value from http://api.wordpress.org/secret-key/1.1/
      define('AUTH_SALT', ''); // replace '' with value from http://api.wordpress.org/secret-key/1.1/
      これらのキーは実際にhttp://api.wordpress.org/secret-key/1.1/にアクセスすれば入手できるので、何も考えずに表示されたキーをコピペする。AUTH_SALTはないのでAUTH_KEYで代用する。
  7. サイト全体のブログにログインして、アップデート処理を実行する
    ログインしたら、サイト管理アップデートのリンクがあるのでたどって処理を進める。ちょっとだけ時間がかかる。

こんなところでしょうか。プラグインは停止させずにアップデートしちゃったけど、何事もなかったのごとく動いてる (^_^;;

jQueryで表示させている部分でレイアウトに少し乱れがある程度かな。これは以前CSSに手を入れたのが上書きされちゃったか、jQueryのバージョンが上がったからなのか今のところ不明。まあ、そんなに大きな障害ではないので追々調べましょう。こういうことを考えると、スタイルを変更するときは別ファイルを作ったほうがいいね。

やっぱり2.7はいいね。