Есть ли способ разделить содержание поста и короткий код галереи. Я хочу отображать галерею вне моего обычного контента независимо от того, как и где он размещен. Я могу использовать это, чтобы получить сам шорткод:
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; ?>
Edit # 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>
в Цикле он вернет мой короткий код Дважды (я на одной странице, должен быть зациклен дважды - поэтому он не выполняет do_shortcode ()). Не уверен почему.
the_content()
. Однако сложнее, если таких страниц уже много.