WordPress ショートコード 書き方・使い方(2)

2019年4月24日

Left Caption
ショートコードが少し分かったけど、思ったより簡単だね
Right Caption

チビ子

今度はデフォルト値だよ!少し難しくなるよ!!
 

属性のデフォルト値を設定

属性にデフォルト値を設定する方法を説明して行きます。

入力と結果

functions.php

function fnc_filename1 ($atts) {		
    $a = shortcode_atts (
        array (
            'file1' => "",
            'file2' => "デフォルトファイル名",
        ), $atts, 'filename');
    return 'ファイル名は' . $a['file1'] . 'と' . $a['file2'] . 'です';
}
add_shortcode('filename', 'fnc_filename1');

Wordpress投稿画面

[filename]
[filename file1="テスト" file2="チビ子"]

HTML出力結果

ファイル名はとデフォルトファイル名です
ファイル名はテストとチビ子です

解説

functions.php

	$a = shortcode_atts (

2行目の『shortcode_atts』という関数が、始めて出てきました。
これが、属性に値が設定されていればそれを設定し、無ければデフォルト値を設定する関数です。
ここでは、”$a”に値を設定します。

	        array (

3行目の”array”は配列で、値を返すことを指定する関数です。

	            'file1' => "",
            'file2' => "デフォルトファイル名",

4-5行目でデフォルト値の設定を行っています。
‘file1’には、何も設定していません。
‘file2’には、「デフォルトファイル名」としています。

	        ), $atts, 'filename')

6行目は、’$atts’は引数である属性、’filename’は、投稿画面に入力するショートコード名です。

出力結果を比べてみてもらえば分かると思いますが、1行目のように、属性を何も指定せずにショートコードを呼ぶと、デフォルト値を設定しない’file1’は何も表示されず、’file2’にはデフォルト値が表示されます。

属性の設定を忘れたり、属性名(ここでは’file1’)のスペルを間違えるとデフォルト値が表示されます。

shortcode_atts( $pairs , $atts, $shortcode );
パラメータ
$pairs
(配列) (必須) サポートするすべての属性の名前とデフォルト値
初期値: なし
$atts
(配列) (必須) ユーザーがショートコードタグに指定した属性
初期値: なし
$shortcode
(文字列) (オプション) shortcode_atts_{$shortcode} フィルターに使われるショートコード名。これを指定すると、他のコードが属性をフィルターするために shortcode_atts_{$shortcode} フィルターを使用できます。このパラメータはオプションですが、互換性を最大にするため常に含めるべきです。
初期値: なし
戻り値
(配列) 結合されフィルターされた属性のリスト。

引用:WordPress Codex 日本語版

属性に何も設定されていない時に、表示したい値を設定するのが、本来の使い方です。
個人で使用するショートコードで、投稿後に必ず表示画面を確認するなら、デフォルト値の設定は必須ではありません。また、デフォルト値に、あえて長い文字列を設定し、入力ミスに気が付くようにするのも、一つの方法です。

Right Caption

チビ子

デフォルト値も、色々使い方があるんだね

extract関数を使用した例

function fnc_filename2 ($atts) {		
	extract (shortcode_atts (
        array (
            'file1' => "",
            'file2' => "デフォルトファイル名",
        ), $atts, 'filename'));
    return 'ファイル名は' . $file1 . 'と' . $file2 . 'です';
}
add_shortcode('filename2', 'fnc_filename2');

extractという関数を使うと、shortcode_atts関数の連想配列に含まれる キー毎に変数にすることも可能になります。

return文を比べて見ると分かりますが、こちらの方がスッキリしています。