是否可以仅从帖子中过滤掉短代码,然后运行短代码?
我的页面是这样的:
[summary img="images/latest.jpg"]
This here is the summary
[/summary]
Lots of text here...
我只想在特定页面上显示短代码。
尝试使用正则表达式,但它们似乎不起作用:
$the_query = new WP_Query('category_name=projects&showposts=1');
//loop
while ( $the_query->have_posts() ) : $the_query->the_post();
echo '<b>';
the_title();
echo '</b>';
echo '<p>';
$string = get_the_content();
if (preg_match("[\\[[a-zA-Z]+\\][a-zA-Z ]*\\[\/[a-zA-Z]+\\]]", $string , $matches)) {
echo "Match was found <br />";
echo $matches[0];
}
echo '</p>';
endwhile;
有任何想法吗?
编辑:
找到了临时解决方案。
while ( $the_query->have_posts() ) : $the_query->the_post();
$content = str_replace(strip_shortcodes(get_the_content()),"",get_the_content());
echo do_shortcode($content);
endwhile;
我看到 wordpress 有一个用于 strip 化短代码的功能,但没有用于 strip 化内容。所以我从整篇文章中替换了剥离的内容字符串以获取短代码。唯一不好的是短代码必须在帖子的开头。
最佳答案
使用这个正则表达式preg_match('/\[summary[^\]]*](.*)\[\/summary[^\]]*]/uis', $string , $matches)
$match[1] 应该是你的文字
编辑: 可以匹配任何标签组合
用/\[([^\]]+)\](.*?)\[\/\1\]/uis
但如果您有嵌套标签,您可能需要再次递归解析匹配项。但是,如果它是 wordpress 自由文本,我认为您可能会遇到简单脚本可以处理的过于复杂的情况
关于php - 只返回帖子的短代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6290810/