ショートコードのオプション extract( shortcode_atts($options,$atts) ) より便利な取得方法
ショートコードは、次のような書き方で実現できます。
例えば、以下のように id や style をオプションとする場合
オプションの取得は、通例として
extract( shortcode_atts($options,$atts) );
を使います。
extract( shortcode_atts($options,$atts) );だと空白を含んだオプションを指定できません。
前述の例では style は margin:1rem と空白を含んでいませんが、 空白を含んだ、例えば、margin:solid 1px #ccc; などは指定できません。
空白を含んだショートコードのオプションを指定できるタイプのショートコードは次のように書きます。
空白を含んだショートコードのオプションを指定できるタイプのショートコードは次のように書きます。
オプションのキーワードの配列で初期化をしますが、その初期化の配列をオプションの区切りとしてやれば、空白は、何個続いていても半角1文字に置き換えられますが空白を含んでいてもオプションとして取り出すことが可能です。
ただし、空白は処理できますが改行は、変換されて送られてくるので改行を含んだオプションは指定できません。
この書き込みがあなたの一助になれば幸いです。
0001 function pt_yuzu_Shortcode($atts){
0002 // 本体
0003 return($return_str);
0004 }
0005 add_shortcode('pt_yuzu' , 'pt_yuzu_Shortcode');
ショートコードのオプションの取得
通常ショートコードには、オプションを付けて自由度を上げます。例えば、以下のように id や style をオプションとする場合
0001 呼び出しもと
0002 [pt_yuzu id=1234 style=margin:1rem;]
0003
0004 --- functions ---
0005 function pt_yuzu_Shortcode($atts){
0006 $options = array(
0007 'id' => '', // POST ID
0008 'style' => '', // style
0009 );
0010 extract( shortcode_atts($options,$atts) );
0011 // $id => 1234
0012 // $style => margin:1rem;
0013 return($return_str);
0014 }
0015 add_shortcode('pt_yuzu' , 'pt_yuzu_Shortcode');
オプションの取得は、通例として
extract( shortcode_atts($options,$atts) );
を使います。
自由度の低いextract( shortcode_atts($options,$atts) );をやめる
通常ショートコードのオプションの取得は extract( shortcode_atts($options,$atts) ); を使いますが、extract( shortcode_atts($options,$atts) );だと空白を含んだオプションを指定できません。
前述の例では style は margin:1rem と空白を含んでいませんが、 空白を含んだ、例えば、margin:solid 1px #ccc; などは指定できません。
空白を含んだショートコードのオプションを指定できるタイプのショートコードは次のように書きます。
空白を含んだショートコードのオプションを指定できるタイプのショートコード
空白を含んだショートコードのオプションを指定できるタイプのショートコードは次のように書きます。
0001 /********************************************************/
0002 function pt_yuzu_shortcode_option($options,$atts)
0003 /********************************************************/
0004 {
0005 $optn = $options;
0006 $smbl = '';
0007 $buff = '';
0008 foreach($atts as $k=>$v){
0009 if(isset($options[$k])){
0010 if($smbl!=''){
0011 $optn[$smbl] = $buff;
0012 }
0013 $smbl = $k;
0014 $buff = $v;
0015 }else{
0016 if($smbl!=''){
0017 if($buff!=''){
0018 $buff.=' ';
0019 }
0020 $buff.=$v;
0021 }
0022 }
0023 }
0024 if($smbl!=''){
0025 $optn[$smbl] = $buff;
0026 }
0027 return($optn);
0028 }
0029 /********************************************************/
0030 function pt_yuzu_Shortcode($atts)
0031 /********************************************************/
0032 {
0033 $options = array(
0034 'id' => '', // POST ID
0035 'target' => '', // target
0036 'class' => '', // class
0037 'style' => '', // style border:1px solid #f00;margin : 1rem 0;
0038 'len' => '', // length
0039 'rep' => '', // replace A>>B{;C>>D}
0040 );
0041 $optn = pt_yuzu_shortcode_option($options,$atts);
0042 //
0043 // $optn['id'] => 1234
0044 // $optn['target'] =>
0045 // $optn['class'] => classname
0046 // $optn['style'] => border:1px solid #f00;margin : 1rem 0;
0047 // $optn['len'] =>
0048 // $optn['rep'] =>
0049 //
0050 return($replace_data);
0051 }
ショートコードのオプション extract( shortcode_atts($options,$atts) ) より便利な取得方法 まとめ
ショートコードのフックで持ってくるオプション $atts は、結局のところ連想配列です。オプションのキーワードの配列で初期化をしますが、その初期化の配列をオプションの区切りとしてやれば、空白は、何個続いていても半角1文字に置き換えられますが空白を含んでいてもオプションとして取り出すことが可能です。
ただし、空白は処理できますが改行は、変換されて送られてくるので改行を含んだオプションは指定できません。
この書き込みがあなたの一助になれば幸いです。