有没有办法拆分帖子内容和画廊短代码。我想无论其放置方式或位置如何,都将画廊显示在正常内容之外。我可以使用它来获取简码本身:
if(has_shortcode(get_the_content(), 'gallery')){
$pattern = get_shortcode_regex();
preg_match("/$pattern/s", get_the_content(), $matches);
echo do_shortcode($matches[0]);
}
但是,如果画廊短代码不是第一个实例,这将不起作用。有没有办法完全拆分我的内容和画廊?
编辑:我有一个半解决方案,但这似乎是一条漫长的路要走。它首先获取帖子中的第一个短代码(由于我只希望使用“图库”短代码,因此需要对其进行修复),然后从内容中删除所有短代码(同样,并不是我真正想做的事情)。
<?php if(has_shortcode(get_the_content(), 'gallery')) : ?>
<?php
$pattern = get_shortcode_regex();
preg_match("/$pattern/s", get_the_content(), $matches);
?>
<div id="content">
<?php echo strip_shortcodes(get_the_content()); ?>
</div>
<div id="gallery">
<?php echo do_shortcode($matches[0]); ?>
</div>
<?php endif; ?>
编辑#2-好吧,我只能在帖子中获取图库的短代码。我还添加了一个过滤器来删除画廊的短代码形式the_content()
-问题是它并不一定要删除短代码,因为它确实发布了它,但不允许我运行“ do_shortcode()”
Functions.php
function remove_gallery($content) {
global $post;
if($post->post_type == 'artcpt')
remove_shortcode('gallery', $content);
return $content;
}
add_filter( 'the_content', 'remove_gallery', 6);
循环
<?php preg_match('/\[gallery ids=[^\]]+\]/', get_the_content(), $matches); ?>
<div id="content">
<?php the_content(); ?>
</div>
<div id="gallery">
<?php echo do_shortcode($matches[0]); ?>
</div>
在The Loop中,它将返回我的短代码Twice(我在单个页面上,应该循环两次-因此其未运行do_shortcode())。不知道为什么。
the_content()
。但是,如果已经有很多这样的页面,则比较棘手。