web-dev-qa-db-ja.com

投稿内のすべてのショートコードを反復処理する簡単な方法はありますか?

現在の言語がengの場合にのみ表示されるショートコード[translate lang=eng]Apple[/translate]を使用しています。上記に加えて、投稿に宣言[translate lang=rus]Яаблоко[/translate]と現在の言語がrusengのどちらでもない場合、ЯаблокоAppleのどちらも出力されません。

私の目的は、現在の言語が[translate lang]属性の言語と一致しない場合に、デフォルトの言語でメッセージを印刷することです。これは[translate]がポストで使用されるのと同じ回数だけ(デフォルトの言語で)メッセージが印刷されることを意味しますが、それは私が心配することです...

私が知る必要があるのは、投稿中のすべてのショートコードのarray(または何でも)を与えるget_shortcodes()関数があるかどうかということです。そうでない場合、正規表現で投稿を解析する必要がありますか?もっと良い提案がありますか?

「優れた」翻訳プラグインについて私に話すのを控えてください。

それが私が思い付くことができる最高のものです:

function wpse20389_show_shortcode_tags()
{
    echo '<pre>Shortcode Tags: ';
        print_r( $GLOBALS['wp_filter']['the_content'] );
    echo '</pre>';
}
add_action( 'shutdown', 'wpse20389_show_shortcode_tags' );
1
kaiser

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... 

}