是否可以过滤掉帖子中的短代码,然后运行短代码?
我的页面如下:
[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;
任何idéas?
编辑:
找到一个临时解决方案。
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有一个用于条带化短代码但不用于条带内容的功能。所以我从整个帖子中删除了剥离的内容字符串以获得短代码。唯一不好的是,短代码必须在帖子的开头。
答案 0 :(得分:13)
更好的答案是:
$pattern = get_shortcode_regex();
preg_match('/'.$pattern.'/s', $post->post_content, $matches);
if (is_array($matches) && $matches[2] == 'the_shortcode_name') {
$shortcode = $matches[0];
echo do_shortcode($shortcode);
}
它将在帖子内容中搜索名为“the_shortcode_name”的短代码。如果找到它,它会将短代码存储在$ matches变量中。很容易从那里运行。
答案 1 :(得分:2)
我对这些答案有以下问题:
..我的解决方案是:
// Return all shortcodes from the post
function _get_shortcodes( $the_content ) {
$shortcode = "";
$pattern = get_shortcode_regex();
preg_match_all('/'.$pattern.'/uis', $the_content, $matches);
for ( $i=0; $i < 40; $i++ ) {
if ( isset( $matches[0][$i] ) ) {
$shortcode .= $matches[0][$i];
}
}
return $shortcode;
}
像这样使用它:
<?php echo do_shortcode( _get_shortcodes( get_the_content() ) ) ?>
答案 2 :(得分:1)
搜索您的短信代码位置
示例:
[my_shortcode]
[my_shortcode_2]
或
[my_shortcode_2]
[my_shortcode]
<强>的functions.php 强>
function get_shortcode($code,$content) {
$pattern = get_shortcode_regex();
preg_match_all('/'.$pattern.'/s',$content,$matches);
if(is_array($matches) && isset($matches[2]) && in_array($code,$matches[2])) {
$index = array_search($code,$matches[2]);
$shortcode = $matches[0][$index];;
return do_shortcode($shortcode);
} else {
return false;
}
}
使用示例:
$content = $post->post_content;
$my_shortcode = get_shortcode('my_shortcode',$content);
$my_shortcode_2 = get_shortcode('my_shortcode_2',$content);
echo $my_shortcode;
if($my_shortcode){ // if shortcode#1 found so echo shortcode#2 after
echo $my_shortcode_2;
}
答案 3 :(得分:0)
使用此正则表达式
preg_match('/\[summary[^\]]*](.*)\[\/summary[^\]]*]/uis', $string , $matches)
$ match [1]应该是你的文字
编辑以匹配任何标签组合 使用
/\[([^\]]+)\](.*?)\[\/\1\]/uis
但是如果你有嵌套标签,你可能需要递归地再次解析匹配。但是,如果它是一个wordpress自由文本,我认为你可能会得到一个简单的脚本可以处理的复杂案例
答案 4 :(得分:-1)
您可以使用get_shortcode_regex()
函数来获取博客中所有已注册的镜头代码的正则表达式,将其应用于内容以获取该内容中找到的一系列短代码,然后调用相应的回调进行处理你想要的那个。
所以在某个循环中,它会是这样的:
$pattern = get_shortcode_regex();
$matches = array();
preg_match_all("/$pattern/s", get_the_content(), $matches);
var_dump($matches); //Nested array of matches
//Do the first shortcode
echo preg_replace_callback( "/$pattern/s", 'do_shortcode_tag', $matches[0][0] );
这将执行帖子中找到的第一个短代码,显然在练习中你要检查你是否有一个!