Mesaj içeriğini ve galeri kısa kodunu ayırmanın bir yolu var mı. Galeriyi nasıl veya nereye yerleştirildiğine bakılmaksızın normal içeriğimin dışında görüntülemek istiyorum. Kısa kodun kendisini almak için bunu kullanabilirim:
if(has_shortcode(get_the_content(), 'gallery')){
$pattern = get_shortcode_regex();
preg_match("/$pattern/s", get_the_content(), $matches);
echo do_shortcode($matches[0]);
}
Ancak galeri kısa kodu ilk örnek değilse, bu işe yaramaz. İçeriğimi ve galerimi tamamen bölmenin bir yolu var mı?
Düzenleme: Bir yarı çözüm var ama bu gitmek için uzun soluksuz bir yol gibi görünüyor. İlk önce postadaki ilk kısa kodu alır (yalnızca "Galeri" kısa kodunu istediğimden beri düzeltilmesi gereken), ardından tüm kısa kodları içerikten kaldırır (yine de gerçekten yapmak istediklerimi değil).
<?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; ?>
Düzenleme # 2 - Tamam, yayında yalnızca galeri kısa kodlarını bulabildim. Ayrıca galeri kısa kod formunu kaldırmak için bir filtre ekledim the_content()
- sorun, gönderdiği için kısa kodun kaldırılması gerekmediği, ancak "do_shortcode ()" çalıştırmama izin vermemesi değil
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);
Döngü
<?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>
Döngü içinde iki kez kısa kodumu döndürecek (tek bir sayfadayım, iki kez döndürülmem gerekiyor - bu yüzden do_shortcode () çalışmıyor). Emin değilim neden.
the_content()
. Bununla birlikte, zaten böyle birçok sayfa varsa daha zor.