มีวิธีแยกเนื้อหาโพสต์และรหัสย่อของคลังภาพหรือไม่ ฉันต้องการแสดงแกลเลอรีนอกเนื้อหาปกติของฉันไม่ว่าจะวางไว้ที่ใดหรืออย่างไร ฉันสามารถใช้สิ่งนี้เพื่อรับรหัสย่อของตัวเอง:
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 มันจะส่งคืนรหัสสั้น ๆ ของฉันสองครั้ง (ฉันอยู่ในหน้าเดียวควรวนซ้ำสองครั้ง - ดังนั้นมันจะไม่ทำงาน do_shortcode ()) ไม่แน่ใจว่าทำไม
the_content()
นั้น หลอกลวงได้ถ้ามีหลายหน้าเช่นนี้อยู่แล้ว