質問: 投稿内のすべてのショートコードを反復処理する簡単な方法はありますか? 現在の言語がengの場合にのみ表示されるショートコード[translate lang=eng]apple[/translate]を使用しています。上記に加えて、投稿に宣言[translate lang=rus]яаблоко[/translate]と現在の言語がrusとengのどちらでもない場合、яаблокоとappleのどちらも出力されません。私の目的は、現在の言語が[translate lang]属性の言語と一致しない場合に、デフォルトの言語でメッセージを印刷することです。これは[translate]がポストで使用されるのと同じ回数だけ(デフォルトの言語で)メッセージが印刷されることを意味しますが、それは私が心配することです...私が知る必要があるのは、投稿中のすべてのショートコードのarray(または何でも)を与えるget_shortcodes()関数があるかどうかということです。そうでない場合、正規表現で投稿を解析する必要がありますか?もっと良い提案がありますか?「優れた」翻訳プラグインについて私に話すのを控えてください。
回答: wp-include/shortcodes.phpにはget_shortcode_regex()関数があります。 do_shortcode()などによって使用されます。正規表現を採用するのはかなり簡単です。global $post; $tags = array(); $pattern = '(.?)\(translate)\b\s+(.*?)(?:(\/))?\\[\/translate\])?(.?)'; $pattern = "/$pattern/s"; preg_match_all($pattern, $post->post_content, &$tags, preg_set_order); foreach ($tags as $t ){ // iterate over tags... }