WordPressのプラグイン作成(作成手順編)
2014年3月31日1週間ほど前に、急にWordpressのプラグインが作りたくなって、2日間ほど気合を入れて実装した。作成手順編では、プラグイン作成の初歩から、Wordpress.orgへの申請までの手順を説明する。 プラグイン作成のお作法を調べるのに少々時間がかかる ソースの実装自体は、ただのPHPなのでそれほど難しくはない 多言語対応するための情報収集&実装 にはちょっと時間が必要 申請のために必要なWordpress プラグイン書式に則ったReadme.txtを作るのがだるい WordPress.orgのユーザー登録をする プラグインの申請を出す。 申請後、担当者(Wordpress.orgの中の人(外人))と英語でやりとりするのは、意外にためなる 申請通過 現時点での雑感 これらを順を追って大雑把にまとめておく。 プラグイン作成のお作法を調べるのに少々時間がかかる プラグインがどういう仕組みで動いているか、普通の人は知るはずもないので、これを調べなきゃなりません。ぐぐってみましたが、素晴らしくピンポイントで情報を提供してくれているようなサイトはなく、いくつかのサイトの情報を閲覧する。加えて、既に公開されている簡単そうなプラグインのソースを追っかけてみる。で、なんとか理解できたという感じです。 詳細に書くのはちょっと面倒なので、ざっくりとだけ手順を記載しておきます。 プラグインの名前を決める 私が公開予定のプラグイン名が text-cache-controller なので、その過程で話を進めます。 プラグインの設定画面を作る WordPressのルートフォルダ/wp-content/plugins/ フォルダ内に プラグイン名でフォルダを作り、その中に プラグイン名.php (text-cache-controller.php) を作る。 プラグイン設定画面のCSSを作る プラグイン名.css (text-cache-controller.css) を作る。 プラグイン名.php内にクラスを定義し、必須となるfunctionを定義 ◇クラス名には特に決まりはないと思います。 ◇クラスのコンストラクタで、Wordpressのダッシュボードの左側に表示されるメニューに追加するためのfunctionを定義する。 ◇add_actionというのはWP側で定義されている関数みたいなので、こいつを第一引数 “admin_menu” で呼び出して、第二引数に配列で、$thisとメニュー定義の詳細を決定するfunctionを渡してやる。 ◇指定したfunction内に これまたWP側で定義された add_submenu_pageを呼び出してやる。 第一引数の “options-general.php” は メニューのどの位置に自分のプラグインの設定リンクを追加するかという定義で、後ろから2つ目の配列引数で、$thisと自分のプラグインの設定画面のHTMLを描画するためのfunctionを設定してやる。 [php] class TextCacheControllerAdmin { function __construct() { add_action(“admin_menu”, array($this, “add_pages”)); } function add_pages() { add_submenu_page(“options-general.php”,”Text Cache Controller Settings” ,”Text Cache Controller”, “level_8″, __FILE__, array($this,”showOptions”), “”, 26); } function showOptions() { ここに、ガリガリと自分のプラグインの設定画面のHTML出力を記述します。 } } $tccadmin = new TextCacheControllerAdmin(); [/php] プラグインが利用するCSSとJSを読み込むための定義を追加 これは、上記のクラス外に以下のような感じで、追加してあげればOKです。 ここでも WP側で用意されている function add_acctionを利用します。 CSSを読み込むためのfunctionとJSを読み込むためのfunctionを用意し、add_acctionの引数に与えればOK。 add_action(‘admin_enqueue_scripts’, ‘適当なfunction名’); [php] function tcc_styles() { wp_register_style( ‘custom_wp_admin_css’, plugins_url(‘text-cache-controller/text-cache-controller.css’)); wp_enqueue_style( ‘custom_wp_admin_css’ ); } add_action(‘admin_enqueue_scripts’, ‘tcc_styles’); function tcc_scripts() { wp_enqueue_script( ‘jquery’ ); } add_action(‘wp_enqueue_scripts’,’tcc_scripts’); [/php] プラグイン設定画面 出力用functionをひたすら実装 自分のプラグインの設定画面に必要なHTMLをひたすら実装します。 このfunction内で、設定値を表示する処理、設定値を保存する処理、その他もろもろの処理をごちゃごちゃ書いていけばOKです。 何点かポイント ・自分のプラグインの設定画面が呼ばれているのかどうか判定 [php] wp_nonce_field(“tcc_options”); と if ( isset($_POST[“tcc_options”])) { check_admin_referer(“tcc_options”); [/php] を埋めておけば OKです。 「tcc_options」という部分はご自身で好きなように決めればOKです。 [php] <?php function showOptions() { if ( isset($_POST[“tcc_options”])) { check_admin_referer(“tcc_options”); ?> <?php wp_nonce_field(“tcc_options”); //WordpressのDBから設定値を取得したい場合 $opt_isdebug = get_option(“tcc_isdebug”); //WordpressのDBへ設定値を保存したい場合 update_option(“tcc_isdebug”, $isdebug); ?> xxxxx yyyyy zzzz <?php } ?> [/php] WordPressの情報を取得するには MysqlのWordpressのDB内の「wp_options」テーブルにWordpressの設定値は入っています。 この中の値を見て、自分が欲しい情報はどれかなと適当に考えてください。 例)サイトのURL取得 [php] $url = get_option(“siteurl”); [/php] 投稿(Post)一覧を取得 [php] $args = array( ‘numberposts’ => 20, ‘offset’ => 0); $recent_posts = wp_get_recent_posts($args); foreach($recent_posts as $post){ echo $post[“ID”]; echo get_permalink($post[“ID”]) ; echo $post[“post_title”] ; } [/php] カテゴリー一覧を取得 [php] $categories = get_categories( ‘get=all’ ); foreach($categories as $cat){ echo $cat->term_id ; echo $cat->name ; echo get_category_link( $cat->term_id ); } [/php] Tag一覧を取得 [php] $tags = get_tags( ‘get=all’ ); foreach($tags as $tag){ echo $tag->term_id ; echo $tag->name ; echo get_tag_link( $tag->term_id ); } [/php] ソースの実装自体は、ただのPHPなのでそれほど難しくはない プラグインのお作法さえぼんやりわかれば、あとはただのPHPですので、特に深く考える必要はありません。自分の好きなように書きゃいいと思います。 多言語対応するための情報収集&実装 にはちょっと時間が必要 基本は英語版で作成し、phpソース内に埋め込んだ 英語のリテラル部分を実行時に他の言語ファイルに定義された内容に置き換えるということになります。 多言語対応のためのソース調整 例えば phpソース内に以下のようなソースがあり、これを多言語化する場合は [php] <?php echo “This is a pen”; ?> [/php] 以下のように書き換える。 [php] <?php _e(“This is a pen”, self::DOMAIN); ?> [/php] で、self::DOMAIN という定数は定義されていないので、クラスに定義し、コンストラクタを、以下のような感じで調整してやる。 [php] class TextCacheControllerAdmin { const DOMAIN = “text-cache-controller”; function __construct() { load_plugin_textdomain(self::DOMAIN, false, basename( dirname( __FILE__ ) ).’/languages’ ); add_action(“admin_menu”, array($this, “add_pages”)); } [/php] 言語ファイル作成 プラグインフォルダ内に languages というフォルダを作り、プラグイン名-ja.poファイルを作成。 テキストエディタでファイルを開き、その中に以下のような定型文を埋め込む。 [diff] # Copyright (C) 2014 WordPress # This…
Leave a comment