投稿日:

WordPress のマジッククオート


WordPress でプラグインを書こうとしたら、$_POST とか $_GET とか使うことになると思います。

ところが、これらの外部入力は無条件に magic quotes されています。
しかも、WordPress によって。PHP 関係なしで。

また、プレーンな値を直接取得する方法も無いようです。
で、プレーンな入力値が必要な時は、stripslashes です。

ちょっとびっくりしましたが、これも WordPress の流儀。
WordPress 始めたばっかりのプログラマ側の人はびっくりするかも知れないと思ってのメモでした。

詳細

最初、まさか php がマジッククオート ON なのか? と思ったりして php.ini とか見たり、.htaccess 見たりしてけれど、magic qoutes なんてされてません。もちろん、get_magic_quotes_gpc() で確認しても、大丈夫、ちゃんとオフ。

なぜー? なんでー?! (?_?)

まさかと思いつつ、WordPress のコードを彷徨ったら、load.php の中に次の関数を見つけました。

これはつまり…、PHP の設定に関わらず、オレオレマジッククォート適用しちゃうぞって事ですね。

これは WordPress の流儀のようです。

では、プレーンな値が欲しい時はどうするのか?
これが調べてもそれらしい情報が出てこなかったのですが、Twitter で @horike37 さんがビシッと教えてくれました。

自動でシングルコートつけてきよるのでstripslashesするしかない!

とのこと。

潔いですね。というか、html escape がデフォルトのテンプレートエンジンと同じじゃないか、合理的じゃないか、ということで、納得しておきます!

参考

いちおう自分でも見つけた情報。みんな最初は戸惑うようです。
http://wordpress.stackexchange.com/questions/21693/wordpress-and-magic-quotes

投稿日:

WordPressの投稿画面で、記事のカテゴリーを1つしか選べないようにする


WordPressの投稿画面で、記事のカテゴリーを1つしか選べないようにする必要があって、ぐぐってみたら、次のページが見つかりました。
http://kachibito.net/wordpress/limit_checkbox.html

…ただ、思っていたのとちょっと違って、僕的にはラジオボタン的に動作して欲しかったので、改訂版を書いてみました。アイデアはそのまま頂きました。

…もちっと違う方法…というか正攻法というと、そもそものカテゴリ選択を radio ボタンにできないかな?とも思うのですが、今回は時間が無かったので、とりあえずこれでOKとしました。

投稿日:

WordPress プラグインの作り方(WP初級のPHPerさん向け)


WordBench神戸

最近まで「WordPressって何?」って感じだった僕ですが、今更ながらに WordPress を使ってみています。今日は、WordBench 神戸の勉強会にて教わったプラグインの作り方をまとめてみました。

お題は「顔文字チェンジャー」!

記事本文の内容の中の「。」のテキストを任意の顔文字に置換しちゃう楽しいプラグインです。なお、本記事は PHP は分かる人向けに書いていますー。

プラグイン制作の準備

WordPress プラグインは、/wp-content/plugins/ ディレクトリ内に作成します。
ここでは、/wp-content/plugins/moji-changer/ を作成します。またそのディレクトリ内に、プラグインディレクトリと同名のファイル、moji-changer.php を作成します。
結果、以下のようなディレクトリとファイルが出来ます。

moji_changer.php を開いて、スクリプト冒頭に、下記のようなメタ情報を書きます。

まずこれだけで WordPress はこのプラグインを認識してくれるですね。
管理画面でプラグインの一覧に表示されているので確認できます。

この状態で、プラグインを有効化しておいてください。

でもこれだけだともちろん何も起こらないです。
行いたい処理を追加していきます。

記事本文のテキストを加工してみる

上のメタ情報の下に続けて、以下のコードを書いてみます。

add_filter

フィルターフックを登録する WordPress の関数です。

第1引数にフックの種類を登録します。ここでは、the_content を指定しています。
‘the_content’ は、記事本文が画面表示される前に呼び出されるフックの指定です。

第2引数は、そのフックで実行される関数を指定します。
ここでは、moji_changer_content_filter を登録しています。
そして、ここに登録した名前の関数を自分で作成します。

moji_changer_content_filter

この関数は、$content で記事本文のテキストを受け取って、「。」を「 (*´艸‵*)ウフッ♪」の顔文字に変換して返しています。

これで OK です。
ブログの記事画面を開いてみると、記事中の「。」が「 (*´艸‵*)ウフッ♪」になって、なんだか素敵なブログになっていると思います。

add_filter について、詳しくはコチラ:
http://wpdocs.sourceforge.jp/関数リファレンス/add_filter

管理画面ヘの設定ページの追加

変換される顔文字を、管理画面で設定出来るようにしてみましょう。
上記のコードに続けて、次のコードを書いてみます。

これだけで、管理画面をリロードすると、サイドバーにメニューが追加されます。また、メニューをクリックすると、「設定画面をここに書くよ!」と表示されます。

ここで、add_action、add_menu_page は、WordPress の関数です。moji_changer_admin_menu は、管理画面を登録する関数で、moji_changer_edit_setting は、設定ページの本体を出力する関数です。

以下、順に見ていきます。

add_action

アクションフックを登録する WordPress の関数です。
第1引数にフックの種類を登録します。ここでは、admin_menu を指定しています。‘admin_menu’ は、管理画面メニューの基本部分が配置された後に実行されるフックの指定です。

第2引数は、そのフックで実行される関数を指定します。
ここでは、moji_changer_admin_menu を登録しています。

add_action について、詳しくはコチラ:
http://wpdocs.sourceforge.jp/関数リファレンス/add_action

moji_changer_admin_menu

上述の add_action での登録で呼ばれる関数です。
ここでは、add_menu_page を呼び出し、管理画面メニューを追加しています。

add_menu_page

管理画面にカスタムページを追加する WordPress の関数です。
第1引数は、追加するカスタムページの名前です。
第2引数は、カスタムページへアクセスするためのメニューの項目名。このメニューは、管理画面サイドバーのトップレベルに表示されます。
第3引数は、カスタムページを利用できる権限の制限。ここでは、administrator で管理者とします。
第4引数は、(たぶん)カスタムページを特定する名前。つまり、url パラメータになります。
第5引数が、(やっと)管理画面の本体となる関数です。管理画面の内容などを出力します。

…なんか長くなりましたが、要するに↓みたいな感じですね♪

 add_menu_page について、詳しくはコチラ:
http://codex.wordpress.org/Function_Reference/add_menu_page

moji_changer_edit_setting

最後に、管理画面本体となる関数です。
管理画面の画面表示を行ったり、データの保存や読み出しなど必要な処理を行います。ここではとりあえず、echo で「設定画面をここに書くよ!」と出力しているだけですが、これによって、管理画面に「設定画面をここに書くよ!」と表示されました。

わぉっ。簡単だ!

管理メニューの追加について、詳しくはコチラ:
http://wpdocs.sourceforge.jp/管理メニューの追加

管理画面で実際に設定できるようにする。

さて、管理画面で実際に設定できるようにしてみますが、これもすごく簡単です。上で書いた moji_changer_content_filter と moji_changer_edit_setting の2つの関数を、以下のように書き換えてみます。

フォームの action を空にしているので、設定画面の表示時にも、顔文字の登録時にも、いずれも同じ moji_changer_edit_setting 関数がコールされることに注意すると、PHPer なら動作は容易に想像できると思います。

get_option、update_option

ここで、get_optionupdate_option という2つの新しい WordPress の関数が登場しています。これは、WordPress の単純なデータストア API です。

という書式で、データを保存したり、取り出したりできます。

こういう単純な API があると便利ですね!
注意点として、キー名は WordPress 全体で共通なので、他のプラグインや機能と重複しないように注意して設定する必要があります。

これで、管理画面に顔文字を登録するフォームが完成し、[登録] ボタンから顔文字の変更が出来るようになりました。驚くほど簡単です!

以下、ここまでのコードをまとめて掲載します。

発展

わくわく楽しいプラグインが出来ました♪
何か鬱憤がたまったら、プラグインを有効化して変な顔文字いっぱいのブログにしてスッキリしてやります。

そこで、もうすこし自由度を増すために、もう少しだけプラグインを改造してみました。名前も、「顔文字チェンジャー」改め、「文字チェンジャー」です。

php のファイルは以下の2ファイルになりました。

moji-changer.php

 setting.html.php

以上です。

大きな変化はありませんが、WordPress 的なポイントとしては、get_option、update_option 関数が、単純なプリミティブな値以外にも、配列などを保存できるということです。これは素敵。便利ですねー!

 

 

投稿日:

DotCloud + WordPress の構成ファイルをローカルで管理する


WordPress を DotCloud で運用することにしましたが、どうも push はできても pull が出来ないようです。(たぶんw)

となると、公開中のサイトの管理画面でテーマやプラグインの追加・変更を行っても、手元にファイルを残しておくことができません。また、functions.php をはじめ、自分で機能拡張するためのコーディングはやっぱりローカルで慣れたツールでやりたいところです。

そこで、なるべくローカルで管理する構成を考えてみました。

ざっとした構成は次の通りです

  • WordPress は DotCloud と Local と両方に配置
  • データベースは DotCloud を利用(ローカルも DotCloud 上のDBを参照)
  • WordPress サイトは、独自ドメインで公開(この運用の為に必要)

こんな感じにセットアップして、ローカルでサイトを管理しつつ、ファイルの変更があったら DotCloud に随時 push する方法です。

1)ローカル環境の準備

WordPress を動かすための Web サーバーを構築してください。
僕はとりあえず、MAMP を利用しました。

また、サイトの公開用のドメインでバーチャルホストを設定してください。
ここでは、www.lurala.com を使用します。
hosts に次のエントリを追加し、www.lurala.com がローカルを参照するようにします。

 2)DotCloud の環境準備

サインインしてアカウントを準備して、DotCloud の CLI 環境も準備してください。
ここはググるとすぐに出てくるし、簡単なので割愛します。

3)WordPress プロジェクトを準備する

任意のディレクトリに WordPress のプロジェクトを作成します。
とりあえずここでは、/Users/yuka2py/Projects/lurala というディレクトリを作成し、このディレクトリをプロジェクトのルートとします。ここに直接 WordPress のファイルを展開することもできますが、僕は次のディレクトリ構成としました。

/dotcloud.yml
dotcloud の設定ファイル。プロジェクトのルートに1つ必要
/public/
パブリックルート。この中にWordPressなど設定します

プロジェクトのルートには、dotcloud.yml のみとして、公開ファイルは public ディレクトリに入れてしまう感じです。では、dotcloud.yml を以下の内容で作成します。

approot で、パブリックルートディレクトリ public ディレクトリに指定しています。

そして、public フォルダを作成し、wordpress の初期ファイルを全てどどどーんと展開しておきます。

4)DotCloud にアプリケーションを展開する

DotCloud のコマンドを入力して DotCloud の設定を行っていきます。
必ず、プロジェクトのルートで操作してください。

まずは、DotCloud にアプリケーションを作成。

そして、ローカルのファイルをアップ。

これでアプリケーションが展開され、Webサーバーやデータベースの初期化が実行されます。

次に、初期化された、データベースのインフォメーションを取得します。

以下のような情報が出力されます。

この情報より、データベース接続の為のホスト名やアカウント情報を参照できます。

次に、mysql に WordPress 用のデータベースとユーザーを作成します。

まずは、mysql にログイン。

そしてデータベースの作成して、データベースを参照できるユーザーを作成。

以上で mysql の準備は完了です。
mysql から ctrl+D でログアウトします。

5) WordPress のインストールを実行する

WordPressのインストールを行います。
ここでアクセスするのは、ローカルのWebサーバーであることに注意してください。

http://www.lurala.com/wp-admin/

そして、おなじみのデータベースの設定画面です。

ここで、先ほど設定した、データベース名、ユーザー名、パスワード、そしてホスト名を入力します。
ホスト名には、dotcloud info lurala.db で参照できる、ports: mysql: のホストからポートまでの情報を入力します。僕の場合、以下の通りです。

lurala-yuka2py.dotcloud.com:18836

あとは、おなじみの WordPress インストールの流れです。

★補足★ この時点で、Web サーバーや WordPress のファイル群はローカルのものを参照し、データベースだけ DotCloud を参照する形となっています。この状態でセットアップなどすることで、ローカルにファイルを持つ事ができる感じです。ローカルで追加や更新されたデータは、dotcloud push コマンドで DotCloud にアップして更新します。

インストールが終了したら、インストールによって生成されたローカルのファイルを DotCloud に push します。

これで、ローカルで生成された設定ファイルなどが、DotCloud にも展開されます。

DotCloud でもローカルでも、参照している DB は同じなので、DotCloud 側でもキチンと WordPress が動きます。

…ととと、あとひとつ、ドメイン名の設定が残っていました。

6) WordPress を公開する

そのままローカル環境の WordPress にログインします。
[設定] > [一般] の中の「WordPress のアドレス (URL)」「サイトのアドレス (URL)」の2項目が、公開ドメイン(ここでは、http://www.lurala.com)になっていることを確認してください。

この時点で、http://www.lurala.com は、ローカル環境からのみアクセス可能です。
DotCloud のデータが http://www.lurala.com で公開されるように準備します。

まず、DotCloud にドメイン名のエイリアスを登録します。

これで登録できました。

次のコマンドで確認できます。

結果、次のような情報が確認できます。

ここで、追加した http://www.lurala.com/ が確認できます。

さて、もうひとつ、http://lurala-yuka2py.dotcloud.com/ とありますが、これは dotcloud アプリケーションのデフォルト url です。

で、この lurala-yuka2py.dotcloud.com に対して、www.lurala.com の CNAME レコードを、あなたの管理する DNS サーバーに登録します。

以上で完了です。
最後に dotcloud push した内容で、あなたの WordPress が公開されます。

7)運用方法

  • プラグインやテーマのインストールおよび管理や、functions.php の修正などは、基本的にローカルで全て作業できると思います。変な php エラーを出して焦ることもありません。ゆっくりと修正できます♪
  • 修正が完了し、ローカルでの動作確認が OK なら、dotcloud push で、本番に公開します。
  • データベースだけ共用している点に注意が必要です。
  • また、この設定のままでは、ローカルのマシンからは常にローカルの WordPress が見えています。DotCloud 上の本物のサイトを見るには、別のマシンから見るか、あるいは、hosts ファイルのエントリをコメントします。ちょっと面倒ですが、良いやり方があったら教えてください。
  • アプリケーションのルートディレクトリで、git のリポジトリを作成し、git の管理下に置くこともできます。dotcloud コマンドは、.git ディレクトリがあるとヨシナニ取りはからってくれるらしいです。

追記のおまけ

パーマリンクのための設定

WordPress のパーマリンクを使うには、public root に、以下の内容の nginx.conf の設定ファイルを置きます。

nginx.conf は dotcloud の htttpd である、nginx の設定ファイルです。

どうやら差分だけ設定できるようです(.htaccess みたいな感じかな? たぶん)。

本家のドキュメント

http://docs.dotcloud.com/tutorials/php/wordpress/

後で見つけました。 (^_^;A
やっぱり説明書から目を通さないとね。