必要な知識

ショートコードのオプション extract( shortcode_atts($options,$atts) ) より便利な取得方法

ショートコードは、次のような書き方で実現できます。
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文字に置き換えられますが空白を含んでいてもオプションとして取り出すことが可能です。

ただし、空白は処理できますが改行は、変換されて送られてくるので改行を含んだオプションは指定できません。

この書き込みがあなたの一助になれば幸いです。


スポンサードリンク

関連記事一覧