web-dev-qa-db-ja.com

get_shortcode_regex()は最初のショートコードのみに一致します

コーデックスには があり、get_shortcode_regex()を使用して、特定のページでショートコードが呼び出されているかどうかを確認します。

$pattern = get_shortcode_regex();
preg_match('/'.$pattern.'/s', $posts[0]->post_content, $matches);
if (is_array($matches) && $matches[2] == 'YOURSHORTCODE') {
    //shortcode is being used
}

ただし、これは投稿コンテンツの最初のショートコードのみを検出します。これはget_shortcode_regex()のバグですか、それともpreg_match()パラメータを微調整して、ページに存在するすべてのショートコードを返すようにすることができますか?

1
Ian Dunn

PHP docs (私の強調)から:

preg_match() は、パターンが一致した回数を返します。 preg_match()は最初の一致の後で検索を停止するため、これは0回(一致なし)または1回になります。 preg_match_all() 逆に、件名の最後に到達するまで続行されます。

2
Rarst