Exec-PHP愛好家向けショートコードプラグインの作り方

僕もExec-PHPネタに便乗してみました。笑

Exec-PHP愛好家さんの声をブログ等でみてみると、便利だからって声がちらほらあって、実はそこにかなり違和感を感じるんですよね。

メンテナンス性とかも考えると、ぜんぜん便利じゃない。。。

そんなわけで、Exec-PHPが便利に感じてる人は、ショートコードをマスターするとセキュリティとかメンテナンス性とか改善されるので、ぜひ挑戦しましょう。

ショートコードプラグイン作成の手順

大体の手順は以下のような感じ。

実際には1から3までは頭のなかですることなので、大した手順ではないです。Exec-PHPから移行するなら10分ぐらいかな???

  1. プラグインの名前を決める
  2. プラグインのファイル名
  3. ショートコードの名前を決める
  4. プラグインのファイルを作る
  5. 実際にコーディング
  6. 作成したファイルを .zip で圧縮して本番環境にアップロード

この記事で紹介する方法は、Exec-PHP の人がさっと乗り換えられるように、WordPressプラグインのお作法を多少省略してます。

この記事で作ったサンプルはここからダウンロード出来ます。

プラグインの名前を決める

プラグインの名前は、アルファベットで適当に。

ただし既存のプラグインと名前がかぶらないように、公式ディレクトリやGoogleであらかじめ検索してみましょう。

名前がかぶると結果的に既存のプラグインの偽物になっちゃうので、ブログ等で公開した時にいろいろと迷惑をかける事になります。

今回の例では、My Shortcode としてます。

プラグインのファイル名を決める

プラグインのファイル名は半角英数の小文字とハイフォンで。

アンダースコアなどのハイフォン以外の記号は使用出来ません。

(動作はしますが、将来公式ディレクトリに登録する際に名前を変えられちゃいます。。。)

たとえばプラグインの名前が My Shortcodeなら、my-shortcode のように単語と単語をハイフォンでつなぐのが一番理想的だと思います。

今回の例では、wp-content/plugins/my-shortcode/my-shortcode.php がプラグインのファイル名となります。

ちなみにこのディレクトリ名が公式ディレクトリ上のプラグインと同じだと上書きされちゃうことがあります。

なのでプラグイン名と同じく気をつけましょう!!!

ショートコードの名前を決める

[my_shortcode] のmy_shortcodeに該当する部分を決めましょう。

これも他となるべく被らないように注意を。

使う文字は、半角英数とアンダースコアが無難だと思います。

ショートコードの名前は、プラグイン名やファイル名と一致する必要はありません。

僕のプラグイン、Simple Map は確信犯で [map] っていう短かい名前にしてますが、こういうのはトラブルの原因になるかも。笑

プラグインのファイルを作る

ここから実際にプラグインのファイルを作りましょう。

WordPressの wp-content/plugins 以下に移動して、先ほど決めたプラグインのファイル名と同じ名前のディレクトリを作ります。

wp-content/plugins/my-shortcode

ディレクトリを作ったら、そのディレクトリの中に、phpファイルを設置してください。

wp-content/plugins/my-shortcode/my-shortcode.php

次に作ったファイルを開いて、WordPressにプラグインとして認識してもらうための専用のコメントを書きます。

<?php
/*
Plugin Name: My Shortcode
*/

公式ディレクトリに登録する際には他にもいろいろ書かないといけませんが、自分が使うだけなら、たったこれだけで動作します。

ここまでできたら、WordPressの管理画面にあるプラグインのページに移動してみましょう。

以下のように表示されてたらオッケー。

my-shortcode

ここからコーディングに入るので、有効化しちゃってください。

実際にコーディング

では、さっそくショートコードを。

以下はもっともシンプルなパターンのやつ。

<?php
/*
Plugin Name: My Shortcode
*/

add_shortcode('my_shortcode', 'my_shortcode_func');

function my_shortcode_func() {

    return '<p>わお!ショートコードって簡単じゃん!</p>'; 
}

以上が完了したら、投稿画面を開いて、以下のように入力してみましょう。

Add_New_Post_‹_WordPress_—_WordPress

以上で、サイト上を確認すると「わお!ショートコードって簡単じゃん!」ってのが表示されてると思います。

Exec-PHP を使ってる人は、既存のソースのecho とかprint とかしてる部分を変数に放り込んで、returnするだけ。

ショートコードは引数も受け取ることができます。

<?php
/*
Plugin Name: My Shortcode
*/

add_shortcode('my_shortcode', 'my_shortcode_func');

function my_shortcode_func($atts) {

    extract( shortcode_atts( array(
        'foo' => 'ショートコード',
    ), $atts ) );

    return '<p>わお!'.esc_html($foo).'って簡単じゃん!</p>'; 
}

この場合は、エディターで以下のように入力します。

[my_shortcode foo="WordPress"]

出力は以下のような感じですね。

わお!WordPressって簡単じゃん!

作成したファイルを .zip で圧縮して本番環境にアップロード

最後にプラグインをパッケージ化して本番環境にアップします。

パッケージ化といってもやることは簡単で、my-shortcode ディレクトリを zip 圧縮するだけです。

あとは、zip 圧縮したファイルをプラグインの画面から新規登録して有効化するだけ。

add-plugin

ショートコードの再利用について

「Exec-PHPのほうが簡単だからなー…」って声をちらほら見かけますけど、WordPressのエディター内にコードを書くよりも、好きなエディターでコードを書けるんだから、こっちのほうがいろいろと便利に決まってますよね。

github とかに置いとけば再利用も簡単だし。

僕はだいたい以下のような感じで再利用してます。

  • 全部のクライアントに適用するショートコード集みたいなプラグインを作成して、そのなかに複数のショートコードを放り込む。(実際には使わないことも多い。)
  • バグ修正は git で管理して、秘密のコマンド(笑)でまとめて pull してアップデート
  • デザイン部分はテーマのCSSで適当に。
  • 細かい機能はショートコードの引数とかオレオレフィルターフックで吸収
  • 改善してくうちに高機能化しちゃったショートコードとか、汎用性が高そうなものは公式ディレクトリに登録。

公式ディレクトリに登録するのはやっぱ自動アップデートが便利ですから。

メンテしやすい環境にするとわかりますが、1年以上たってからバグに気がつくことって頻繁にありますからね。Exec-PHPつかってるとその辺がわかりにくいので、平和かもですけどw

Exec-PHPについて

Exec-PHPプラグインは eval() って関数を使ってエディターで入力されたPHPを実行するんですけど、ほれ、PHPのマニュアルにも「非常に危険」と。

PHP__eval_-_Manual

ショートコードがあるから「どうしても使わざるを得なくなった」ってわけではないはず。

さらに。

WordPress_›_Exec-PHP_«_WordPress_Plugins

このプラグインは2009年から4年以上メンテされてないんです。

これはたぶんWordPressにショートコードが実装されちゃったから作者さん本人がショートコードを使うようになっちゃったからだと思うんですよね。笑

参考

ショートコードに関するさらに詳しいことはCodexで。
Shortcode API « WordPress Codex