是否可以仅从帖子中过滤掉短代码,然后运行短代码?

我的页面是这样的:

[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/

10-13 01:27