有没有一种直接的方法来迭代一篇帖子中的所有短码?

时间:2011-06-19 作者:Ярослав Рахматуллин

我正在使用一个短代码[translate lang=eng]Apple[/translate] 仅当“当前语言”为eng. 如果帖子除上述内容外还包含声明[translate lang=rus]Яаблоко[/translate] 当前的语言既不是rus 也没有eng, 两者都不是ЯаблокоApple 已打印。

我的目标是在当前语言与[translate lang] 属性这意味着消息(默认语言)将被打印多次[translate] 在帖子中使用,但这是我要担心的。。。

我需要知道的是get_shortcodes() 函数将为我提供array (或其他)的所有短代码。如果不是,我会用regex解析帖子吗?你有更好的建议吗?

请不要告诉我“高级”翻译插件

2 个回复
SO网友:kaiser

这是我能想到的最好的办法:

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\' );

SO网友:Ярослав Рахматуллин

wp include/shortcode中有一个get\\u shortcode\\u regex()函数。php。do\\u shortcode()和其他人使用它。采用regex表达式相当容易。

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

}

结束

相关推荐

使用自定义帖子类型限制QUERY_POSTS函数中的帖子数量

我使用下面的代码来显示定义为自定义帖子类型并按自定义分类法“england”过滤的帖子。我曾尝试在query\\u posts函数中使用“posts\\u per\\u page=5”,但这会产生一组与我的“news”类型的一个帖子类别完全不同的帖子。当我从查询中删除每页的帖子时,它会返回我想要的列表,但默认为Wordpress设置中设置的默认值10。如何在下面的代码中重写它? <?php query_posts( array( \'country\' => \'event-en