【WordPress】プラグイン開発:ショートコード追加
ショートコードって便利じゃないですか?このブログでも使っています。
そんな便利なショートコードを自分で作ってしまいましょう。
手っ取り早くショートコードを追加
PHP:ShortcodePlugin.php
<?php
/*
Plugin Name: ShortCode Plugin
Plugin URI: https://comment-out.net/
Description: ショートコード追加プラグイン
Author: Uilou
Version: 1.0
Author URI: https://comment-out.net/
*/
function callFunc() {
return "おい!鬼太郎!";
}
add_shortcode('call', 'callFunc');
HTML:使い方
<p>[call]</p>
add_shortcodeでショートコードを追加します。add_shortcodeの引数は以下の通りです。
add_shortcode(‘ショートコード名’, ‘呼び出すメソッド名’);
ショートコ-ド名:ショートコードを呼び出す時の[]の中に入る文字を設定します。
呼び出すメソッド名:ショートコードが設定された時に呼び出されるメソッド名です。
add_shortcodeは直接文字を返すわけじゃなく、メソッドを呼び出すため、上記サンプルでは決まった文字を出力しますが、現在時刻を取得するショートコードやファイルパスを返すショートコードも作成できます。
add_shortcodeではcallFuncを呼び出しているため、callFunc()で実際の処理を記述します。
私はいつもWordpressのUploadsディレクトリまでのファイルパスが長いなぁって思っていたので、パスをショートカットするショートコードを作ると便利でしょうね。
現在の時刻を取得するショートコード
PHP:現在の時刻を取得
function GetTimeFunc() {
return the_time('Y.n.j');
}
add_shortcode('time', 'GetTimeFunc');
HTML:使い方
<p>[time]</p>
使用中のテーマディレクトリのURLを取得するショートコード
PHP:使用中のテーマディレクトリのURLを取得
function ThemeUrlFunc() {
return get_stylesheet_directory_uri();
}
add_shortcode('theme-url', 'ThemeUrlFunc');
HTML:使い方
<img src="[theme-url]/images/mainvisual.jpg" />
テーマフォルダのパスを取得するメソッドはいっぱいあるのですが、Wordpressでよく親テーマ・子テーマってあるじゃないですか。
親・子関係がある場合、メインで編集するのは子テーマですから、子テーマのURLを取得したいわけですよ。
上記サンプルでは子テーマ側のURLを取得することが出来ます。
UploadsディレクトリのURLを取得するショートコード
PHP:UploadsディレクトリのURLを取得
function UploadsUrlFunc() {
return wp_upload_dir();
}
add_shortcode('uploads-url', 'UploadsUrlFunc');
HTML:使い方
<img src="[uploads-url]/2020/7/7/mainvisual.jpg" />
ショートコード追加プラグインをクラス化
PHP:ShortcodePlugin.php
<?php
/*
Plugin Name: ShortCode Plugin
Plugin URI: https://comment-out.net/
Description: ショートコード追加プラグイン
Author: Uilou
Version: 1.0
Author URI: https://comment-out.net/
*/
class ShortcodePlugin {
// インスタンス
static $instance = null;
// コンストラクター
private function __construct() {
add_shortcode('call', array($this, 'callFunc'));
}
public function callFunc() {
return "おい!鬼太郎!";
}
// インスタンス取得メソッド
public function getInst() {
if (self::$instance === null) {
self::$instance = new ShortcodePlugin();
}
return self::$instance;
}
}
$shortcodePlugin = ShortcodePlugin::getInst();
上記をクラス化しました。使い方は同じです。
変更点として、add_shortcodeの第二引数がarrayになり、1つ目に$thisが入っています。
これはクラス化した際の”お決まり”であり、フックを設定する場合も同様です。
もしお困りごとがありましたら、お問い合わせフォームよりご相談ください。