フォト蔵用のWordPressプラグインを作る(その1)

written by overQ

ブログを修正したついでに、フォト蔵用のプラグインを二つ作りました。

・その1: 記事にフォト蔵の写真を貼り付ける。
・その2: 表紙ページの上のところに出ているサムネイルのリンク。

どちらもごく簡単なものなので、作り方を順番に書いてみます。今度作るときに便利なように。
…というより、フォト蔵関連のWordpressプラグインが少ないので、こうやって基本を書いておけば、誰か作ってくれるかも、とひそかな企み。

プラグインの名前を好き勝手に付けよう

何はともあれ、まず、プラグインの名前とか機能を書きます。
このファイルを「tekito.php」などの名前でプラグインフォルダにアップすれば、プラグインの一覧のところに表示されます。
中身なんて、なくても大丈夫です。。

<?php

/*
Plugin Name: フォト蔵は「ふぉとぞう」なのか「ふぉとぐら」なのかプラグイン
Plugin URI: http://www.overcube.com/wordpress/
Description: フォト蔵の写真をブログに貼る。(そしてのりピーに捧ぐ)
Author: overQ
Version: 0.1
Author URI: http://www.overcube.com/wordpress/
*/

?>

楽しい名前を付けるとよいかもしれません。あとあと困ることもあります。
まだまだ、「のりピー」でいけると思います。

ショートコードという便利なもの(があることを先週知った)

「プラグインの作り方(初心者篇)」みたいなページには、
add_filter(the_content, my_first_plugin);
というフィルタがよく書いてあるのですが、ショートコードというのがあって、そっちのほうが手っ取り早い。
ショートコード API – WordPress Codex 日本語版

どんなプラグインを作ろうとしているかというと、
[photoZou number="27071804"]
という、フォト蔵の写真の番号を入れると、以下のように記事に写真が表示されるもの。

the_contentを使うと、自分でこの短いコードを定義する必要がありますが、ショートコードを使えば、それがたちまちにできてしまうまいます。

function my_photozou($atts, $content = null) {

//写真の番号は属性「number=""」で指定。
extract(shortcode_atts(array(
	"number" => ''
	), $atts));

//ここにあとで機能を書きますから。

}

add_shortcode("photoZou", "my_photozou");

これをさっきの無駄なプラグイン名の説明の下に書きます。

以上で、ショートコードの定義は完了。
[photoZou]というショートコードの属性「number=」に、写真のナンバーを書き込めば、
「function my_photozou」という機能で、写真が表示される仕組み。
その機能(関数とゆいます)をこれから作ります…ぴー(ちょっとためらいがちな、のりピー言葉)。

フォト蔵APIの利用

フォト蔵の写真を持ってくるためには、フォト蔵APIを利用します。
Webサービスではどこでもよく、この手のAPIが提供されています。
フォト蔵APIとは – 写真共有サイト「フォト蔵」

今回はとりわけシンプルな、photo_infoというのを使ってみます。

http://api.photozou.jp/rest/photo_info?photo_id=写真の番号

というので、その番号の写真の情報がいろいろ得られます。
例えば、27071804番の「八千代の巻き寿司」の写真の情報は、

http://api.photozou.jp/rest/photo_info?photo_id=27071804

XMLで書かれた情報が出てきます。
<>で区切られて、入れ子状になって、各種の情報が並びます。

PHPでXMLを扱うには、simplexml_load_fileという、マンモスうれピー機能を使います。

$req = "http://api.photozou.jp/rest/photo_info?photo_id=".$number;
$xml = simplexml_load_file ($req);

これで、属性「number=」に書いた番号が変数「$number」になって、写真の情報XMLが、扱えるようになります。
で、扱ってみますと。

return "<div class=\"photozou\"><a rel=\"shadowbox[photozous]\" href=".$xml->info->photo->original_image_url."><img alt=".$xml->info->photo->photo_title." src=".$xml->info->photo->image_url."/></a><br />".$xml->info->photo->photo_title."ピー</div>";

「->」で入れ子になった情報を指定していきます。簡単です。
XMLを見ると、<large_tag>のような、すでに全部セットしてあるのもあるのですが、それを貼るだけでは芸がないので、もうちょっと細かく指定。(さらに、いちおう「ピー」機能も付き。)

同じ要領で、もっといろんな情報や、HTMLのタグを入れたりもできますね。
(「rel=”shadowbox[photozous]“」というのは、うちのブログで使ってる、shadowbox.js用。写真をクリックすると、ぶわーと広がるやつ。shadowboxを使ってないなら不要ですが、まあこれをつけるために、このプラグインは作ったようなものだから。 )

これで完成だピー! 簡単だピー!(のりピーというより、キスケだな。。)

編集画面にボタンを付ける

せっかくなんで、投稿の編集画面にボタンを付けてみます。
これも、やり口があるんだそうです。先週知りましたが。

//編集画面にボタンを作っちゃう。
add_action('admin_print_scripts', 'my_custom_quicktags');

function my_custom_quicktags() {
	wp_enqueue_script(
		'my_custom_quicktags',
		plugin_dir_url(__FILE__) . 'my-custom-quicktags.js',
		array('quicktags')
	);
}

というのを付け加えて、このプラグインと同じフォルダに、以下のような「my-custom-quicktags.js」ファイルを作ります。

edButtons[edButtons.length] =
new edButton('ed_photozou'
,'フォト蔵'
,'[photoZou number="'
,'"]'
,''
);

すると、投稿編集の画面に、ボタンが表示されます。
この関数は便利なので、ボタンをいろいろ自作するなら、一括して別なプラグインを作ってみるのも、よいかもしれません。(そしたら、関数名も重複しないし。)

全部まとめてみると。

<?php

/*
Plugin Name: フォト蔵は「ふぉとぞう」なのか「ふぉとぐら」なのかプラグイン
Plugin URI: http://www.overcube.com/wordpress/
Description: フォト蔵の写真をブログに貼る。(そしてのりピーに捧ぐ)
Author: overQ
Version: 0.1
Author URI: http://www.overcube.com/wordpress/
*/

//ショートコードを使う。
function my_photozou($atts, $content = null) {

//写真番号は属性「number=""」で指定。
extract(shortcode_atts(array(
	"number" => ''
	), $atts));

//フォト蔵APIのXMLを利用する。
$req = "http://api.photozou.jp/rest/photo_info?photo_id=".$number;
$xml = simplexml_load_file ($req);

return "<div class=\"photozou\"><a rel=\"shadowbox[photozous]\" href=".$xml->info->photo->original_image_url."><img alt=".$xml->info->photo->photo_title." src=".$xml->info->photo->image_url."/></a><br />".$xml->info->photo->photo_title."ピー</div>";

}

add_shortcode("photoZou", "my_photozou");

//編集画面にボタンを作っちゃう。
add_action('admin_print_scripts', 'my_custom_quicktags');

function my_custom_quicktags() {
	wp_enqueue_script(
		'my_custom_quicktags',
		plugin_dir_url(__FILE__) . 'my-custom-quicktags.js',
		array('quicktags')
	);
}

?>

これくらいのプラグインだと、とくにプログラミングの知識がなくても、できてしまいそう。
ショートコードは、もっとたくさん属性をとるときにも威力を発揮できるはず。


COMMENTS

Comments are closed.