Apakah ada cara untuk membagi konten posting dan kode pendek galeri. Saya ingin menampilkan galeri di luar konten normal saya, tidak peduli bagaimana atau di mana ditempatkan. Saya bisa menggunakan ini untuk mendapatkan kode pendek itu sendiri:
if(has_shortcode(get_the_content(), 'gallery')){
$pattern = get_shortcode_regex();
preg_match("/$pattern/s", get_the_content(), $matches);
echo do_shortcode($matches[0]);
}
Tapi ini tidak berfungsi jika kode pendek galeri bukan yang pertama. Apakah ada cara untuk membagi konten dan galeri saya sepenuhnya?
Sunting: Saya memiliki semi-solusi tetapi sepertinya cara yang panjang untuk menyelesaikannya. Pertama-tama mengambil kode pendek pertama di pos (yang perlu diperbaiki karena saya hanya ingin kode pendek "Galeri") kemudian menghapus semua kode pendek dari konten (sekali lagi, tidak benar-benar apa yang ingin saya lakukan.
<?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; ?>
Sunting # 2 - Ok, saya hanya bisa mendapatkan kode singkat galeri di pos. Saya juga menambahkan filter untuk menghapus formulir shortcode galeri the_content()
- masalahnya adalah tidak perlu menghapus shortcode sejak posting, tetapi tidak memungkinkan saya untuk menjalankan "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);
Putaran
<?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>
di Loop itu akan mengembalikan kode pendek saya Dua kali (saya berada di satu halaman, harus dilingkarkan dua kali - sehingga tidak menjalankan do_shortcode ()). Tidak yakin kenapa.
sumber
the_content()
. Lebih rumit jika sudah ada banyak halaman seperti ini.Jawaban:
Terbuka untuk siapa saja yang dapat menyederhanakan ini tetapi inilah yang saya temukan yang bekerja untuk saya.
Hal pertama yang pertama - dapatkan galeri, gunakan
get_post_gallery()
, segera setelah loop dimulai:strip_shortcode_gallery()
Function - functions.phpSumber:
Stackoverflow:
Apa yang awalnya saya lakukan, yang tidak bekerja seperti yang diharapkan:
sumber
Kode pendek inti Ekspresi Reguler
Pada dasarnya kita bisa melakukan itu dengan Regex - sebenarnya bahkan dengan Regex yang disediakan oleh core oleh
get_shortcode_regex()
.Pertama, kita perlu mengambil tag kode pendek dan membangun regex. Fungsi inti
get_shortcode_regex()
sayangnya tidak menawarkan kesempatan untuk melemparkan argumen sehingga kami akan dibiarkan dengan regex yang cocok dengan masing-masing dan setiap kode pendek, yang tidak diinginkan karena kami hanya ingin menargetkan[gallery]
kode pendek.Tangkap semua galeri
Selanjutnya kita membutuhkan Regex yang menangkap semua galeri. Karena itu kami memanggil
preg_match_all()
karena akan mengembalikan semua Cocok untuk kode singkat galeri sebagai array dengan0
indeks (sisanya akan cocok sebagian dan dapat diabaikan).Sekarang
$galleries[0]
memegang array tag kode pendek galeri.Konten tanpa galeri
Hal berikutnya yang perlu kita lakukan adalah menghapus semua
[gallery]
shortcode dari konten. Kami akan menggunakan Regex yang sama lagi dan menjalankannyaget_the_content()
. Tentu saja kami menerapkanthe_content
filter karena kode pendek dapat ditambahkan melalui panggilan balik pada waktu render.The
$content
variabel sekarang memegang konten kami.Contoh panggilan balik untuk mengubah konten
atau: Bagaimana Anda dapat membagi konten menjadi galeri dan sisa posting
Kami dapat dengan mudah mengganti konten dengan konten baru kami selama panggilan balik:
yang pertama akan menambahkan semua galeri, lalu menambahkan konten kami tanpa galeri, keduanya dipisahkan oleh aturan horizontal. Ini hanyalah titik awal.
sumber
Seharusnya tidak terlalu rumit. Kode di bawah ini dapat disingkat menjadi beberapa baris sesuai keinginan.
Pendekatan 1. Dapatkan konten kiriman yang bersih dengan menghapus semua kode pendek, termasuk galeri dari konten kiriman.
NB: semua shortcode lainnya akan dihapus dari pos. Jika Anda tidak menempatkan kode pendek khusus di sana, maka pendekatannya adalah untuk Anda.
Asumsikan Anda berada di loop WP
Asumsikan Anda keluar
Pendekatan 2. Hapus hanya
[gallery]
kode pendek, simpan semua kode pendek lainnya.Bergantung pada realisasi internal dari bagaimana
[gallery]
shortcode terlihat, yang dapat diubah oleh tim WP, jadi mungkin bukan bukti di masa depan seperti pendekatan pertama:Dalam loop WP
Keluar dari situ
sumber