そろそろプラグインの一つでも作れるようになりたいので調べてみたのをメモ。
Wordpressのプラグインと呼ばれるものには大きくわけて3種類ある。
カスタムテンプレートタグについては単なる関数なので特に問題はない。
Wordpressがページを出力するまでの流れの中に、プラグインを実行するチェックポイントのようなものが存在する。 チェックポイントはコードにdo_action( $tag, $arg )、apply_filters( $tag, $value )と記述されている。
Wordpressが順に実行されチェックポイントに到達したとき、プラグインを動作させるようにすることを「フック(hook)」と呼ぶ。 チェックポイントにプラグインをフックさせることでプラグインが動作するようになる。

※実際はチェックポイントのことをアクション/フィルターと呼び、「アクション/フィルターにフック」するという感じで使われているので、アクションプラグインとかいう言葉はありません。
アクションプラグインはdo_action()にフックすることで実行されるプラグイン。 なんらかのアクションが発生するところで実行できることが多い。
など。何をするかはプラグイン作者の自由。
フィルタープラグインは「入力」を「加工」して「出力」するためのもの。 データベースからブラウザへの出力、ブラウザからデータベースへの出力時などフィルターを通っている。
など。アクションプラグント違いフィルタープラグインは、変更する入力を引数として受け取る。
Wordpressにプラグインとして認識させるためには、プラグインファイルの先頭に 標準プラグイン情報ヘッダーを記述しなければならない。
コピペして適当に変更すればOKな感じ。
プラグインを作ろうと思ったら、データベースへアクセスしたくなりそうなんで調べておく。
とりあえずテーブル構造は押さえておきたいところです。 プリントアウトしてトイレにでも貼っておくといい感じw
Wordpressのデータベースへのアクセスは直接SQLを書くのではなくwpdbクラスのインスタンスであるwpdbを利用する。 wpdbはグローバル変数となっているのでどこからでもアクセス可能である。(※関数の中で利用するにはglobal宣言をする。)
テーブルの指定はテーブル名をハードコーディングせず、wpdbのプロパティを利用する。
Wordpressでは$wpdb->prepare()メソッドを利用してプリペアド・ステートメントをシミュレートします。 データベースへのクエリの送信は、例え自分の入力であっても全てこの関数を通すように癖をつけておく。
$wpdb->query()を上記、prepare()メソッドと供に利用します。 $wpdb->query()以外にもクエリを送信する関数が存在して、SELECTの場合などそっち使った方がいいよとありますが、 関数名覚えるのも、どの関数がエスケープしてくれてどれがエスケープしてくれないとか覚えるのが面倒なので
これだけで済ませたいところ。大体の関数はエスケープしてくれるみたいですが。データ検証
array
0 =>
object(stdClass)[263]
public 'ID' => string '403' (length=3)
public 'post_author' => string '1' (length=1)
public 'post_date' => string '2009-12-04 00:46:57' (length=19)
public 'post_date_gmt' => string '2009-12-03 15:46:57' (length=19)
public 'post_content' => string '[amazon asin="4492043527" format="dumpping"]本・漫画・雑誌::本[/amazon] (length=4546)
public 'post_title' => string '電球型のボトル Glojiin' (length=29)
public 'post_category' => string '0' (length=1)
public 'post_excerpt' => string '電球かと思ったらジュースだった。電球型のボトル Gloji' (length=75)
public 'post_status' => string 'inherit' (length=7)
public 'comment_status' => string 'open' (length=4)
public 'ping_status' => string 'open' (length=4)
public 'post_password' => string '' (length=0)
public 'post_name' => string '402-autosave' (length=12)
public 'to_ping' => string '' (length=0)
public 'pinged' => string '' (length=0)
public 'post_modified' => string '2009-12-04 00:46:57' (length=19)
public 'post_modified_gmt' => string '2009-12-03 15:46:57' (length=19)
public 'post_content_filtered' => string '' (length=0)
public 'post_parent' => string '402' (length=3)
public 'guid' => string 'http://local.zaku055.com/2009/10/28/402-autosave/' (length=49)
public 'menu_order' => string '0' (length=1)
public 'post_type' => string 'revision' (length=8)
public 'post_mime_type' => string '' (length=0)
public 'comment_count' => string '0' (length=1)
あとは管理画面ですね問題は・・・。
| 投稿日 | 2010年3月30日 05:14 |
|---|---|
| カテゴリ | PHP |
| タグ | WordPress |
| トラックバック URL | http://www.kantenna.com/cgi-bin/mt504/mt-tb.cgi/1211 |
2010年4月27日 23:21
Wordpressのエクスポートとインポート使ってデータ移転するとguidが変わらない続きを読む
2012年1月 8日 06:05
囲み型ショートコードのコンテンツを普通に受け取ると、改行があったりセミコロンとかがエスケープされた状態になっている。 JavascriptとかPHPを書く...続きを読む
2012年1月12日 01:13
どこからでも次の投稿と前の投稿を取得できるよう、get_adjacent_post()を変更してみる。続きを読む
2012年1月14日 05:55
テンプレートのごちゃごちゃが限界にきたのでラッパー書いてみた。でも僕なんかではなくもっとデキる人が書いたものを使いたいw続きを読む