WordPressカスタム〜プラグインの作成〜

WordPressと連携してアンケート調査ができるプラグインを作成しようと考えています。

元々は、WordPressを使用して何かしらのWebサービスを作成したいと思っていますが、アイディアが浮かばないので、自分の欲しい機能を作成しようと考えました。

仕様などに関してはこちらのページに記載しています。

プラグインの作成方法

早速プラグイン作成の方法を調査します。そして、以下の部分に関して「できる」「できない」を判断しようと考えています。参考にするサイトはWordPress Codex日本語版です。

手順
  1. プラグインの名前をつける
  2. プラグインのファイル(PHP)を作成する
  3. 説明書の作成
  4. 紹介ページの作成

大まかには上のような手順でやるようです。

1.プラグインの名前

今回は「アンケート調査のためのプラグイン」なので「アンケートプラグイン?」とか思ったのですが、1つのアンケートしか作れないのでは弱いのでちょと考えます。。。
アンケートの集計結果はDBの1レコードで済むので、アンケートの種類=1レコードとなるように作成する方向で考えたいと思ったら、好きなだけアンケートを作成できる方が現実的だ、という結論に至りました。なので「CustomQuestionary」にしようと思います。

2.プラグインのファイル作成

シンプルに開発の行程です。ここが今回の記事のメイン部分になります。

プラグインのヘッダー

参考サイトによると下のようなフォーマットで作成するようです。

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

そして、ライセンスに関しては、WordPressが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
*/

これらのコードはindex.phpというファイルに作成しました。プラグイン名/index.php

そのほか

コーディング規約は軽く目を通しておいた方が良さそうです。
国際化に関して、プラグインを広く配布するのであれば、国際化対応をした方が良いです、しかし自分のものはそこまで考えていないので「売れ行きがよければ。。。」(ダウンロード数が多ければ)ということにします。

実装に関して

この部分はスライドでの説明があったのでそちらを参考にします。

実装手順

  1. wp-content/pluginにPHPファイルを置く

これだけのようです、細かい実装は「どんなプラグインを作成するか?」によるのでまずは、「WordPressプラグイン版・ハローワールド」をやってみます。

プラグイン実装

下のようにプラグインファイル(フォルダ)を配置します。

そして、ローカルサーバー(MAMP)を起動します。ローカルサーバーに関してはこちらのページでセットアップしています。
そして、ローカルサーバーのダッシュボードを開いてみると下のように表示されています。

しかし、ハローワールドが確認できません。

これは「いつ呼ばれるの?」に対する疑問に答える必要がありました。つまり、アクションフックの一覧からどのタイミングで呼ばれるか?を決定してそれに対応するように実装する必要があるということでした。
今回は「ハローワールド」なので管理メニューを表示する時に呼ばれるようにしようと思いますので以下のコードを追記します。
add_action('admin_menu');
そして実行!

エラーになりました。意味がわからないのででバックできるようにします。以下のコードをさらに追記。。。参考サイトはこちら
define( 'WP_DEBUG', true );
そして、コードの部分を以下のように関数に変更しました。

function helloCustomQuestionary() {
    echo "Hello WordPress Plugin!";
}

すると下のように、エラーが出ました。

Fatal error: Uncaught ArgumentCountError: Too few arguments to function add_action(), 1 passed in /WP_DEV/wp/wp-content/plugins/CustomQuestionary/index.php on line 34 and at least 2 expected in /WP_DEV/wp/wp-includes/plugin.php:403 Stack trace: #0 /WP_DEV/wp/wp-content/plugins/CustomQuestionary/index.php(34): add_action('admin_menu') #1 /WPDEV/wp/wp-admin/includes/plugin.php(2223): include('/Users/takk/WP...') #2 /WP_DEV/wp/wp-admin/plugins.php(175): plugin_sandbox_scrape('CustomQuestiona...') #3 {main} thrown in /WP_DEV/wp/wp-includes/plugin.php on line 403

つまりはadd_actionの関数が間違っているということです。こちらの関数リファレンスで解決します。そして、追記したコードを以下のように修正します。
// 管理メニューを表示した時に
add_action('admin_menu', 'helloCustomQuestionary');

これでエラーは出なくなりましたが、画面の確認がまだできません。。。

調べてみた結果以下のようにコードを作ってやるとダッシュボードに追加されました。

// 表示する内容
function helloCustomQuestionary() {
    echo "
"; } // ダッシュボードに追加するための関数 function addCustomQuestionary() { // ダッシュボードにこの表示が出るように追加する //wp_add_dashboard_widget( 'my_dashboard_widget', 'Featured Dashboard Page', 'helloCustomQuestionary' ); add_menu_page( 'Test Plugin', 'CustomQuestionary', 'manage_options' , 'test-plugin' , 'helloCustomQuestionary' ); } // 管理メニューを表示した時に //add_action('wp_dashboard_setup', 'addCustomQuestionary'); add_action('admin_menu', 'addCustomQuestionary' ); do_action( 'addCustomQuestionary' );

まとめ

結局のところ、プラグインとして機能させるには

  1. プラグインファイル(PHP)を作成する。今回はフォルダの下に配置したのでプラグイン名/index.phpを作成
  2. ダッシュボードを開いた時のフック(add_action())を追加する
  3. ダッシュボードのメニューに追加する(add_menu_page())
  4. メニューをクリックした時に表示する画面を出力するPHP処理を実装

以上のような処理を実装してやればOK!

お疲れ様でした。

でわでわ。。。