ワードプレスで自作したショートコードをプラグイン化してみましょう。
プラグインの基本の形が分かれば、貼りつけるだけ、
みたいな感じで簡単にできると思います。
ここでは最初にショートコード作成法の基本をサンプルを使って見つつ、続いて実際にそのショートコードをプラグイン化してみます。
ショートコードの事は分かってる!という場合には、
目次の「2. プラグイン化する」から直接見てみてください。
※)ワードプレスのプラグイン作成の基本は以下で解説してます。
【WordPress】プラグイン作成法を分かりやすく解説!
Contents
ショートコード作成の基本
まずはショートコードの基本の確認から。
ワードプレスでショートコードを自作するには、
以下の形式で記述するだけになりますね。
1 2 3 4 |
function 関数名A( $属性 ){ 実行させたいコードを記述 } add_shortcode( 'ショートコード名', '関数名A' ); |
- 【関数名】:関数名は他と被らないように付ける
- 【$属性】:ショートコードの引数が入る連想配列。
ショートコードで指定する引数がこの$属性に連想配列で引き渡される
(引数がない場合には省略可) - 【ショートコード名】:ショートコードで指定する文字列(名前)
参照)ショートコードAPI(ワードプレス公式)
ここを押さえた上で、実際にプラグイン化してみます。
ショートコードの基本を更に具体的に確認する場合には、
以下のサンプルを見てみてください。
【Sample1】引数がない例
単純に”本日を「年月日」の形式で表示するだけ”、
といった【引数なしのショートコード】を考えてみる。
【想定するショートコード】
1 |
[show_today] |
- 1)ショートコード名:show_today とした
- 2)引数:なし
- 3)ショートコードの結果:「xx年xx月xx日」の形式で本日を表示する
このショートコードを実現するには、例えば以下のようなコードになりますね。
【ショートコードのコード例】
1 2 3 4 |
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つの引数(生年月日)を与えることで、
現在の年齢を計算して表示するショートコードを考えてみる。
(これを入れておくと、年が変わった時の記事更新がいらなくて楽!笑)
【想定するショートコード】
1 |
[cal_age ymd="20010102"] |
- 1)ショートコード名:cal_age とする
- 2)引数:ymd(の1つ)のみとする
- 3)ymd:生年月日の形式を、年(4ケタの西暦)+月(2桁)+日(2桁)とする
- 4)ショートコードの結果:「xx歳」と「歳」を付けて返す
これを実際のショートコードとして書いてみると
たとえば以下のようになりますね。
【ショートコードのコード例】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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つあたりの平均価格)を出す、
といった計算がありますね。
【想定するショートコード】
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つの場合とやり方は同じで、
実際のコードはたとえば以下のような感じ。
【ショートコードのコード例】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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】プラグイン作成法とサンプルから有効化まで
プラグイン情報ヘッダーで最低必要なのはプラグイン名称のみですが、
例として、簡単な説明やバージョン、著作者ぐらいも付けて以下のような感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?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】プラグイン化(引数がない例)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?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なのだ)
このショートコードの実際の動作を試してみると、以下のようになりますね。
※)ショートコードをコピペで記事中に貼り付けると、
自動的にショートコードブロックに貼り付けられます。
(テスト環境はワードプレス5.8.2:テーマはCocoon))
動作を試した年月日が「2021年11月15日」なので、そのように表示されました。
【Sample2】プラグイン化(引数が1つの例)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?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つの例)を貼りつけただけ
こちらも実際プラグインをインストールして有効すると、
以下のようにプラグインの一覧で表示されます。
プラグイン名から、簡単な説明、バージョン、作者、と、
プラグインの情報ヘッダーで設定した値(文字列)が表示されているのが分かります。
実際このショートコードを記事の中で使ってみると...
このテストをしたのが2021年11月15日。
誕生日を2001年1月2日としたので、20歳と表示されました。
【Sample3】プラグイン化(引数が2つ以上の例)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<?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つ以上の例)を貼りつけただけ
実際にこのプラグインをインストールして有効化すると、
プラグイン一覧で以下のように表示されます。
プラグインファイル中の情報ヘッダーで設定した値もしっかり表示されてますね。
初回の購入金額を300円、
2回目以降の価格を3,000円、
最低購入回数を3回としたので、
1回あたりの価格の計算は以下になります。
3回合計金額 = 300円(初回)+3,000円×2(2回目、3回目)
= 6,300円。
この3回合計金額を3で割るので、2,100円。
正しく動作できてますね。
【Sample4】複数のショートコードをまとめてプラグイン化
ここまでの例は、1つのショートコードに対してそれをプラグイン化するというもの。
でも1つのプラグインで複数のショートコードを含めたい、
ということもありますね。
この場合には、ここまで見てきたのと同様、
単にその複数のショートコードを入れればOK。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
<?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】プラグイン作成法とサンプルから有効化まで
今回のポイント
ワードプレスで、ショートコードをプラグイン化するには、プラグインの基本形さえ押さえておけば、あとは作ったショートコードのコードを貼りつけるだけで簡単にできますね。
ポイントはプラグインの基本形を押さえておくこと。
(情報ヘッダーを付けて、その下に実行したい関数を書く)
これさえ分かれば、すぐプラグイン化ができると思います。
またブログで収益化をしたい、ブログのスキルをもっと得たい、そのスキルがお金に変わると嬉しいな、などあれば、以下のメルマガにも登録してみてくださいね。