HOME>WEBプログラム覚書>Wordpress プラグイン作成前の基礎知識

Wordpress プラグイン作成前の基礎知識

そろそろプラグインの一つでも作れるようになりたいので調べてみたのをメモ。

Wordpress プラグイン

Wordpressのプラグインと呼ばれるものには大きくわけて3種類ある。

  • アクションプラグイン
  • フィルタープラグイン
  • カスタムテンプレートタグ

カスタムテンプレートタグについては単なる関数なので特に問題はない。

プラグイン動作の仕組み

Wordpressがページを出力するまでの流れの中に、プラグインを実行するチェックポイントのようなものが存在する。 チェックポイントはコードにdo_action( $tag, $arg )apply_filters( $tag, $value )と記述されている。

Wordpressが順に実行されチェックポイントに到達したとき、プラグインを動作させるようにすることを「フック(hook)」と呼ぶ。 チェックポイントにプラグインをフックさせることでプラグインが動作するようになる。

※実際はチェックポイントのことをアクション/フィルターと呼び、「アクション/フィルターにフック」するという感じで使われているので、アクションプラグインとかいう言葉はありません。

アクションプラグイン

アクションプラグインはdo_action()にフックすることで実行されるプラグイン。 なんらかのアクションが発生するところで実行できることが多い。

  • 投稿記事またはページが更新・編集された時
  • 投稿記事にトラックバックが追加された時
  • テンプレートがget_header関数を呼び出した時

など。何をするかはプラグイン作者の自由。

フィルタープラグイン

フィルタープラグインは「入力」を「加工」して「出力」するためのもの。 データベースからブラウザへの出力、ブラウザからデータベースへの出力時などフィルターを通っている。

  • wp_title関数が生成したページ名がブラウザに送信される前
  • コメント本文がデータベースに保存される前

など。アクションプラグント違いフィルタープラグインは、変更する入力を引数として受け取る。

フォーマット

Wordpressにプラグインとして認識させるためには、プラグインファイルの先頭に 標準プラグイン情報ヘッダーを記述しなければならない。

PHP

  1. <?php
  2. /*
  3. Plugin Name: (プラグインの名前)
  4. Plugin URI: (プラグインの説明と更新を示すページの URI)
  5. Description: (プラグインの短い説明)
  6. Version: (プラグインのバージョン番号。例: 1.0)
  7. Author: (プラグイン作者の名前)
  8. Author URI: (プラグイン作者の URI)
  9. */
  10.  
  11. ?>

コピペして適当に変更すればOKな感じ。

データベース

プラグインを作ろうと思ったら、データベースへアクセスしたくなりそうなんで調べておく。

テーブル構造

とりあえずテーブル構造は押さえておきたいところです。 プリントアウトしてトイレにでも貼っておくといい感じw

wpdb Class

Wordpressのデータベースへのアクセスは直接SQLを書くのではなくwpdbクラスのインスタンスであるwpdbを利用する。 wpdbはグローバル変数となっているのでどこからでもアクセス可能である。(※関数の中で利用するにはglobal宣言をする。)

テーブルへのアクセス

テーブルの指定はテーブル名をハードコーディングせず、wpdbのプロパティを利用する。

  • $posts(posts (投稿・固定ページ) テーブル。
  • $users(The table of users (ユーザー) テーブル。
  • $comments(The comments (コメント) テーブル。
  • $links(リンク情報) テーブル。
  • $options(設定情報) テーブル。
  • $postmeta(= メタコンテンツ、カスタムフィールド) テーブル。
  • $usermeta(ユーザーメタ情報) テーブル。ニックネーム、説明、パーミッションなどユーザーに関する追加情報を含む。
  • $terms(キーワード情報) テーブル。カテゴリーの説明、リンクカテゴリー、タグなどの情報を含む。
  • $term_taxonomyterm_taxonomy テーブル。キーワード (terms) のクラスであるタクソノミーの情報を含む。タクソノミーとは、投稿カテゴリー、リンクカテゴリー、タグ、その他のカスタムタクソノミーを指す。
  • $term_relationships
プリペアド・ステートメント

Wordpressでは$wpdb->prepare()メソッドを利用してプリペアド・ステートメントをシミュレートします。 データベースへのクエリの送信は、例え自分の入力であっても全てこの関数を通すように癖をつけておく。

クエリの送信

$wpdb->query()を上記、prepare()メソッドと供に利用します。 $wpdb->query()以外にもクエリを送信する関数が存在して、SELECTの場合などそっち使った方がいいよとありますが、 関数名覚えるのも、どの関数がエスケープしてくれてどれがエスケープしてくれないとか覚えるのが面倒なので

PHP

  1. <?php
  2. $wpdb->query($wpdb->prepare());
  3. ?>

これだけで済ませたいところ。大体の関数はエスケープしてくれるみたいですが。データ検証

post idが403のデータを取得

PHP

  1. <?php
  2. function myPlugin() {
  3.     global $wpdb;
  4.     $result = $wpdb->query($wpdb->prepare("SELECT * FROM $wpdb->posts WHERE id=%d", 403));
  5.     if ($result) {
  6.         var_dump($wpdb->last_result);
  7.     }
  8. }
  9. ?>
実行結果
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

コメント

コメントする
Name
Email Address
URL