lesson-scheduler

プラグインを作ろう! ~準備編~

2013.07.27(土) WordPress, プラグイン
このエントリーをはてなブックマークに追加

このたび、めでたくWordPress用練習出欠管理プラグイン「LessonScheduler」をリリースしました!どんなものかというのは、こちらのページを参照してください。公式ページにも登録されていますので、ダウンロードはそちらからお願いします。

そろそろ一回作っておくかという感じで、いろいろ調べつつ、結構苦労して作ったので、これから何回かに分けて、作り方を紹介していこうかと思います。これから作ろうかと考えている人の助けになれば幸いです。


STEP1 まずは名前を決めよう

本当はその前になにを作るかを考えるわけですが、ボクの場合は自分が管理している吹奏楽団のHPで練習の出欠管理していたので、それをプラグインにすると決めていました。というのも、たまにサーチワードで出欠管理のプラグインで引っかかってくるので、ニーズがないわけではないなと思ったからです。せっかくなら使ってもらいたいですからね。

で、名前ですが、最初は練習だけでなく、イベント登録としても使うかもと思い、Eventという単語も入れようかと思いましたが、EventCalenderなど、有名どころのプラグイン含め、Event~というのは結構あるので、単純に「LessonScheduler」としたわけですが、そこで気になるのが他に同じ名称のプラグインがないかどうか?

それを調べるには公式のプラグインページで検索するのが一番です。で、サーチしたら同じ名称はなかったので、すぐ決めました。その後も作りつつたまに見てましたが、出てこなかったのでよかったです。ちなみに、今「lesson」サーチすると一番上に来ました、わーい。

 

STEP2 空のプラグインをつくろう

さて、名前が決まればもう早速プラグイン作りに取り掛かります。プラグインを利用している人はわかると思いますが、基本的にプラグインは/wp-content/plugins/ディレクトリの下に、プラグイン名称のフォルダを作成すること、その中に、プラグイン用のソースファイル(.php)を置くところから始まります。このソースのファイル名は決まりがあまりなさそうですが、プラグインと同じ名称にしておくのが無難です。

\wp-content\plugins\lesson-scheduler
┗lesson_scheduler.php

そのソースファイルの先頭には、必ず以下の形式のコメントを入れる必要があります。これにより、WordPress本体は、このファイルはプラグインだと認識します。

<?php
/*
Plugin Name: Lesson Scheduler
Plugin URI: http://wordpress.org/plugins/lesson-scheduler/
Description: Just another lesson schedule manegement plugin. Simple UI and look.
Author: Teruo Morimoto
Author URI: http://stepxstep.net/
Version: 1.0.0
*/

/*  Copyright 2013 Teruo Mormoto (email : xxxxxxx at gmail.com)

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 2, as
published by the Free Software Foundation.

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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/
?>

コメント内容としては、以下のような感じです。

 

項目 内容
Plugin Name: プラグインの名称。WordPress内で認識される名称で、管理画面に出てくるのもこの名称。
Plugin URI: プラグインの説明用URL。管理画面の「プラグインのサイトを表示」にリンクされます。
Description: プラグインの説明。管理画面にでてくる説明です。
Author: 作成者名です。こちらも管理画面に表示されます。
Author URI: 作成者のサイトです。管理画面に表示される作成者にリンクされます。
Version: バージョンです。公式にリリースするつもりなら、メジャー、マイナー、リビジョンくらいはつけて、数字のみ。アルファベットなどは避けましょう。

下に長々と英文で記載しているのは、このソフトウェアのライセンスはGPL2ですよって内容です。WordPress自体がGPL2なので、その中のプラグインは、基本的にはGPL2で提供するのが無難です。GPL2がなにかっていうと、、、このあたり見ていただければわかるかと思います。



さて、これで準備が整いました。このファイルをフォルダ毎サーバーにアップすれば、もうWordPressはそれをプラグインとして認識します。そして、なんとこれだけで有効化も可能です!
まあ、中身がないので、動作は何一つ変わりないですがね。この空のソースをもとに、機能を実装していくことになります。

STEP3 設定画面をつくろう

大抵のプラグインには、設定画面があります。そのプラグインの動作を設定したり、必要事項を登録したり、用途はさまざまです。まずは、その画面から作成しましょう。

	// 管理メニューに追加するフック
	add_action('admin_menu', 'lesson_scheduler_add_menu');

	// 上のフックに対するaction関数
	function lesson_scheduler_add_menu() {
	    // 設定メニュー下にサブメニューを追加:
	    add_submenu_page('options-general.php','Lesson Scheduler', 'Lesson Scheduler', 8, __FILE__, 'lesson_scheduler_option_page' );
	}



アクションフックにについては、各所で説明されていますが、簡単に言えば、WordPress本体の処理に割り込めるようになるわけです。で、このフックは管理画面メニューの基本構造が配置された後に実行されるので、基本構造が表示された後に、lesson_scheduler_add_menu関数が呼び出され、そこからadd_sub_menu_page関数が呼び出されます。この関数が、実際に管理画面に設定メニューを追加してくれます。内容は以下の通り。

引数 設定内容
options-general.php 親メニューのスラッグ。この指定の場合は「設定」メニューに追加されます。その他、plugins.phpは「プラグイン」、users.phpは「ユーザー」など、いくつかありますので、プラグインの特性で選びましょう。また、「__FILE__」とした場合は、トップレベルメニューへの追加となり、「設定」などの並びに、プラグイン用のメニューが設定されます。
Lesson Scheduler メニューがクリックされたときに表示されるhtmlページのタイトルです。プラグイン名称が妥当でしょう。
Lesson Scheduler 表示されるメニュー名称です。プラグイン名称が妥当でしょう。
8 このメニューページを閲覧・使用するために最低限必要なユーザーレベルまたはユーザーの種類と権限 。0~10で指定し、10はすべての権限を持つ人となります。詳しくはこちらへ。で、なぜ8か?っていうと、大抵のサンプルが8にしてるからです。こういうところでは冒険しないこと。
__FILE__ メニューをクリックした際に表示されるページのファイル。大抵はadd_sub_menu_pageを実行しているファイル自身なので、「__FILE__」と記載します。
lesson_scheduler_option_page メニューをクリックした際に表示される関数名称です。



これで、設定メニューを追加することができました。そして次は、設定メニューの動作を作成します。その動作は、上記関数の最後の引数に渡した関数内に記載します。大まかな内容は以下の通りです。

	function lesson_scheduler_option_page() {
?>
<div class="wrap">
	<h2>lesson scheduler</h2>

	<form method="post" action="options.php">
	<?php wp_nonce_field('update-options'); ?>

	<!--練習場所の設定画面-->
	<table class="form-table" >
		<th scope="row"><?php _e('set lesson place','lesson-scheduler'); ?></th>
		<?php for( $i=1; $i<=10; $i++ ){ ?>
			<tr><td><input type="text" name="lesson_scheduler_place_<?php echo $i; ?>" value="<?php echo get_option('lesson_scheduler_place_'.$i); ?>" /></td></tr>
		<?php } ?>
	</span>
	</table>

         //  省略

	<input type="hidden" name="action" value="update" />
	<input type="hidden" name="page_options" value="<?php get_alloption();?>"/>

	<p class="submit">
	<input type="submit" class="button-primary" value="<?php _e('Save Changes','lesson-scheduler'); ?>" />
	</p>

	</form>
</div>
<?php } ?>


まず、設定メニューには必ずテキストボックスや、チェックボックスなどのコントロールを使用しますので、formタグが必要になります。codexを見ると、以下のコードを使うように記載されていますので、そのまま利用します。

	<form method="post" action="options.php">



その下にある、以下のコードですが、

	<?php wp_nonce_field('update-options'); ?>



この設定メニューでの値を、2つのhiddenフィールド、action、page_optionsの値に設定することで、自動的にデータベース登録してくれる関数のようですので、必ず利用しましょう。自分で更新するよりはるかに楽ちんです。


設定メニューのコントロールは、通常のhtmlと同じですが、valueのところに、以下のように記載ます。

 value="<?php echo get_option('lesson_scheduler_place_'.$i); ?>"



これは、get_optionに、そのコントロールの名称を渡すことで、前回設定値を取得しています。設定メニューにて設定した値は、すべてget_optionにて取得して処理に値を利用できます。


設定値を保存する処理ですが、2つのhiddenフィールドと、submitで実装し、formも閉じます。

	<input type="hidden" name="action" value="update" />
	<input type="hidden" name="page_options" value="<?php get_alloption();?>"/>

	<p class="submit">
	<input type="submit" class="button-primary" value="<?php _e('Save Changes','lesson-scheduler'); ?>" />
	</p>

	</form>



hiddenのactionの値はupdate固定です。page_optionsには、更新対象のコントロール名称をすべて渡します。ここでは、数が多かったので、get_alloptionという関数で渡していますが、中身はコントロール名称をカンマ区切りでつなげているだけです。


これで、プラグイン独自の値を持つことができましたので、各処理に利用して、挙動を分けたり、いろいろ可能となります。


さて、準備としてはこれくらいでしょうか?次回はプラグインの中身について、構築する際の注意点なんか書いてみようかと思いますので、こうご期待!

“プラグインを作ろう! ~準備編~” への5件のコメント

  1. 織田隆士 より:

    「lesson scheduler」を使用させて頂いております。
    「WordPress Slider Plugin」というプラグインと併用いたしますと、WordPress Slider Pluginが作動しなくなりました。プラグインなので当然の様に起こりうる結果だと思うのですが、なんとか次期バージョンアップにて改善して頂く事は可能でしょうか?

    • teru03 より:

      お使いいただきありがとうございます。
      SliderPluginですか、使ったことありませんが試してみます。
      時間かかるかもしれませんが、対応できればしてみますので。

  2. teru03 より:

    一応、対応してみました。
    おそらく、併用するとSliderPluginの「+AddSlide」ボタンがうまく動かなかったのかと思いますが、そこは回避できたんじゃないかと思います。
    違ってたらすいません。

  3. 新井幸宏 より:

    lessen scedulerは手軽に使用できそうで魅力的なのですが、当方は「練習」ではなく「定例会」や「教室」を開催しているので、「練習場所」の表記を「開催場所」に変更することは可能でしょうか?

    宜しくお願いいたします。

    • teru03 より:

      新井さん

      こんばんは。
      項目名称などは、以下のファイルに記載されている内容を編集すれば書き換えることは可能です。

      lesson-scheduler\languages\lesson-scheduler-ja.po

      ただ、このファイルを書き換えるだけでなく、同フォルダにある.moというファイルを作成する必要があります。
      それは、以下のページで説明されてる、poEditというツールで作成できますので、それでお試しください。

      https://ideasilo.wordpress.com/2006/08/14/edit-language-files-with-poedit/

コメントをどうぞ