このコードに精通している場合
<?php
$pattern = get_shortcode_regex();
preg_match('/'.$pattern.'/s', $posts[0]->post_content, $matches);
if (is_array($matches) && $matches[2] == 'YOURSHORTCODE') {
//shortcode is being used
}
?>
この Webサイトから。ただし、ネストされたショートコードでは機能しません。
誰かがそれを入れ子にされたショートコードのために機能させる方法を知っていますか?
から: http://codex.wordpress.org/Shortcode_API#Limitations
ショートコードパーサは、それらのハンドラ関数がdo_shortcode()を再帰的に呼び出すことによってそれをサポートするならば、入れ子になったショートコードマクロを正しく取り扱います。
ただし、同じショートコードを別のショートコードの中に入れ子にすることはできません。
ただし、ショートコードマクロを使用して同じ名前の別のマクロを囲むと、パーサーは失敗します。
あなたがそうしないと仮定して、これはあなたがあなたのショートコードコールバックでする必要があることの人為的な例です:
function paragraph_wrap($atts, $content) {
// if there are nested shortcodes - handle them
$content = do_shortcode($content);
// wrap content in a paragraph tag
$paragraphed = '<p>' . $content . '</p>';
return $paragraphed;
}
add_shortcode('wrap_p', 'paragraph_wrap');
お役に立てれば。
ちょっと推測。 get_shortcode_regex()は、登録されているショートコードに対してのみ機能します。ですから、あなたが "あなたの"ショートコードを登録していない場合に備えて、それは単純なショートコードでさえうまくいきません。ですから、登録しなかった場合は、これが最終的に問題の原因になっている可能性があります。
ショートコードの取り扱いは、 ショートコードAPI で指定されています。ショートコードの登録方法の例は、 add_shortcode()Codexページにあります。 も同様です。
function baztag_func($atts, $content=) {
return "content = $content";
}
add_shortcode('baztag', 'baztag_func');
ネストされたコードの場合、Jeffはすでにこれがどのように機能するのか答えています。したがって、これは基本的に短いコードを追加する方法を示す小さな例です。 add_shortcode()
を使用した後、get_shortcode_regex()
は実際に登録されたショートコード名をカバーする正規表現を返します。そうでなければそれはちょうど一致しません。
ショートコードマッチングは不十分な方法で実装されています( shortcodes.php 、ll174)。基本的に、正規表現は、何が非正規言語であるべきかを記述するために使用されます(つまり、任意のネストを含むショートコード)。
実際には、
[a]
[a]
[/a]
[/a]
1行目の開始タグが3行目の終了タグと一致するように解析されます。明らかに、それは望ましい振る舞いにつながらない。