CommentOut

【WordPress】プラグイン開発:ショートコード追加 【WordPress】プラグイン開発:ショートコード追加

【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が入っています。
これはクラス化した際の”お決まり”であり、フックを設定する場合も同様です。

宣伝
WordPressサイトのテンプレート編集やトラブル対応、バグ修正、簡単なJavascriptの作成(カルーセルやバリデーション等)など、小規模なスポット対応を受け付けております。
もしお困りごとがありましたら、お問い合わせフォームよりご相談ください。

この記事を書いた人

uilou

uilou

プログラマー

基本的に、自分自身の備忘録のつもりでブログを書いています。 自分と同じ所で詰まった人の助けになれば良いかなと思います。 システムのリファクタリングを得意としており、バックエンド、フロントエンド、アプリケーション、SQLなど幅広い知識と経験があります。 広いだけでなく、知識をもっと深堀りしていきたいですね。