そんなにGeekじゃないエンジニアブログ

WordPressプラグイン開発!初心者からでも始められる、開発基礎知識編

calendar

reload

WordPressプラグイン開発!初心者からでも始められる、開発基礎知識編

こんにちは。でんすけ(@notgeek_densuke)です。

突然ですが、先日プラグインをリリースしてみました。
記事内で吹き出しを作れるプラグインです。

こちらのリンクから

あるいは、WordPress の管理画面からプラグインの検索で
「speech balloon maker」と検索してみてください。
densukeが作ったプラグインが見つかるはず。


でんすけ

こんな感じにできます。


でんすけ

やったね!

ということで、今回は、WordPress のプラグイン開発ってどうやるの?という話です。

とりあえずとっかかりとして、知っておかないと始まらない知識をまとめてみました。
プラグイン作ってみたいけど、何から始めたらいいかわからん・・・
という方は、ぜひ参考にしてみてください。

スポンサーリンク

WordPressプラグインを設計するにあたって知っておくべき事前知識

そもそも、プラグインを作ろう!と思っても、
まずプラグインってどうやって動くの?
ということを知っておく必要があります。

知るべきことは色々ありますが、最低限これは知っておかないと、というものを挙げてみます。

アクションやフィルターに「フックする」ということ

WordPressは、webページを表示する際にいろんな処理を裏でゴソゴソやってます。

例えば
リクエストを受け取ってー
 ↓
ヘッダーを読み込んでー
 ↓
サイドバーを表示してー
 ↓
本文を表示してー
 ↓
などなどー

みたいな感じで、順番に処理をしているわけです。
(順番も内容も適当なので、あくまでイメージです)

WordPressでは、この「なにかの処理のタイミング」に紐づけて、
「ついでにこの処理もやっといて!」とお願いすることができます。

これを処理をフックするという呼び方をします。
処理を引っ掛ける、というイメージですね。

例えば「ヘッダー読み込み」と書かれたハンガー掛けがあって、
そこに、「JavaScriptファイルの読み込み」ハンガーをかけておきます。
すると、WordPressさんは「ヘッダー読み込み」ハンガー掛けから、全部のハンガーを持って行って、ごっそり処理してくれる。

という感じ。

プラグイン開発では、この「フック」が処理の起点になることが多いので、基本知識としておさえておくべし。

なお、アクションやフィルターにはどんなものがあるのか、どんなタイミングに「フック」できるのかは、こちらの公式サイトのページをご確認あれ。

アクションフック一覧

フィルターフック一覧

たくさんあるので把握しきれないと思いますが。。
作ってるうちに慣れていくもんだと思います。

名前の衝突問題

WordPressは、世界中の多くの開発者によってプラグインが開発されていたりします。

そこで起こるのが名前の衝突です。

例えば僕が
hello()などという簡潔な名前の関数を定義したとします。

で、全く別の人が作った、全く別のプラグインをインストールしたとして。
そのプラグインでもhello()が定義されていたりすると。

名前の重複定義として、PHPが実行エラーになります。
ブログが全然表示されない!という事態に((;゚Д゚)))

そんな事態を回避するために、WordPressで推奨されている方法として、
・クラス内で定義する
・プレフィックスを付ける
ということが挙げられています。

クラス内で定義する

関数や変数の定義をクラス内に閉じ込めることで、クラスの中だけで有効なものとなるため、名前の衝突が起こることがなくなります。

こんな感じで定義します。

if( !class_exists('densuke_class') ){
    //クラスを定義する
    class densuke_class{
        private $myparam;

        function __construct() {
        }

        function myfunction(){
        }
    }

    //定義したクラスを実行する
    $densuke_instance = new densuke_class();
}

こうすれば、$myparamとか、関数myfunction()は
densuke_classクラス内で定義されたものになるので、
その他、見ず知らずの人と名前が被っても問題になりません。

あとは、クラス名がグローバルに定義されることになるので、
クラス名の衝突さえ考慮すればよいわけです。

そこで、次の考慮ポイント。

プレフィックスを付ける

プレフィックス、日本語で接頭辞と言います。
名前の頭になにか特定の文字を付ける、ということです。

名前の衝突を防ぐには、クラスや関数、変数の名前に、誰ともかぶらないであろう名前を付ければいいわけです。
なので、例えば個人名、例えばプラグインの名前の省略形、
などを変数やクラス名の名前の頭につけてあげることで、
世の中の他の人とかぶることを防ごう、ということです。

例えば僕なら、でんすけという名前にちなんで、
「densuke_」とかを付けてみると良いかもです。
(先ほどのコード例で付けていました)

長いので「dn_」とかに省略してもいいです。

さらに、プラグインの名前の省略形、
例えば「Speech Balloon Maker」なら、その頭文字で「sbm_」とかを付け加えると、
よりかぶりにくくなるかと。

最終的に「dn_sbm_myclass」などの名前にするといいかもしれませんね。

いずれにせよ、なるべく被らなさそうな名前にする、ということです。

カンタンなWordPressプラグインを作る

では、実際に超カンタンなプラグインを作ってみましょう。
意外とすぐに作れますよ!

WordPressのインストールフォルダの
「wp-content/plugins」フォルダの中に、
プラグイン名を付けたフォルダ(「testplugin」など)
を作って、その中にphpファイル(「testplugin.php」など)を置きます。

ファイル名、フォルダ名は任意です。
phpファイルに以下のようなコメント記述があれば、プラグインとして認識してもらえます。

<?php
/*
Plugin Name: (プラグインの名前)
Plugin URI: (プラグインの説明と更新を示すページの URI)
Description: (プラグインの短い説明)
Version: (プラグインのバージョン番号。例: 1.0)
Author: (プラグイン作者の名前)
Author URI: (プラグイン作者の URI)
License: GPL2

Copyright 作成年 プラグイン作者名 (email : プラグイン作者のメールアドレス)

    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
*/
?>

上記のコメント内の日本語のところ、すべてを必要な記述に書き換えます。
基本的には英語で書くべし、なんですが、とりあえず日本語でも大丈夫。
ファイル形式はUTF-8にしましょう。

すると、インストール済みプラグインの一覧に登場します。

これを有効化すれば、自分の思った通りの処理が実現できるわけです!
夢が広がりますね。

WordPressプラグインの処理を実装する

で、ごく簡単な処理を実装してみます。
管理画面の上部に、適当な文字列を表示させる、という処理。

WordPressにデフォルトで入っている「Hello Dolly」とほぼ同じ機能ですが。

その処理がこんな感じ。

<?php
/*
Plugin Name: testplugin
Plugin URI: http://hoge.com
Description: test
Version: 1.0
Author: densuke
Author URI: http://hoge.com
License: GPL2

Copyright 2018 densuke (email : hoge@hoge.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
*/

if( !class_exists('densuke_class') ){
    class densuke_class{
        private $myparam = 'my first plugin!!';
 
        function __construct() {
	        add_action( 'admin_notices', array($this , 'myfunction') );
        }
 
        function myfunction(){
            echo '<p class="testplugin">' . $this->myparam . '</p>';
        }
    }
    $densuke_instance = new densuke_class();
}

?>

「admin_notices」というアクションに、「myfunction」関数を「フック」しているわけですね。

アクションの登録に

add_action( 'admin_notices', array($this , 'myfunction') );

という指定の仕方をしていますが、クラス内に定義した関数を指定する場合は、

array(クラスのインスタンス, 関数名文字列)

という形式で引数に渡さないといけません。
同一クラス内では、インスタンスを「$this」で表現できるので、上記のような記述になるわけです。

ということで、上記のように実装すると、管理画面でこんな表示が出てきます。

これで、WordPress管理画面にずっと「my first plugin!!」が表示されるという、とてもうっとうしいプラグインを作れました!やったね!

まとめ

ということで、WordPressプラグインの実装、基礎知識編でした。

実装したい処理を「フックする」ことで、様々なタイミングで機能を実装することができます。
名前の衝突を考慮しながら実装していきましょう。

「plugins」フォルダにphpファイルを置いて、
コメントで必要な情報(プラグイン名など)を書いておけば、
それだけでプラグインと認識してもらえるので、
あとは処理を書いていくだけです。

次回は、より具体的な実装方法を書いていこうと思います。

それではまたー。

続いての記事はこちら!

WordPressプラグイン開発!スニペットから始めるカンタン開発・処理のフック~アンインストール時の処理まで

この記事をシェアする

コメント

コメントはありません。

down コメントを残す




CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください