【WordPress】shortcode_attsとextract
WordPressさわってます。
分からないところをグーグルすると「〇〇の書き方」とか「〇〇を説明します」とかよく出てくるんだけど、大体が「こう書いたらこうなります!」みたいなテンプレート紹介して終わり。内容コピペしたんか…ってぐらい大体同じ。「なぜ」の部分がないんだよなぁ。。とりあえず使ってみる分はいいんだろうけど。
そんなわけで自作ショートコードの「なぜ」を調べました。
テンプレート
大体こんな風に書け!っていわれるやつ。
function shortcode_sample($atts) { extract(shortcode_atts( array( 'fruit' => 'りんご', 'sweets' => 'ケーキ'), $atts)); return "好きな果物は${fruit}で、好きなスイーツは${sweets}です"; } add_shortcode('sample', 'shortcode_sample');
インデント難しい。
でも、はてな記法って便利だなー
分からない部分
- shortcode_attsとは何をする関数なのか?
- extractとは何をする関数なのか?
関数を関数でくくってて複雑じゃん…
ということで分割して考えます。
shortcode_atts
◆参考文献
関数リファレンス/shortcode atts - WordPress Codex 日本語版
shortcode_atts:WordPress私的マニュアル
つまり
shortcode_atts( 使用したいキーとデフォルト値の宣言[], ショートコードに渡されたキーと値[], フィルター用の文字列 );
返り値は『無効なキーを除外したキーと値の連想配列』
ということですね。
shortcode_sampleは"fruit"と"sweets"に値が渡されること前提で実装されてます。ショートコードで呼び出すと、
[sample fruit="みかん" sweets="クッキー"]
こんな感じで
好きな果物はみかんで、好きなスイーツはクッキーです
という結果になる。
んだけど、例えば関数の仕様を勘違いしていて
[sample cake="ショートケーキ" drink="紅茶"]
こんな風に想定外のパラメータを渡してしまった(つまり想定したキーと値が渡されなかった)とき
好きな果物はで、好きなスイーツはです
という悲しい結果に…。
それを解決するのがそう、『shortcode_atts』!
ショートコードから想定するキー(fruitとsweets)の値が渡されればそれらを使って、渡されなかった場合はデフォルト値を使用。さらに想定外のキー(cakeとかdrink)はまるっと無視して連想配列を作成してくれる関数、ということなのですね~、理解。
extract
◆参考文献
連想配列に含まれるキー毎に変数を作成(extract) - 配列関数 - PHP関数
phpのマニュアルも見たんだけど、"配列からシンボルテーブルに変数をインポートする"って、なにそのルー語!
この関数は超シンプル。
extract(shortcode_atts( array( 'fruit' => 'りんご', 'sweets' => 'ケーキ'), $atts));
↑の場合。
shortcode_atts()の時点では、
連想配列['fruit'] = 'りんご'
連想配列['sweets'] = 'ケーキ'
になっていて、それをextractすると
$fruit = 'りんご'
$sweets = 'ケーキ'
と、連想配列のキーの部分を変数として扱えるようにしてくれるってわけですね~~。