現在の言語がeng
の場合にのみ表示されるショートコード[translate lang=eng]Apple[/translate]
を使用しています。上記に加えて、投稿に宣言[translate lang=rus]Яаблоко[/translate]
と現在の言語がrus
とeng
のどちらでもない場合、Яаблоко
と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' );
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...
}