今回から装いも新たに「wp-hatena にみるプラグインの作成方 – 前編 -」 ということで先日リリースした “WordPress エントリをはてなブックマークに登録 – wp-hatena プラグイン -” を元にコードを見ていきたいと思います。
前回はこちら、
WordPress プラグイン作成のノウハウ – 終編 –
これから始まる本エントリは、今までのお話が実際にはこんな感じになります、という趣旨がです。一応、サンプルにしている wp-hatena プラグインの動作も事前に見て頂いておくと分かりやすいかもしれません。
まずは簡単ですが wp-hatena の動作を書きます。
- プラグイン有効化後、テーマ内に「<?php $wph->addHatene(); ?>」と書くと “エントリをはてなブックマークに登録するリンク画像” がサイトに表示される。
 
- リンク画像は自分のサーバの 「http://[サーバ名:ブログ設置ディレクトリ]/wp-content/plugins/wp-hatena/append.gif」というファイルである
 
- そのリンク先は、「http://b.hatena.ne.jp/append?」の後ろにエントリのURL をつけたものである
 
という感じです。
プログラムの内容を簡単に言えば、ユーザに呼び出してもらう関数(addHatene())を定義し、その中で上記2つの URL を生成して画面に返す、ということですね!。
では早速 wp-hatena のコードを一番上から説明していきたいと思います。
まずは WP にプラグイン情報を与えるおなじみのコメント部分です。
-  <?php
 
-  /*
 
-  Plugin Name: wp-hatena
 
-  Plugin URI: http://zone.maple4ever.net/blog/archives/439/
 
-  Description: エントリをはてなブックマークに追加するリンクタグを挿入します。
 
-  Author: hiromasa
 
-  Version: 0.8
 
-  Author URI: http://zone.maple4ever.net/blog/
 
-  Special Thanks: Castaway. (http://bless.babyblue.jp/wp/)
 
-  */
 
 
このコメントは、WP 管理画面のプラグイン一覧の情報とも対応しています。 今回は、Castaway。さんのサイトを参考に作らせて頂いたので「Special Thanks:」ということで WP 規格外の情報も入れています。
そしてこのプラグインはなにやらその後にもコメントが続いています。
-  /*  Copyright 2005 hiromasa  (email : webmaster@hiromasa.zone.ne.jp)
 
-  
 
-      This program is free software; you can redistribute it and/or modify
 
-      it under the terms of the GNU General Public License as published by
 
-      the Free Software Foundation; either version 2 of the License, or
 
-      (at your option) any later version.
 
-  
 
-      This program is distributed in the hope that it will be useful,
 
-      but WITHOUT ANY WARRANTY; without even the implied warranty of
 
-      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
-      GNU General Public License for more details.
 
-  
 
-      You should have received a copy of the GNU General Public License
 
-      along with this program; if not, write to the Free Software
 
-      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
-  */
 
 
これは、このプラグインは GPL というライセンスの元配布されていますというコメントです。
WordPress 本体 は GPL というライセンスで配布されているプログラムです。でもって、GPL の決まりの中に「GPL にリンクして動くプログラムは GPLにしなければならない」というのがありますので、WP にリンクして動くこのプラグインも自動的に GPL で配布することになります。 このコメント部分はこのプログラムが GPL ですよということを宣言しているわけです。
中身は、
- 著作者名
 
- このプログラムは GPL で配布されているよ
 
- このプログラムは有用だと思っているけど無保証だよ
 
- ライセンスの全文は他にあると思うけどなかったら連絡ちょうだい
 
という感じでしょうか。詳しくは GPL 関連のサイトをみてみてください。 ソース上でライセンス宣言をしたい場合はこのような記述を使うようです。
[参考]
Writing a Plugin < WordPress Codex
Plugin File Structure
さてコードに戻りまして、コメントはもうちょっと続きます。
-  /******************************************************************************
 
-   * 使い方 :
 
-   *  プラグインを有効にした後 WP テーマ内の**エントリ位置**に、
 
-   *  <?php if(isset($wph)) $wph->addHatena(); ?>
 
-   *  を挿入してください。
 
-   *****************************************************************************/
 
 
ここは自分のコメントです。使い方やバージョン履歴を入れる方が多いようですね。この辺はお好みです。
では、いよいよ次からがプログラム本体です。
-  if(class_exists('WpHatena')) {
 
-    
 
-    $wph = & new WpHatena();
 
-    //add_action('wp_head', array(&$wph, 'addScript'));
 
-    
 
-  }
 
 
このプラグインは、前回説明した class を使って書いています。41行目がそのインスタンスの作成部分。で、42行目が hook への登録部分です。 wp_head というのは、WP が HTML の <head> 部分に出力するときに割り込むことが出来る hook です。今回の場合、具体的には 画像カーソルポップアップのJavaScript のファイルを差し込もうとしています。(この部分は未完成なのでコメントアウトされていたりします・・・)
wp-hatena は、使う方がテーマ内に手動でプラグインを呼び出してもらうコードを書いて頂く方式を使っています。ということで、基本 hook がないタイプのプラグインです。一応ここまでの流れがありますので、上記のコメントアウトしてある hook 登録は行われているものとして説明していきます。
さて、話題は上記コードに戻ります。 39 行目が今までに出てきていない記述です。
-  if(class_exists('WpHatena')) {
 
 
これは、WpHatena クラスが”存在したら” という PHP のコードになります。 下まで読むと WpHatena がちゃんと存在していたらプラグインを登録してね、ということになります。
今回は同じプラグインファイルに WpHatena クラスがあるので、定義が存在しないことはありえないわけですが、一応なにかの加減で消えてしまったときに、PHP からエラーが出ないように保護装置をいれているイメージです。
では、次のコードにいきましょう。ここからがプラグイン本体のコードになります。
-  class WpHatena {
 
-    
 
-    var $plugin_path;
 
-    var $hatena_url;
 
-    var $hatena_gifname;
 
-    var $popup_jsname;
 
-    
 
-    /**
 
-     * The Constructor
 
-     * 
 
-     * @param none
 
-     * @return Object reference
 
-     */
 
-    function WpHatena() {
 
-        
 
-        $this->plugin_path  = get_settings('siteurl');
 
-        $this->plugin_path .= '/wp-content/plugins/wp-hatena/';
 
-        $this->hatena_gifname = 'append.gif';
 
-        $this->popup_jsname = 'popup.js';
 
-        $this->haneta_url = 'http://b.hatena.ne.jp/append?';
 
-        
 
-    }
 
 
55 行目~ 58行目までが WpHatena オブジェクトで扱うメンバ変数です。後編で書きました 一回だけ初期化したい変数をここで宣言しています。 具体的には、はてなの画像表示用のパスとファイル名、はてなブックマークへの URL、また head にだす JavaScript のファイル名を宣言しています。
そして、68 行目~ 72 行目までがこの変数の初期化コードです。WpHatena クラスのコンストラクタ内ですのでただ一回、
の WP 初期化時にだけ呼び出されます。また、初期化した変数はプラグインが動き続けている期間、継続で使い続けることが出来ます。
変数中、一点だけ特殊な部分があって、
-  $this->plugin_path = get_settings('siteurl');
 
 
get_settings() という関数が呼び出されているのが分かります。 これは WP の組み込みの関数の一つでブログの設定を持ってこれる関数です。 ここでは、siteurl という自分のブログの URL の設定を img タグと script タグで使うためにもらってきています。
前述、
リンク画像は自分のサーバの 「http://[サーバ名:ブログ設置ディレクトリ]/wp-content/plugins/wp-hatena/append.gif」というファイルである
の「http://[サーバ名:ブログ設置ディレクトリ]」までを “get_settings(‘siteurl’);” でもってこれるわけです。
WP の組み込み関数は沢山あるようなのですが、まだドキュメント上も DRAFT の状態のようです。 ただ一つ言えるのは、大抵のことはあるということ…。 もし何かしたくなったら同じようなことをしているプラグインを見てみるのが一番早いかもしれません。 🙂
[参考]
Function Reference < WordPress Codex
次のコードは、使う方がテーマに「<?php $wph-addHatena(); ?>」と書いたときに呼び出される関数です。手動で呼び出してもらうだけなので、この関数は hook には登録されていません。
-  function addHatena() {
 
-      
 
-      $title  = '<a';
 
-      $title .= ' href="' . $this->haneta_url . get_permalink() . '"';
 
-      $title .= ' target="_blank"';
 
-      $title .= '">';
 
-      $title .= '<img ';
 
-      $title .= ' src="' . $this->plugin_path . $this->hatena_gifname . '"';
 
-      $title .= ' alt="このエントリをはてなブックマークに追加"';
 
-      $title .= ' title="このエントリをはてなブックマークに追加"';
 
-      $title .= ' width="16" height="12"';
 
-      $title .= ' style="border: 0;margin: 0;padding: 0;vertical-align: baseline;"';
 
-      //$title .= ' onmouseover="wpHatenaPopup()"';
 
-      $title .= '>';
 
-      $title .= '</a>';
 
-      
 
-      echo $title;
 
-      
 
-    }
 
 
普通に、変数を echo で出力しているだけです。 コンストラクタで初期化したメンバ変数は、$this->変数名 という書き方をすればアクセスできます。
関数中、また WP の組み込み関数が一つ出てきています。
-  $title.='href="'.$this->haneta_url.get_permalink().'"';
 
 
の、get_permalink() 関数です。 これは、エントリの URL をそのまんま返してくれる関数です。
そのリンク先は、「http://b.hatena.ne.jp/append?」の後ろにエントリのURL をつけたものである
ということで、そのまんま上記の URL を作成しているわけです。
関係ありませんが、関数中 $title なんていう変な変数名が使っているのは、このプラグインは実は the_title の hook だったなごりです。作った当初は、自動でタイトルの横に入ればいいな~なんて考えていたのですが、冷静に考えると自由な場所に入れられたほうが便利だな、と考え今の形(使う方にテーマから呼び出してもらう)になっています。
続きまして、最後のコードをみます。
-  function addScript() {
 
-      
 
-      echo '<script type="text/javascript"';
 
-      echo ' src="'. $this->plugin_path . $this->popup_jsname . '"';
 
-      echo '>';
 
-      echo '</script>';
 
-      
 
-    }
 
 
この addScript 関数は wp_head の hook に登録されている(はずだった)ものです。これは簡単で、ただたんに <script> を書き出しているだけです。
以上、wp-hatena のソースコードの説明でした。
おっとここで、kohaku さん、chameleon さんから入電。 同じソーシャルブックマークの del.icio.us への対応要望をいただきました。(←ということにしてください(笑)
次回は、このプラグインを del.icio.us 対応に改造してみます。 そしていよいよ Masayan さんも登場しますのでおたのしみに…
あとあと、Otsukare さん、リンク頂いているのにとりとめなく長くなってごめんなさい。。
yutaka さん 言葉の説明が足りなくてごめんなさい。。 この辺は今度、PHP 単体でかいてみますね。
続く..
[続き..]
wp-hatena にみるプラグインの作成方 – 後編 –