私はドキュメントに記述されていることを再現する方法を探しています: オーバーロードされたショートコードコールバック。
ドキュメントによると、$atts
配列はショートコードRegExにマッチした文字列を含みます。 $atts
内の位置は、コールバック名がショートコードと一致するかどうかによって異なります。次の例はドキュメントから抜粋したものです。
add_shortcode('foo','foo'); // two shortcodes referencing the same callback
add_shortcode('bar','foo');
produces this behavior:
[foo a='b'] ==> callback to: foo(array('a'=>'b'),NULL,"foo");
[bar a='c'] ==> callback to: foo(array(0 => 'bar', 'a'=>'c'),NULL,"");
だから私はこのように私のショートコードを登録しました:
add_shortcode('foo', 'foo');
add_shortcode('bar', 'foo');
function foo($attributes, $content = null) {
echo '<pre>';
var_dump($attributes);
echo '</pre>';
}
残念なことに、$ attributesは常に空で、ショートコードの名前を含んでいません(WP 4.0)。
これはドキュメントの誤りなのでしょうか、それともどこか間違っているのでしょうか。
私はあなたが[foo a='b']
フィルタを通してショートコード[bar a='c']
とdo_shortcode
を実行するのを忘れたと思います:
do_shortcode( '[foo a='b'] [bar a='c']' )
the_content()
の出力はdo_shortcode
を通してフィルタリングされるので、代わりにそれをエディタに追加することができます。
コードを実行すると、$arguments
ダンプに対して次のような出力が得られます。
array (size=1)
'a' => string 'b' (length=1)
そして
array (size=1)
'a' => string 'c' (length=1)
だからここに'0' => 'bar'
の部分はありません。
しかし、現在のショートコードタグは、ショートコードコールバックの3番目パラメータから取得できます(最初に this で聞いたことがあります。 @ toschoで回答)
私はソースをチェックしたばかりで、do_shortcode_tag
関数をチェックアウトすると以下のようになります。
// self-closing tag
return $m[1] . call_user_func( $shortcode_tags[$tag], $attr, null, $tag ) . $m[6];
$tag
は、ショートコードタグを含む3番目のパラメータです。
だからあなたの場合あなたはあなたのコールバックを次のように変更することができます。
function foo( $attributes = array(), $content = null, $tag = '' ) {
echo $tag; // current shortcode tag
echo '<pre>';
var_dump($attributes);
echo '</pre>';
}
現在のショートコードタグに関する情報を取得します。
ショートコードコールバックは、ショートコード名を持つ3番目の引数を取得します。これについてのメモがドキュメントにあります。
2.9.2以降では、常に3番目の引数として表示されるようです。
add_shortcode('foo', 'wpse173855_shortcode');
add_shortcode('bar', 'wpse173855_shortcode');
function wpse173855_shortcode($atts, $content, $name)
{
echo '<pre>';
var_dump($name);
echo '</pre>';
}
ソース を見ると、一致したショートコードが常に渡されることがわかります。