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

Mar 13 2010

Ecipse PDT 3.5 + xampp + xdebug を使った PHP デバッグ

たまに WordPress の不具合などでご質問をうけるも、初見のプラグインとかもすぐ直しちゃって「なんでそんなにすぐ分かるの?」と聞かれることありますが、タネを明かせばプログラムのおかしそうなところにデバッグブレイクひっかけて動作を見ているからです。 え?この軟弱もの? いいのいいの(笑)

プログラミングの難しい部分の一つは動作が一瞬で終わることにあると思います。 普通は机上というか頭の中で考えて、ここの if はこーだから、ここに入って、値はこーなるはず、、なんてやるわけですが、面倒なときはコンピュータに評価させた様子を1行ずつみていく。 これがデバッガの役目です。

てなわけで、現在の xampp 最新版 1.7.3 と Eclipse PDT を使ったデバッガの設定方法の紹介です。 前書いたのは設定方法が古くなってしまっていますが、とりあえず操作方法などもあるので併せてどうぞ。 :)

hiromasa.docs o) – Eclipse PDT + XAMPP で WordPress の開発環境をつくる (3)

Eclipse PDT と XAMPP に入っている xdebug モジュールを利用すると、実行中のプログラムを任意の位置で停止させ、ソースコードとあわせて1行ずつ動作させるステップ実行や、変数の値の監視や書き換えが行えるウォッチなどのいわゆるデバッグ機能を使うことができるようになります。

まず、xampp の PHP に xdebug というモジュールを読ませる必要があります。 現在の xampp-1.7.3 のベーシックパッケージ(lite版には入ってないようです)には xdebug が同梱されているようです。 キウイ!

昔、Vista で xdebug 動作させると Apache ごとおちるという問題がありました。 今回は Windows 7 と xdebug-2.0.6 でやっていますが大丈夫そうです。

というわけで、php.ini にそれを読ませる設定をしてあげます。

C:\Develop\xampp-win32-1.7.3\php\php.ini

xampp インストールディレクトリの php\php.ini を開きまして、

zend_extension = "C:\Develop\xampp-win32-1.7.3\php\ext\php_xdebug.dll"
xdebug.remote_enable = 1

zend_extention の php_xdebug.dll のコメントを解除。 xdebug.remote_enable = 0 の行があるので、コメントを解除した上で 0 を 1 にします。

これで、準備完了。 Apache を xampp コントロールパネルから再起動して phpinfo をみて xdebug があればOKです。

xdebug01

次は Eclipse PDT の設定。

WordPress などの PHP プロジェクトを開いた上で、実行 –> デバッグの構成。

xdebug05

左ペイン、PHP Web ページを選択し、ペイン上アイコンで新規作成。 で、ここがポイント。

xdebug04

ファイルと書いてあるところに、WP の index.php を指定。 そして、URL の部分をそのファイルをブラウザでみたときの URL と完全一致させます。 デフォルト localhost になっていますが、もしブラウザ http://127.0.0.1/ でアクセスしているときは、PHP Server 欄の構成で localhost を 127.0.0.1 に変更してください。

実ファイルの場所と、ブラウザでの URL の対応を完全に設定するところがキモです。 あっていないとブレイクしてくれません。

でもってできたら、ウインドウ->ビュー->その他 あたりから「デバッグ」というビューを表示しておきます。 デバッグ中であるとここにデバッグスレッドの様子がでますので、開始、停止ができます。

xdebug03

準備ができたら、ソースコードのブレイクしたい位置にブレイクポイントをはります。 詳しくは前述の昔の記事をみてみてください。 で、実行構成からデバッグボタンをおせばブレイクするハズです。

xdebug02

あとは、F5、F6、F8 での行すすめや、ウォッチでの変数閲覧などをたのしんでいただければ。 :)

管理画面などのプログラムなどログインを伴うときは、セッションの関係でうまくブレイクできないときがあります。 このときは以下の記事を参考に URL をいじってデバッグセッションつけてあげてください。

hiromasa.another o)» Blog Archive » wp-jrelated 1.52 リリース (関連取得不具合修正)

動きしか見てないですが、たぶん WP の認証によりデバッグセッションの cookie がきえてしまうのがとまらない原因です。 なので GET でつけてあげて再設定すればこの後は何もしなくてもとまるようになります。 :-)

この辺 Java のリモートデバッガに比べればおもちゃっぽい部分もありますが、それでも十分実用になっていると思います。

というわけで、

power source » WP ローカル環境の構築 – XAMPP+Eclipse PDT

今回インストールした XAMPP Windows版 1.7.3 には Xdebug 2.0.6-dev が入ってるので、このまま使えそう。。?

たぶん、いけそう! :)

Mar 6 2010

WordPress と Eclipse と

ぼくは WordPress をごにょごにょさわるときの環境に Eclipse を使っています。  主に PHP の解析が楽なので使っているのですが、この記事では言語サポート以外の周辺を紹介してみます。

具体的には Subversion とか DB 操作の部分も統合環境のサポートがうけることができます。 まぁまぁ、この手のは慣れの問題も多分に含まれていますのでとりあえずスクリーンショットを楽しんでもらえれば!

Eclipse ベースの Aptana を使われている方も、プラグイン導入で同じように動くかもしれません。(ちなみに依存関係があるので Eclipse に Aptana プラグインをいれたほうが各種 Eclipse プラグインを使うならば楽かもです :)

WordPress + XAMPP + Eclipse の最新導入方法はぼのをさんがまとめてくださっております! :)

power source* » WP: ローカル環境の構築 – XAMPP+Eclipse PDT

WordPressの作業用に、ローカルPCに開発環境を構築。

初めてのことなので、ひろまさ著 『Eclipse PDT + XAMPP で WordPress の開発環境をつくる』を読みながら作業し、本日はテキスト第3章「Eclipse PDT プロジェクトへの既存ファイルの取り込み」までで力尽きる。

ありがとうございます、ありがとうございます。 キウイを進呈します。

まずはソースコード管理システムの Subversion。

WordPress の本家リポジトリにつないで開発状況をみたり、タグから過去バージョンの取得を行うことができます。

Eclipse にはいくつか Subversion プラグインがあるのですが、ぼくは、Subclipse を使っています。(こちらに同梱の Pure Java Subversion ライブラリが Linux でよく動く印象があるためです)

subclipse.tigris.org

Subclipse is an Eclipse Team Provider plug-in providing support for Subversion within the Eclipse IDE. The software is released under the Eclipse Public License (EPL) 1.0 open source license.

インストールは Eclipse 上から update URL をいれるだけのタイプです。 入れると・・・

eclipse03

こんな感じで新規プロジェクトを SVN のリポジトリからつくれるようになりますので、たとえば WordPress のリポジトリを指定してあげるとファイルが取得できます。 取得場所を Apache の htdocs の下にしてあげれば WordPress のインストール完了です。

でもって、プロジェクト右クリックのチーム、ヒストリーあたりから改版履歴がみれるようになります。

eclipse06

で、気になった修正があったら diff してみたり。

eclipse07

なるほど、みたいな。 :)

さらに Eclipse には Mylyn という仕組みが備わっていて、ソースコード管理とタスクを結びつけることができます。 タスク、、というのはそう、WordPress Trac。

Eclipse Mylyn Open Source Project

Mylyn is a task-focused interface for Eclipse that reduces information overload and makes multi-tasking easy. It does this by making tasks a first class part of Eclipse, and integrating rich and offline editing for repositories such as Bugzilla, Trac, and JIRA.

インストールなど詳細ははぶきますが、MyLyn から接続するリポジトリ種別を Trac として、WordPress Trac の URL を設定。 ちなみに他にもいろいろなシステムに接続できます。

eclipse04

WordPress の Trac は API をあけてくれていないので細かいことはできませんが、以下のようになります。

eclipse02

Subversion の修正履歴コメントの # の番号をクリックすると、インターナルで WordPress Trac の該当タスクを開いてくれます。  ソース修正とタスクの結びつけができます。

API あけてないのでいつもの画面がでてくるだけではありますが、ワンクリックで修正経緯がみれるので割と便利です。 :)

次は DB 操作系。

こちらもいくつかプラグインがありますが、ぼくは DB Viewer を使っています。

DBViewer Plugin for Eclipse

DBViewer Plugin for Eclipse(以下DBViewer)は、Eclipse(統合開発環境)を拡張するためプラグインです。Eclipseに「データベース・フロントエンド」機能を提供します。(JDBCドライバーを使用しています)

スクリーンショット小さくて見づらいですが、こんな感じで MySQL に接続できて、中を閲覧したり画面からパッチしたり SQL を発行したりできます。

eclipse05

phpMyAdmin と同じような感じですが、たとえば SQL 作成時のオートコンプリートや SQL 履歴保存、SQL 整形とか便利機能がいろいろあります。

eclipse01

というわけで、こんなことをしていると、、、

家で仕事しているみたいだ~(笑)

そう、、事務所でも家でも Eclipse な時期も多いわけです。。

いろいろな現場で使えるようになっているシステム群ですので、若干複雑な部分もありますが、取り入れて便利そうなところがあったら使ってみてください。 :)

Feb 22 2010

WordPress Thematic フレームワークで hiromasa.another をつくる

最近、ウィジェットは入れるは JavaScript でひゅんひゅん動くはで、WordPress 近代化が図られている(!?)このサイトですが、何を隠そう IE8 でみるとおかしかったのです。 しょうがないので、IE7 エミュレーションしていたのですが、気にくわなかったのでついにテーマを書き直すことに!

テーマといえばおでこさんでおなじみ、Thematic テーマフレームワーク。 目標は、旧 hiromasa.another を style.css と functios.php だけで再現すること、、、、なのでご覧のサイトは既に Thematic 版になっていますが見た目はほとんど変わっていません :)

Thematic とはなんじゃという方や、初めて使う方はおでさんのスライドが良いっす!

テーマフレームワークは、WordPress のお約束的な部分が既にできていて、それに対して追加設定をするような形でテーマを構築していくものです。 ループなど基本的なことはもちろん、コアやプラグインが要求するようなテーマの仕様がきちんと設定されています。

まっさらからフルスクラッチすると忘れがちな部分や大変な部分が既に構築済みなので、PHP コードに関して楽ができます。 また、ぼくのような CSS がよく分からないものにも、リセットや段組などのノウハウ的な部分が盛り込まれていますので便利に感じました。

新しいテーマの構築は、style.css への CSS の追加適応とたくさんの位置に配置できるウィジェットでほぼ望みのサイトはできると思いますが、「ウィジェットが配置できないところに何かを出したい」とか、「表示文言を変えたい」とかいったときに、さらに追加で2つの方法をとることができます。

ひとつは Thematic 本体から修正したいテンプレートファイルをコピーしてきて書き換えること。 もうひとつは、WordPress のフックの仕組みをつかって functions.php でプログラム的に書き換えることです。

どちらの方法をとっても良いと思いますが、ここでは後者を紹介してみます。

style.css と functions.php だけでサイトを構築するのは極端ですが、functions.php 作戦はファイルを修正するより楽にできる部分もありますので、いくつかのコードが参考になれば。

まず基本的なところですが、Thematic の本体にはあちこちで do_action もしくは apply_filter をしているところがります。 これを自分の functions.php に追加したプログラムでフックして動作を書き換えるイメージです。 どんなフックがあるかは、修正対象部分の Thematic 本体のプログラムを追っていけば大抵は見つけることができます。

以下、そんなコードの例です。(自分のテーマ内の functions.php にかきます)

パターン1。 どっかに何かを追加。

hiromasa.another のヘッダには kougabu さんのサムネイルが4つでていますが、このようなことをするには Thematic 本体で do_action をしているところをみつけて、そこに echo で HTML を差し込みます。(ここでは thematic_header というフックを使いました)

/*************************************************************
 * ブログヘッダー部分に kougabu のサムネイルいれる
 *************************************************************/
function head_kougabu() {
    
    echo '<div id="header-kougabu">' . "\n";
    echo '<ul style="display: inline;">' . "\n";
    kougabu_get_images('before=<li style="display: inline;">
        &post_id=662&count=4&max_width=70&max_height=70');
    echo '</ul>' . "\n";
    echo '</div>' . "\n";
    
}
 
add_action('thematic_header', 'head_kougabu', 6);

パターン2。 不要な文字列を削除。

たとえば、記事の下に出ている記事情報メタ文字列を消すコードです。 ここではついでに消したトラックバック URL を別な場所(コメントフォームの下に動かしています)

/*************************************************************
 * トラックバックの URL をコメントフォームの下に移動
 *************************************************************/
function trackback_add_url() {
    echo '<div id="trackbacks">' . "\n";
    echo '<h3>Trackback</h3>' . "\n";
    echo '<p>' . trackback_url() . '</p>' . "\n";
    echo '</div>' . "\n";    
}
 
function trackback_delete_default($content) {
    return '';
}
 
add_action('thematic_belowcomments', 'trackback_add_url');
add_filter('thematic_postfooter', 'trackback_delete_default');

パターン3。 不要なフックの削除。

ある状態の時に、Thematic にデフォルトで登録してあるフックを呼ばなく(delete)する場合です。 たとえば、シングルページの時はナビゲーションを出さない、など。 ポイントはいきなり remove_action するのではなく、template_redirect くらいまで実行を遅延させることです。

自分の functions.php は Thematic の functions.php より先に呼ばれます。 なので、いきなり remove は無理、なのです。 で、 init くらいでもいいかなって感じなのですが、ここだとまだ is_single が確定できてないので、適当に  template_redirect でやってみました。

/*************************************************************
 * 不要なナビゲーション削除
 *************************************************************/
function navigation_delete_post() {
    remove_action('thematic_navigation_above', 'thematic_nav_above', 2);
    if(!is_single()) return;
    remove_action('thematic_navigation_below', 'thematic_nav_below', 2);
}
 
add_action('template_redirect', 'navigation_delete_post');

パターン4。 ある特定ページだけサイドバーを消す。

ここのサイトの Gallery ページでやっている部分です。 Thematic のコードを追っていくと制御できるコードがありました。 thematic_sidebar に false を返すとサイドバーが非表示になるようです。

/*************************************************************
 * ギャラリーページだったらサイドバーをなし
 *************************************************************/
function kougabu_delete_sidebar() {
    $show = true;
    // kougabu page : 182
    if(is_page('182')) {
        $show = false;
    }
    return $show;
}
 
add_filter('thematic_sidebar', 'kougabu_delete_sidebar');

パターン5。 パターン2といっしょですが、ある文字列を修正加工。

フッター文字列にクエリー数をだしています。

/*************************************************************
 * フッターにクエリー数
 *************************************************************/
function fotter_add_query($content) {
    global $wpdb;
    $timer = "({$wpdb->num_queries} queries.";
    $timer .= timer_stop(false) . "seconds.)";
    return $content . ' ' . $timer;
}
add_filter('thematic_footertext', 'fotter_add_query');

などなど。

ここのサイトでは他にも、記事タイトルにカレンダーだしてり、いろいろしていますがパターンはほぼ全ていっしょです。 :)

ひとつだけ違うのが、コメント、トラックバック・ピンバックの表示で、Thematic 標準ではそれぞれ分けた形で表示となるのですが、hiromasa.another はずらっと並べる形にしていたので、それは comment.php をコピーして修正しています。

functions.php でも無理矢理やればできたのですが、おそらくは Thematic 作者さんの意図外でしたのでやめました。 こういうときは素直にいったほうが良さそうです。 :)

てなわけで、

できた~

何を隠そう、ぼくは CSS がなんちゃってしか分からないのでそちらに時間がかかりました。。 まだおかしいところありますが、とりあえず。。

thematic01

制作は Linux 上の Firefox で確認。 一応、IE6 もそれなりにでるようにしています。 ぼくは VMWare 上の XP をわざと IE6 のままにしていてそれを、Unity で Linux のデスクトップにだして確認する方法をとっています。

テーマフレームワークは CSS さくさくできる方なら、WordPress がそれほど分からなくてもテーマつくれちゃいますね。 あとは、PHP をつかって細かい差し込みをしていくイメージでしょうか。

ためしてがってん。 :)

がってん、がってん、がってん。

Feb 14 2010

使っている WordPress プラグイン 2010年版

たまに古い企画を持ち出してくる .another です。 みなさまいかがお過ごしでしょうか(?)。 ということで、過去 2006 年に一度やったらしい「使っている WordPress プラグイン」 再び。 :)

hiromasa.zone :o ) » WordPress プラグイン

hiromasa.zone で使っている WordPress のプラグイン。 画面に見えるものを紹介します。

とりあえずぱっとブラウザから見えるものからいきます!

ちっちゃくてすいません。。 しかも画像あれた、、しょんぼり。。

plugins02

まずはサイドバー。

全てウィジェットです。 吹き出しがないのは WordPress 標準のものを使っています。 テキストウィジェットはなんでもはれるので便利ですね。 :)

WordPress Plugins/JSeries » wp-kotodama (投稿コメント表示ウイジェット)

サイドバーなどに、最近投稿されたコメント者名とその親記事へのリンクを出力するウィジェットです。 MySQL 5 系で動作します。

WordPress Plugins/JSeries » wp-kyodeki (本日人気の記事表示ウィジェット)

サイドバーなどに、本日人気の記事表示の一覧とそのアクセス回数を表示するウィジェットです。

WordPress Plugins/JSeries » Kougaburari (ランダムポスト・スライドショー)

画像付きアーカイブ表示プラグイン「wp-kougabu」のランダムポスト機能を使用して、スライドショーを表示するプラグインです。

記事のタイトルに入れている系。

WordPress Plugins/JSeries » wp-hatena

WordPress の各エントリを「はてなブックマーク」するクイックリンクを自動的に挿入するプラグインです。 また、del.icio.us のクイックリンクも追加できます。

WordPress Plugins/JSeries » wp-otenki

WordPress のエントリにLWWSから取得したお天気情報を付加します。

Chameleon Cyber » MoonPhase

デフォルトでは月相イメージと月齢が投稿日時の後に表示されます。

Date Stamp « stevelam.org

This is a plugin for Wordpress that displays the date/time in a stamp fashion. It has been tested with and configured for K2. It might work with other themes with few modifications.

記事の中。

WordPress Plugins/JSeries » wp-tegaki

投稿エントリ内のタグで指定した文字列を指定の TrueType フォントで出力する WordPress 用プラグインです。

記事の外。

WordPress Plugins/JSeries » wp-kougabu (画像付きアーカイブ)

WordPress の投稿やページにアップロードされた画像ファイルを抽出し、サムネイルでページに一覧表示するショートコードを提供します。過去に投稿した画像をサイトに一覧表示しそこから本文にリンクされる、画像付きアーカイブのようなプラグインです。

WordPress Plugins/JSeries » WordPress Related Post for Japanese (関連投稿表示プラグイン)

Yahoo! Japan が提供する日本語形態素解析APIを利用して、WordPress の投稿をアナライズし、自動的に投稿の下部に「関連する記事」へのリンクを付与するプラグインです。

コメント。

WordPress Plugins/JSeries » wp-ohayo

コメントや投稿の"時間"をお日様などのイメージに置き換えます。

最近では、にいさんの Kougaburari でランダムポストが出せるようになったので、ご機嫌です。 :)

サイト上あちこちで kougabu くんが活躍していますが、現行バージョンだと、キーが画像 + サイズで実装されているのでフレームが一種類しかもてません。 次はこの変を直してみようかな・・・。

結構変えないといけないので、ひろまさプラグイン初の 2.0 系が出現するかもしれません。 お気づきの方も多いと思うのですが、tegaki と kougabu は基本の動きが同じなので恐らくそのときには統合されます。 :D

WordPress も安定してきて、最近こういったブログいじり的なネタが少なくなってきたよねと思いだし書いてみました。 昔は

バグるだけでおいしいネタ

だったもんですね(笑)

Feb 7 2010

wp-kougabu 1.12 リリースとぶらりぶらり

ぼくの密かなたのしみは、MMRT daily life の上部に配置されたランダムポストをクリックして次々と出てくる記事をうししと読むことだった。

いつかぼくもランダムポストを、そう思って早3年。 なにやら twitter を覗くと、 kougabu を利用したランダムポストがにいさんによってつくられている!?、こ、これは…!!

…ということで、にいさんこと、をかもとさんが現在作成中の豪華エフェクト付きランダムポスト・スライドショープラグインに向けて、wp-kougabu をバージョンアップしました。 kougabu の API がいまいちだったのでプラグインに向けて拡張しています。

WordPress Plugins-JSeries » wp-kougabu (画像付きアーカイブ)

wp-kougabu-1.12.zip

kougabu_get_images 関数に新規のオプション array_ext を追加しました。画像属性が分割された形式で配列を取得できプログラムから扱いやすくなりました。

それ以外に変更はありませんので、ダウンロードいまお使いの kougabu に上書きしていただいて、にいさんのリリースを楽しみにしていただければ。 新規の方も使い方かわりません。

うちのサイドバー下でうごいているのが、そうです。 :)

burari01 

うーん、たのしすですね。 ウィジェット、ショートコード、関数から kougabu サムネイルを利用したランダムポスト・スライドショーを呼び出すことができます。

近くリリースされると思いますので、にいさんのブログを要チェックや!  :)

(23:40 追記)

JSeries にリリースされました!

WordPress Plugins-JSeries » Kougaburari ( ランダムポスト・スライドショー )

画像付きアーカイブ表示プラグイン「wp-kougabu」のランダムポスト機能を使用して、スライドショーを表示するプラグインです。

にいさん、ありがとうございます!

Kougaburari  dogmap.jp

てなわけで、前から気になっていた jQuery プラグイン JQuery Cycle Plugin を使用して、wp-kougabu が吐き出したランダムポストイメージをスライドショー表示するプラグインを作りました。

むっふっふ。 :)

Dec 31 2009

大晦日と WordPress 2.9.1 RC1

いろいろありました 2009年もあっというまに、日本は大晦日です :)

師走の中、WordPress 2.9.1 の準備も着々と進み、WordPress 2.9.1 RC1 が 30日にでております。 2.9.1 で修正される不具合で、いくつかプラグインの動作が直るものがありますので、紹介したいと思います。

まずはブログでもアナウンスがありました、wp-cron が動かない問題です。

WordPress | 日本語 » WordPress 2.9.1-1

残念なことに、先日の 2.9 リリースと一部のバージョンの PHP 組み合わせで cURL 拡張に関するバグが起こることが判明しました。該当するバージョンの cURL では、予約投稿およびピンバックが正しく処理されません。

wp-cron は WordPress のスケジュールイベント系を司るモジュールのことですが、これのタイムアウト待ち時間の設定が一部のサーバで速くなりすぎるため、スケジュール実行が発動しないという問題です。

予約投稿やピンバック、またスケジュールを使っているプラグインも影響を受けますが、WordPress Related Post for WordPress もそのひとつで、該当サーバでは関連が取得できなくなっていると思います。(このプラグインは辞書作成で投稿時間や過去記事の閲覧が遅くならないように wp-cron によるバックグラウンド処理を行っています)

とりあえず辞書作成について、2.9.1 までは http://www.example.com/wp-cron.php に手動でブラウザからアクセスすることで対処できます。(www.example.com はお使いのサーバスペースにあわせてください)

次はタイムゾーン問題。

以前書きましたとおり、2.9 より PHP のタイムゾーンの設定を WordPress が UTC に変更する動作が加わりました。

その後、もう少しプログラムを追っていくと、(wp_)options の gmt_offset という値を取得しようとするとフックにより、UTC に設定したタイムゾーンを、timezone_string 値(Asia/Tokyo とか)で再設定する動作があることが分かりました。

影響をうけたのが、 current_time() という WordPress コアの関数で、timezone_string が存在するとタイムゾーンの再設定により、日本であれば +9 +9 の時間 (2回ずらしてしまう)を返してしまうようです。 wp-kyodeki プラグインが正しく日またがりで値がクリアされないケースがこの件です。

パラ見ですが、xmlrpc 経由の投稿日付、ファイルアップロード時に作成される年月ディレクトリ、テンプレートタグのカレンダーのめくりの処理などの時間が +9 ずれる可能性がありそうです。

で、最初現象が分からなかったのがなる人とならない人がいることで、どうも昔から WordPress を使っている人で、最近、管理画面の general setting の更新をしてない方は timezone_string 値が入っていなくて、gmt_offset だけが入っている状態。 この場合は current_time() はうまく動作します。 ぼくとかおでさんとか(笑)

General Setting で都市名で値を設定すると、timezone_string に値が入るため current_time() がうまく動作しなくなります。

timezone01

幸いなことに、WordPress 2.9.1 より UTC 形式での細かい値を設定できるようになりました。 この設定を使った場合、timezone_string に値が入らなくなり、うまいこと current_time() が正しい値を返してきますので、不具合で困ったことになっている方は、2.9.1 がでてアップグレードした後、日本のタイムゾーンの方は

timezone02

こうしてください。(ドロップダウンの下の方に追加されています) これで修正されると思います。

current_time() の件については、Nao さんにご協力(ぼくは英語が書けません。。)をいただきましてチケットをきってあります。 Nao さん、お忙しいところありがとうございました! :)

3.0 にまわされていますが、おそらく修正されると思います。 それまでは、UTC な Timezone 設定でしのぐ方向で。 :)

#11672 (current_time() does not correctly retrun localized time) – WordPress Trac

When you set you set timezone using a city name, current_time() function in functions.php does not return correct local time.

てなわけで、 +9 の日本は粛々と除夜の鐘が鳴る時間に進んでおります。

みなさま、良いお年を・・・!!

Dec 20 2009

WordPress 2.9 リリースと 2.9 対応版 wp-kyodeki とタイムゾーンと

というわけで、まさに日本時間で昨日になりますが WordPress 2.9 がリリースされました。 めでたい。 いろいろ新機能もあるようで使うのが楽しみです :)

さてさて、昔はつくっていたプラグインがバージョンアップでよく動かなくなっていたりしていたのでベータでチェックとかしていたのですが、最近わりと動くのでさぼってたら、ふと wp-kyodeki がおかしくなっているよう、、その動作を見てコアにとある変化があったのに気がつくぼく・・・。(←遅い

というわけでとりあえず wp-kyodeki。

このプラグインはアクセスカウンタみたいなもんですが、日付をまたぐとカウントがクリアされる仕様になっております。(もともとアクセスデータを蓄積しないようにつくったプラグインでした)

夜行性のぼくは 2.9 にアップデートされた我がサイトのサイドバーをみて、日付をまたいだのにカウントがクリアされていないことに気がついたのです。。

というわけで不具合がありましたので、 JSeries にリリースしました。お使いの方は更新ください。

WordPress Plugins-JSeries » wp-kyodeki (本日人気の記事表示ウィジェット)

タイムゾーンでの日付変更クリアとならない不具合が修正されます。

さて、なんでだろうという話ですが、コアの wp-settings.php に以下のコードが追加されていました。

if ( function_exists('date_default_timezone_set') )
    date_default_timezone_set('UTC');

PHP の date 関数の戻り値などに影響する、timezone の設定でこれが標準時間になるようになっています。 というわけで、これがなかった今までは日本時間が戻ってきていたのですが、UTC になったので標準時間がもどってくるようになった、ということでした。

wp-kyodeki の不具合です。 冷静に考えたら海外サーバだと WordPress のタイムゾーンを日本に設定していてもあちらの時間で更新されていましたね。すいません(笑)

で、そういやコアがどうなっているのかあんまり考えたことなかったなぁとちらほらソースをみていると、結構 date を生でつかっているところがあるようです。

まぁ、いまも日本タイムゾーン設定で海外サーバ使われている方も多くて問題になっていないようなのでコアは大丈夫かと思いますが、プラグインは考慮漏れているものがあるかもしれない(あんまりないと思いますが)ので、万が一 2.9 の日付系で問題があったら疑ってみてください。 :)

Dec 13 2009

WordPress プラグイン管理画面を簡単につくる非実用なフレームワーク

WordPress プラグインをつくるときにぼくが結構大変に思うのは、実は管理画面をつくること・・・。

なにげに自分のプラグインのソースを眺めると実ロジックより大きいこともあったりして笑ってしまいます。 というわけで、既存の管理画面のないプラグインにポンとつける用途を念頭に試しに(本当に試しに)フレームワーク的なものをかいてみました :-)

といっても、PHP 的に厳しい部分もあったりしてごにゃごにゃしなきゃいけない部分もありであまり実用的ではなく、まぁまぁこんな作り方もできるよねって話でみてもらえたらと思います。 PHP 5 系専用です。

まずはサンプル。 なにかしら管理画面の持たない既存のプラグインがあることにします。(以下、ソラでかいているので間違っているかもなのでイメージで)

なんでもいいですがおなじみ the_content フィルターで何か追加する感じのやつにしてみましょう。

   1: function addContent($content) {
   2:     $header = "ほげ";  
   3:     $content = "<p>$header</p>" . $content;
   4:     return $content;
   5: }
   6: add_filter('the_content', 'addContent');

記事の頭に「ほげ」ってつけるプラグインです。。 まぁサンプルってことでごかんべんを。(笑 プラグインヘッダなどは省略です。

ここでは固定値「ほげ」を管理画面から設定できるようにしたいと思います。

とりあえず、こいつを「クラス」にします。 っていってもほぼ機械的な置き換えです。

可変にしたい部分をフィールド(メンバ)においているところと「コンストラクタ」で初期化しているところに注目してください。

   1: class example {
   2:     
   3:     var $header;
   4:     
   5:     function __construct() {
   6:         $this->header = "ほげ";
   7:     }
   8:     
   9:     function addContent($content) {
  10:         $content = "<p>{$this->header}</p>" . $content;
  11:         return $content;
  12:     }
  13:     
  14: }
  15: $example = new example();
  16: add_filter('the_content', array($example, 'addContent'));

$header 変数が外にいきフィールド(メンバ)になりました。

__construct は new ってやったとき(15行目)に勝手に動く特別なメソッドだと思ってください。(ちなみに PHP はコンストラクタもメソッド扱いらしい)

変数を初期化して、あとは WordPress からの the_content の呼び出しを待っているイメージのプログラムです。

さてここからが本題。

今回つくってみたフレームワークというのは DolphinPanel という名前のプログラムで、こいつをつかうとこの手のプラグインに管理画面をつけられます。 “Dolphin” にはなんら意味はないです。 たまたまエコーザドルフィンを思い出しただけです。。(古)

まずプラグインのあたまで、このプログラムを require してあげます(1行目)。 で、プラグインのクラスに dolphin のインターフェースを “implements” します。

まぁかくだけです。 :-)

   1: require_once('dolphin-panel.php');
   2:  
   3: class example implements Dolphinable {
   4:     
   5:     var $header;
   6:     
   7:     function __construct() {
   8:         $this->header = "ほげ";
   9:     }
  10:     
  11:     function addContent($content) {
  12:         $content = "<p>{$this->header}</p>" . $content;
  13:         return $content;
  14:     }
  15:     
  16: }
  17: $example = new example();
  18: add_dolphin($example, 'example');
  19: add_filter('the_content', array($example, 'addContent'));

implements Dolphinable したクラス(3行目)は Dolphin 管轄の WordPress 管理画面を持つことができます。 権利をもったクラスを add_dolphin します。(18行目)

さて Dolphinable であるためには 3つの管理画面に関する決められたメソッド(onActive、onBind、onDispose)が必要になります。 これを実装していきます。

といっても単純にテキストボックスをひとつつけて、値を保存したいだけなら onActive だけ実装すればいいです。 onBind には return true; 、onDispose は空実装してください。

   1: require_once('dolphin-panel.php');
   2:  
   3: class example implements Dolphinable {
   4:     
   5:     var $header;
   6:     
   7:     function __construct() {
   8:         $this->header = "ほげ";
   9:     }
  10:     
  11:     function addContent($content) {
  12:         $content = "<p>{$this->header}</p>" . $content;
  13:         return $content;
  14:     }
  15:     
  16:     function onActive(DolphinForm $form) {
  17:         $form->add(new DolphinTextBox('$header', 'ヘッダ'));
  18:     }
  19:     
  20:     function onBind(DolphinForm $form) {
  21:         return true;
  22:     }
  23:     
  24:     function onDispose() { }
  25:     
  26: }
  27: $example = new example();
  28: add_dolphin($example, 'example');
  29: add_filter('the_content', array($example, 'addContent'));

17行目が Dolphin のキモで、この書き方で変数(フィールド)と管理画面のテキストボックスを結びつけます。 HTML フォームとの値変換、変数へのバインドをこの記述だけでやってくれます。(配列渡すと複数テキストボックスがでてきたりします)

おしまい!。

dolphinpanel02

なんだかここだけみると不思議かもしれませんが、このコードだけでめでたく管理画面がつきます。 簡単あるね。 もちろんプラグインはこの設定値で動きます。 :)

一応、もうちょっといじるとユーザ対話などもできるようになっています。 追加処理を書くとこんな感じになります。

dolphinpanel01

ここではサンプルだったので極力短くしていますが、onBind は値検査が必要な場合に実装するメソッドで、onDispose はプラグインが非活性になった場合に実装するメソッドです。 入力値に必須が入っていなかった場合のメッセージ出力や、プラグイン非活性時のデータベースからの削除などができます。

もうちょっと詳しいコメント付きサンプルと Dolphin のソースを JSeries の CVS にコミットしてあります。 気になる方は(いるのか?!)みてみてください。

http://sourceforge.jp/cvs/view/wppluginsj/dolphin-panel/

実は管理画面でつかえる HTML コンポーネントがまだテキストボックスとチェックボックスだけだったり実用にはほど遠いのですが、まぁプラグインのサービスクラスに管理画面の意識がなくなるのは楽かなと思います。 また、ここではサービスクラスにつけていますが、単純な VO のクラスに implements  して、上に親のサービスクラスをつくってプラグインを実装するのもいいかもです。

さて、お気づきの方もいらっしゃると思いますが、requre している関係でフレームワークとかいいつつクラス名称がかぶったりして、そのままだと Dolphinable な管理画面をもつプラグインがひとつしか作れなかったり、、、 namespace 使おうと思っても PHP 5.3 からだったりけっこう八方ふさがりなところがあったりします。

一応コントローラ自体は、ひとつで複数の Dolphinable を扱えるようにしているので、myhack.php とかにいれればいいんですが、もうないし(笑) __autoload とかで気合いで最新を読むような制御も考えましたが、hackish すぎるのでやめました。。 運用対処ということで(笑)

あとあと、PHP 5.3 じゃないと private プロパティがこじあけられないので、プラグインのフィールドは public にしてください。。 まぁスコープつけなきゃよいです。(お察しの通りリフレクションを使って変数をバインドしています)

というわけで、いろいろあって途中何度か企画倒れにしようかと思ったのですが、まぁせっかくつくったので話のネタに。 たぶんバグってると思うので、実用よりプログラム的な動きだけ楽しんでもらえればと思います。 :)

Oct 13 2009

あなたのブログは何ブログ? 2009

このエントリ名に覚えがある方は hiromasa.* 通!(嘘)

あなたの深層心理を、なんとなく普段書いているブログからさぐりだす「あなたのブログは何ブログ?」。 前回はなんと 2006年。 3年ぶりにやってみることにしましょう(笑)

前回の記事はこちら。

hiromasa.zone :o ) » あなたのブログは何ブログ?

Masayan さんのところで、

自分でダメ出し < MMRT daily life

このブログを第三者的見方で見ると・・・何のブログ?

という興味深い記事が・・・。

うちもなんだろーと思い調べてみることに。 WordPress やってたり、夜ネタがあったり、ごはんうつしているときもあるし。。 いったいなんなんだろうか!

hiromasa.zone らしく”第三者”はコンピュータ。 自分の全エントリを形態素解析して、その品詞分類と頻出単語から探ってみることにしました。

説明すると、ブログの content のデータを形態素解析して、頻出する単語が何かを調べてみるという企画でした。 :)

前回の結果は「:-)」が一番頻出という、、驚きの笑いっぱなしのブログであることがわかった hiromasa.zone でしたが、果たして今回はどうなるのか。(笑)

というわけで、前は chasen を使って形態素解析していましたが、今回は wp-jrelated に Yahoo! が解析してくれた結果があるのでこちらを使っています。

kanren01

まぁ辞書が違うので前回との比較はあれなんですが、それはおいておきましょう。

とりあえずやり方ですが、以下のファイルを展開して WordPress の wp-config.php と同じディレクトリにアップロードします。(wp-jrelated プラグインが導入されていて、十分に辞書ができていることが前提となります)

summary-morpheme.zip

でブラウザから

http://another.maple4ever.net/summary-morpheme.php

とかって URL アクセスすれば結果がでてくると思います。 結果をみおわったら必ずこのファイルは消してしまってください。

もし画面が真っ白になったら残念。 メモリ不足です。 うちくらいのエントリ数なら大丈夫のようですが、だめな場合はローカルにデータインポートしてコマンドライン php からやるといいと思います。

てなわけで、結果発表です!

   1位	( 356出現)	WordPress
   2位	( 340出現)	ファイル
   3位	( 244出現)	Windows
   4位	( 238出現)	ぼく
   5位	( 236出現)	サーバ
   6位	( 194出現)	機能
   7位	( 179出現)	方
   8位	( 176出現)	設定
   9位	( 175出現)	イン
  10位	( 173出現)	画面
  11位	( 171出現)	画像
  12位	( 169出現)	プラグ
  13位	( 168出現)	Linux
  14位	( 153出現)	場合
  15位	( 152出現)	PC
  16位	( 150出現)	表示
  17位	( 142出現)	サイト
  18位	( 140出現)	php
  19位	( 133出現)	Web
  20位	( 131出現)	アプリ
  21位	( 130出現)	Ubuntu
  22位	( 129出現)	ソフト
  23位	( 128出現)	USB
  23位	( 128出現)	ここ
  25位	( 126出現)	ソース
  26位	( 125出現)	人
  27位	( 124出現)	自分
  28位	( 120出現)	インストール
  29位	( 119出現)	環境
  30位	( 117出現)	another
  31位	( 114出現)	hiromasa
  31位	( 114出現)	動作
  33位	( 113出現)	tegaki
  34位	( 112出現)	投稿
  35位	( 107出現)	起動
  35位	( 107出現)	記事
  37位	( 102出現)	それ
  37位	( 102出現)	対応
  39位	( 101出現)	感じ
  40位	( 100出現)	テーマ
  41位	(  99出現)	動画
  41位	(  99出現)	データ
  43位	(  98出現)	Eclipse
  43位	(  98出現)	タグ
  45位	(  96出現)	コード
  46位	(  95出現)	ブログ
  47位	(  94出現)	WP
  47位	(  94出現)	管理
  49位	(  92出現)	便利
  50位	(  91出現)	アプリケーション
  50位	(  91出現)	バージョン

以上から hiromasa.another はめでたく、

WordPress ブログ!

ということになりました。 うむ、そうだったのか(笑)

Ubuntu < Windows だったことに衝撃!!(ずがーん)をうけつつ 2009年度版「あなたのブログは何ブログ」でした。

意外な深層心理を発見(!?)できるかもしれませんので、jrelaetd を導入している方はおためしあれぇ。 プログラムをいじると名詞しばりを解除できたりしますので Yahoo! のくせをみるのもおもしろいでしょう。

ちなみに、この結果はストップワード作成とかにも役立つかもしれません。 :-)

Oct 12 2009

WordPress のファイルバックアップ

WordPress + twitter なモブログをする方も増えてきて、ますます重要になる WordPress のファイルバックアップ。

コアとかプラグイン、テーマはサーバを直接修正していない限りローカル PC のどこかに残っていそうですが、wp-content/uploads とかの画像ファイルはオリジナルがなくなってしまうことも多そうです。

WordPress のブログデータの構成要素は、MySQL のデータと画像などのサイトにアップロードファイルとなりますが、ここは後者のファイルのバックアップお話。 MySQL のバックアップについては以前かいた以下の記事が参考になるかもしれません。

hiromasa.another :o ) » Blog Archive » WordPress の MySQL バックアップ

てなわけで、大抵のサーバは ssh の接続がサポートされていますので MySQL のバックアップ関連はこちらで操作するといいかもしれません。 まずは手動のシェル起動によるバックアップ、これがうまくいったら cron にこのシェルを登録してみます。

というわけで、お手軽にファイルもバックアップしたいよね、ということで UNIX の rsync + SSH をつかったバックアップを紹介してみます。 Windows でも cygwin とか使うとできるかもしれません。 :-)

rsync というのは、送り元先のファイルリストを確認して差分でシンクロしてくれる便利なアプリケーションです。

rsync – Wikipedia

rsync は、UNIXシステムにおいて、差分符号化を使ってデータ転送量を最小化し、遠隔地間のファイルディレクトリ同期を行うアプリケーションソフトウェアである。類似のプログラムやプロトコルにはない rsync 独自の特徴として、ミラーサイトとの転送が双方向に高々1回で済む点がある。rsync はディレクトリ内容を表示し、ディレクトリやファイルをコピーできる。オプションでデータ圧縮再帰も指定可能。

WordPress をレンタルサーバにインストールしているとして、、rsync が使える条件は、SSH が接続できることとサーバ側に rsync が入っていることです。 ぼくが使っているコアサーバではOKでした。(後述の siroica さんの記事によると XREA も大丈夫そうです)

また、バックアップ先のクライアントの PC でも rsync と SSH が使える必要があります。 Linux とか BSD とか、たぶん Mac OS X もできるのだと思います。 Windows でも cygwin とかつかうことでできそうです。

とりあえず、コアサバに SSH できる Ubuntu がお手元にあるとすると以下の感じでいけます。

先にファイルを転送する先の current というディレクトリをつくっています。(この名前はなんでもかまいません)

hiromasa@hiromasa-cube:~$ mkdir current
hiromasa@hiromasa-cube:~$ rsync -avz --delete [ユーザ名]@[サーバ名]:[バックアップディレクトリパス]/ ./current/
 
[実際のコマンド(参考)]
hiromasa@hiromasa-cube:~$ rsync -avz --delete another@s8.coreserver.jp:/virtual/another/public_html/ ./current/

rsync [オプション] [送り元] [送り先] が基本的な使い方です。 コアサバ –> ローカル PC です。

逆を指定すると悲惨なことになりますので十分注意してください。

特に –-delete という「消したファイルを消す」というオプションをつけている場合に、空ディレクトリを送り元にしてしまうと、送り先が空っぽになって真っ青になります。。

地雷だらけのrsyncを理解する。 – こせきの技術日記

–deleteは、DESTのディレクトリ指定を間違えると悲惨なことになる。SRCのスラッシュの有無も重要。

同期という技術の特性上、危険なパターンもあるので、よく理解した上で行ってください。

ここではコアサバの public_html 配下をローカルの ./current とういうディレクトリにもってきています。 wp-content/uploads などバックアップしたいところをピンポイントを指定するのも良い方法でしょう。

rsync01

実行するとパスワードをきいてきますので、SSH のログインパスワードを入力します。

で、こんな感じでドヴァーとゴールドな感じでファイルが転送されてきます。(ファイル数が多いときは転送量に注意してください)

ファイル数が多いと時間がかかり、またコアサバの場合途中で切断されてしまう場合があるようですが、そのときは再試行してください。 差分でとってきますので、そのうち全部終わります。

sent 20 bytes  received 1158377 bytes  210617.64 bytes/sec
total size is 549995346  speedup is 474.79

こんなのがでたら転送完了です。

current ディレクトリ下をみてみるとファイルがきているのが分かると思います。 尚、この下のファイルは直接修正などしないほうが良いでしょう。(編集したいときは別な場所にコピーして使いましょう)

で、ある時期がたったらまた同じディレクトリ(current)があるところで rsync コマンドをうてば何も考えずに更新差分のみ取得できます。 この辺が FTP ではできない有利なところです。 :) backup.sh などのシェルスクリプトに rsync コマンドを記述しておけば間違えも少なくてよさそうです。

backup.sh

#!/bin/sh
 
rsync -avz --delete another@s8.coreserver.jp:/virtual/another/public_html/ ./current/

取得した current ディレクトリは圧縮して別途保存しておくと履歴バックアップになりますね。

なんてことをやっていると、cron で全部自動でやりたいなぁという欲求がふつふつと。 ということで、siroica さんが rsync + mysqldump + pdumpfs + cron でファイルとMySQL ダンプの自動履歴バックアップをする記事を書かれています!

XREAのサーバーに設置したWordPressを自動バックアップする環境を整える – SharpLab.

みんな大好きWordPress。だからこそ、データが飛んでしまうのはなんとしても避けたいもの。そのためには、常日頃からデータのバックアップを取っておくのが重要なのですが、いちいち手動でバックアップするのは手間なので、なるべく自動化しておきたいものです。バックアップしたいのは次の二つ:アップロードしたファイルとMySQLのダンプ。

玄箱などいえにローカルにサーバがある方は自動化にチャレンジしてみると良いかもしれません。 :)