Чи є спосіб розділити вміст публікації та короткий код галереї. Я хочу відобразити галерею поза своїм звичайним вмістом незалежно від того, як і де вона розміщена. Я можу використовувати це для отримання самого короткого коду:
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 ()"
Функції.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>
у Loop він поверне мій короткий код двічі (я на одній сторінці, повинен бути циклічний двічі - так що його не працює do_shortcode ()). Не знаю чому.
the_content()
. Однак складніше, якщо таких сторінок вже багато.