
ワードプレスで自作したショートコードをプラグイン化してみましょう。
プラグインの基本の形が分かれば、貼りつけるだけ、
みたいな感じで簡単にできると思います。
ここでは最初にショートコード作成法の基本をサンプルを使って見つつ、続いて実際にそのショートコードをプラグイン化してみます。
ショートコードの事は分かってる!という場合には、
目次の「2. プラグイン化する」から直接見てみてください。
※)ワードプレスのプラグイン作成の基本は以下で解説してます。
【WordPress】プラグイン作成法を分かりやすく解説!
ショートコード作成の基本
まずはショートコードの基本の確認から。
ワードプレスでショートコードを自作するには、
以下の形式で記述するだけになりますね。
function 関数名A( $属性 ){
実行させたいコードを記述
}
add_shortcode( 'ショートコード名', '関数名A' );- 【関数名】:関数名は他と被らないように付ける
- 【$属性】:ショートコードの引数が入る連想配列。
ショートコードで指定する引数がこの$属性に連想配列で引き渡される
(引数がない場合には省略可) - 【ショートコード名】:ショートコードで指定する文字列(名前)
参照)ショートコードAPI(ワードプレス公式)
ここを押さえた上で、実際にプラグイン化してみます。
ショートコードの基本を更に具体的に確認する場合には、
以下のサンプルを見てみてください。
【Sample1】引数がない例
単純に”本日を「年月日」の形式で表示するだけ”、
といった【引数なしのショートコード】を考えてみる。
【想定するショートコード】
[show_today]- 1)ショートコード名:show_today とした
- 2)引数:なし
- 3)ショートコードの結果:「xx年xx月xx日」の形式で本日を表示する
このショートコードを実現するには、例えば以下のようなコードになりますね。
【ショートコードのコード例】
function jin_shortcode_show_today( ){
return date( 'Y年m月d日' );
}
add_shortcode( 'show_today' , 'jin_shortcode_show_today' );- 1行目:関数名を「jin_shortcode_show_today」とした(引数無し)
- 2行目:xxxx年xx月xx日の形式で本日を返す(表示させる)
- 3行目:ショートコード名(show_today)と、
それに対して実行する関数名(jin_shortcode_show_today)を書く
(メモ)命名規則(関数名や変数名など)
- 変数、アクション、関数の名前にはアルファベット小文字を使う。
- camelCase は使わない
(複数の単語で命名する場合、単語の区切りを明確にするために単語の先頭を大文字する、という形は使わない) - 単語を区切る場合にはアンダースコア( _ )を使う
- 不必要に変数名を省略しない(分かりやすくするため)
参照)
・ワードプレス:PHPコーディング規約(ワードプレス公式)
(⇒「命名規則」より)
関連)
・日付と時刻の書式(ワードプレス公式)
【Sample2】引数が1つの例
引数が1つと言えば、芸能人をよく扱うトレンド記事や、
そうでなくても人物のプロフィールを書く場合に良くある「生年月日からの年齢表示」がありますね。
1つの引数(生年月日)を与えることで、
現在の年齢を計算して表示するショートコードを考えてみる。
(これを入れておくと、年が変わった時の記事更新がいらなくて楽!笑)
【想定するショートコード】
[cal_age ymd="20010102"]- 1)ショートコード名:cal_age とする
- 2)引数:ymd(の1つ)のみとする
- 3)ymd:生年月日の形式を、年(4ケタの西暦)+月(2桁)+日(2桁)とする
- 4)ショートコードの結果:「xx歳」と「歳」を付けて返す
これを実際のショートコードとして書いてみると
たとえば以下のようになりますね。
【ショートコードのコード例】
function jin_shortcode_cal_age( $args ){
$a = shortcode_atts( array(
'ymd' => 'none',
), $args);
$birtydate = $a[ 'ymd' ];
if( 'none' == $birtydate ){
$age = '不明';
}
else{
$today = date( 'Ymd' );
$age = floor( ( $today - $birtydate ) / 10000) . '歳' ;
}
return $age;
}
add_shortcode( 'cal_age', 'jin_shortcode_cal_age' );- 1行目:
ショートコードで実行される関数名を
「jin_shortcode_cal_age」として、
引数(ymd)を配列「$attr」で受ける - 2~5行目:
配列「$attr」から ショートコードで指定された引数 ymd の値を取り出す。
shortcode_atts() を使って、引数が指定されてなかったり、想定と異なる引数の場合には除外して初期値を使う、ということをする - 8行目:
初期値の場合には、不明、とする - 11行目:
本日を、ymdと同じ形式で取得(西暦4桁+月2桁+日2桁)。 - 12行目:
本日から生年月日を引いて年齢を計(端数はfoorを使って切り捨て) - 15行目:結果を返す
- 17行目:ショートコード名( cal_age)と、それに対して実行される関数名(jin_shortcode_cal_age)を記述
引数が必要なショートコードでは、上の2行目~4行目のように shortcode_atts() を使い、存在しない引数が指定されたり、そもそも引数が無かったりする場合を考慮する必要がある、っていうのがポイントになりますね。
【Sample3】引数が2つ以上の例
引数が2つ以上でも上の例同様 shortcode_atts() を使って、引数のチェックはしっかり行います。
複数の引数を使う場合というと、
例えば、商標系の記事(物販アフィリエイト系の記事)でよくありそうな、
・商品の初回購入価格がxxx円
・2回目以降の価格がyyy円
・最低購入回数といった縛りが3回
みたいな場合、
最低購入回数購入時の合計金額から、
1回あたりの金額(その商品の1つあたりの平均価格)を出す、
といった計算がありますね。
【想定するショートコード】
[heikin_tanka shokai="980" nikaime="1980" shibari="3"]- 1)ショートコード名:heikin_tanka とする
- 2)引数:3つ
・shokai(初回のお値段)、
・nikaime(2回目以降のお値段)、
・shibari(最低購入回数といった縛りの回数) - 3)shokai, nikaime, shibari:単純に数値で入れる
- 4)ショートコードの結果:
千円以上の場合には「x,xxx円」と3桁区切りの「,」を付け、
最後に「円」を付けて返す
さて引数が3つになりましたが、引数が1つの場合とやり方は同じで、
実際のコードはたとえば以下のような感じ。
【ショートコードのコード例】
function jin_shortcode_heikin_tanka( $args ){
$a = shortcode_atts( array(
'shokai' => '0',
'nikaime' => '0',
'shibari' => '1',
), $args);
$price1 = $a[ 'shokai' ];
$price2 = $a[ 'nikaime' ];
$shibari = $a[ 'shibari' ];
if( $shibari < 1 ){
$heikin = 'shibari は1以上にしてね';
}else{
/* 平均を計算*/
$heikin = round( ( $price1 + $price2 * ( $shibari - 1 ) ) / $shibari );
/* 3桁区切りへ */
$heikin = number_format( $heikin ) . "円" ;
}
return $heikin;
}
add_shortcode( 'heikin_tanka', 'jin_shortcode_heikin_tanka' );- 1行目:
ショートコードで実行される関数名を「jin_shortcode_heikin_tanka」とし、
3つの引数(shokai、nikaime、shibari)を連想配列「$args」で受ける - 2行目~6行目:
- 引数が1つの例の場合と同様に、shortcode_atts() を使って引数をチェック。
(想定している引数がなければ shortcode_atts() 内で指定している値を使う。想定外の引数があれば取り除く) - shortcode_atts() のチェック結果を配列 $a に入れる。
- 引数が1つの例の場合と同様に、shortcode_atts() を使って引数をチェック。
- 8行目~10行目:
配列「$a」から ショートコードで指定された3つの属性(引数)の値を各々取り出す - 12,13行目:
16行目の割り算で0で割ることがないようにエラーチェックを入れておく - 16行目:
最低購入回数分購入した時の平均単価を計算。
(round関数 を使って四捨五入) - 18行目:
- number_format関数を使って、3桁区切りにする
(3桁ごとに " , "を付ける) - 最後に「円」を付けて返す
- number_format関数を使って、3桁区切りにする
- 23行目:
ショートコード名( heikin_tanka )と、
それに対して実行される関数名( jin_shortcode_heikin_tanka )を記述
関連)
・round関数(php公式)
・number_format関数(php公式)
プラグイン化する
作ったショートコードをプラグイン化するのは簡単で、
プラグインの基本形に当てはめればOK。
つまりプラグイン情報ヘッダーに加えて、プラグイン用のコードを追加する、ってことになりますね。
・プラグインの基本形は以下参照
【WordPress】プラグイン作成法とサンプルから有効化まで
プラグイン情報ヘッダーで最低必要なのはプラグイン名称のみですが、
例として、簡単な説明やバージョン、著作者ぐらいも付けて以下のような感じ。
<?php
/*
Plugin Name: jin-shortcode-sample01
Description: ショートコードのプラグイン化のテストだよ~ん
Version: 0.1
Author: Jinなのだ
*/
function 関数名A( $属性 ){
実行させたいコードを記述
}
add_shortcode( 'ショートコード名', '関数名A' );
?>- 2行目~7行目:プラグインの情報ヘッダー
必須は「Plugin Name」のみ。
ここではおまけとして、Description, Version, Authorも記載。 - 9行目~12行目:ショート用のコードを貼りつけ
これだけでショートコードもプラグイン化できるなんて、簡単すぎる!
これを基本に、上の方で解説した「ショートコードサンプル1」(引数がない例)をプラグイン化してみると、以下のようになりますね。
【Sample1】プラグイン化(引数がない例)
<?php
/*
Plugin Name: jin-shortcode-sample01
Description: ショートコードのプラグイン化のテスト(引数がない例)
Version: 0.1
Author: Jinなのだ
*/
function jin_shortcode_show_today( ){
return date( 'Y年m月d日' );
}
add_shortcode( 'show_today' , 'jin_shortcode_show_today' );
?>- 2行目から7行目の情報ヘッダーを適宜変更
- 9行目~12行目:ショートコードのサンプル1(引数がない例)を貼りつけ
プラグインの情報ヘッダーに加えて、ショートコード用のコードを追加しただけ。
実際にプラグインをインストールすると以下のように表示されます。

情報ヘッダーで設定した以下もしっかり表示されてます。
・プラグイン名(jin-shortcode-sample01)
・簡単な説明(ショートコードのプラグイン化のテスト(引数がない例))
・バージョン(0.1)、
・作者(Jinなのだ)
【Sample2】プラグイン化(引数が1つの例)
<?php
/*
Plugin Name: jin-shortcode-sample02
Description: ショートコードのプラグイン化のテスト(引数が1つの例)
Version: 0.1
Author: Jinなのだよ、ワトソン君
*/
function jin_shortcode_cal_age( $args ){
$a = shortcode_atts( array(
'ymd' => 'none',
), $args);
$birtydate = $a[ 'ymd' ];
if( 'none' == $birtydate ){
$age = '不明';
}
else{
$today = date( 'Ymd' );
$age = floor( ( $today - $birtydate ) / 10000) . '歳' ;
}
return $age;
}
add_shortcode( 'cal_age', 'jin_shortcode_cal_age' );
?>- 2行目から7行目の情報ヘッダーを適宜変更
- 9行目~25行目:こちらもショートコードのサンプル2(引数が1つの例)を貼りつけただけ
こちらも実際プラグインをインストールして有効すると、
以下のようにプラグインの一覧で表示されます。

プラグイン名から、簡単な説明、バージョン、作者、と、
プラグインの情報ヘッダーで設定した値(文字列)が表示されているのが分かります。
【Sample3】プラグイン化(引数が2つ以上の例)
<?php
/*
Plugin Name: jin-shortcode-sample03
Description: ショートコードのプラグイン化のテスト(引数が2つ以上の例)
Version: 0.1
Author: Jinなのだ、これでいいのだ
*/
function jin_shortcode_heikin_tanka( $args ){
$a = shortcode_atts( array(
'shokai' => '0',
'nikaime' => '0',
'shibari' => '1',
), $args);
$price1 = $a[ 'shokai' ];
$price2 = $a[ 'nikaime' ];
$shibari = $a[ 'shibari' ];
if( $shibari < 1 ){
$heikin = 'shibari は1以上にしてね';
}else{
/* 平均を計算*/
$heikin = round( ( $price1 + $price2 * ( $shibari - 1 ) ) / $shibari );
/* 3桁区切りへ */
$heikin = number_format( $heikin ) . "円" ;
}
return $heikin;
}
add_shortcode( 'heikin_tanka', 'jin_shortcode_heikin_tanka' );
?>- 2行目から7行目の情報ヘッダーを適宜変更
- 9行目~31行目:こちらもショートコードのサンプル3(引数が2つ以上の例)を貼りつけただけ
実際にこのプラグインをインストールして有効化すると、
プラグイン一覧で以下のように表示されます。

プラグインファイル中の情報ヘッダーで設定した値もしっかり表示されてますね。
【Sample4】複数のショートコードをまとめてプラグイン化
ここまでの例は、1つのショートコードに対してそれをプラグイン化するというもの。
でも1つのプラグインで複数のショートコードを含めたい、
ということもありますね。
この場合には、ここまで見てきたのと同様、
単にその複数のショートコードを入れればOK。
<?php
/*
Plugin Name: Jin ShortCord Samples
Description:JINのショートコードサンプル集
Version: 0.1
Author:JIN
*/
/* ------------------------------------
* 本日の年月日を表示する
------------------------------------ */
function jin_shortcode_show_today( ){
return date( 'Y年m月d日' );
}
add_shortcode( 'show_today' , 'jin_shortcode_show_today' );
/* ------------------------------------
* 誕生日から年齢を表示する
------------------------------------ */
function jin_shortcode_cal_age( $args ){
$a = shortcode_atts( array(
'ymd' => 'none',
), $args);
$birtydate = $a[ 'ymd' ];
if( 'none' == $birtydate ){
$age = '不明';
}
else{
$today = date( 'Ymd' );
$age = floor( ( $today - $birtydate ) / 10000) . '歳' ;
}
return $age;
}
add_shortcode( 'cal_age', 'jin_shortcode_cal_age' );
/* ------------------------------------
* 初回の価格、2回目以降の価格、購入回数から
* 1回あたりの価格を計算して表示
------------------------------------ */
function jin_shortcode_heikin_tanka( $args ){
$a = shortcode_atts( array(
'shokai' => '0',
'nikaime' => '0',
'shibari' => '1',
), $args);
$price1 = $a[ 'shokai' ];
$price2 = $a[ 'nikaime' ];
$shibari = $a[ 'shibari' ];
if( $shibari < 1 ){
$heikin = 'shibari は1以上にしてね';
}else{
/* 平均を計算*/
$heikin = round( ( $price1 + $price2 * ( $shibari - 1 ) ) / $shibari );
/* 3桁区切りへ */
$heikin = number_format( $heikin ) . "円" ;
}
return $heikin;
}
add_shortcode( 'heikin_tanka', 'jin_shortcode_heikin_tanka' );
?>複数の自作ショートコードをまとめて1つのプラグインにするには、
単にそれらショートコードをまとめて記載すればOK。
- 12行目~16行目:ショートコードSample1を記述
- 21行目~37行目:ショートコードSample2を記述
- 44行目~66行目:ショートコードSample3を記述
プラグインファイル内に、単に複数のショートコードの記述を入れてるだけ。
簡単にできますね。^-^)
ショートコードをプラグイン化したら、
実際に動作するかテストしてみてくださいね。
(テスト環境を作って試すのがおススメ)
プラグインファイルの保存やアップロードの仕方については以下参照。
【WordPress】プラグイン作成法とサンプルから有効化まで
今回のポイント
ワードプレスで、ショートコードをプラグイン化するには、プラグインの基本形さえ押さえておけば、あとは作ったショートコードのコードを貼りつけるだけで簡単にできますね。
ポイントはプラグインの基本形を押さえておくこと。
(情報ヘッダーを付けて、その下に実行したい関数を書く)
これさえ分かれば、すぐプラグイン化ができると思います。
またブログで収益化をしたい、ブログのスキルをもっと得たい、そのスキルがお金に変わると嬉しいな、などあれば、以下のメルマガにも登録してみてくださいね。






コメント