PERTANYAAN DAN JAWABAN DIREVISI
Kadang-kadang ada pertanyaan-pertanyaan ini yang mengganggu Anda dan memburu Anda di kemudian hari dalam kehidupan lagi, dan ini adalah salah satu pertanyaan seperti itu.
Pertanyaan ini membuat saya berpikir tentang solusi alternatif untuk masalah ini. Seperti yang sudah saya nyatakan, bidang khusus dan kotak meta ada untuk menyimpan potongan kecil data meta, dan tidak bertindak sebagai ekstensi untuk mengirim konten tempat Anda dapat menjalankan kode pendek dan fungsi. Juga, seperti yang sudah saya nyatakan, metode Anda salah dan tidak boleh digunakan
Apa yang saya temukan menarik dalam posting Anda adalah bahwa Anda menggunakan bidang khusus dan kotak meta untuk secara tidak sengaja menampilkan konten khusus dari input pengguna. Jadi saya duduk dan memikirkan cara yang mungkin untuk membuat pekerjaan ini dan menggunakan data bidang khusus dan data kotak meta dengan benar
Ini ideku:
SKENARIO:
CATATAN: Ini dapat dimodifikasi untuk memenuhi kebutuhan apa pun
Pada satu posting, pengguna ingin / mengharuskan untuk menampilkan konten khusus secara dinamis setelah posting sesuai dengan kebutuhannya. Ini harus dinamis. Konten harus berupa kueri khusus, dan pengguna harus memilih apa yang akan ditampilkan kapan pun ia mau dan apa yang diinginkannya
SOLUSI YANG MUNGKIN:
Shortcode tidak akan berfungsi di sini, karena shortcode tidak dapat dieksekusi di bidang khusus. Tidak ada yang akan do_shortcode
bekerja, karena tidak dinamis dan hardcode, sesuatu yang tidak kita inginkan. Seperti dalam pertanyaan Anda, kami akan menggunakan bidang khusus. Sekali lagi saya tekankan, jangan gunakan bidang khusus untuk mengeksekusi permintaan kustom atau kode pendek
RENCANA:
Kami akan menggunakan bidang khusus untuk hanya menyimpan argumen permintaan kami, itu saja. Jadi, yang kami lakukan adalah, kami membuat bidang khusus yang disebut custom_query_arguments
. Di layar editor pos Anda, sekarang Anda akan melihat bidang khusus Anda, siap digunakan
Langkah selanjutnya adalah menambahkan argumen kueri khusus kami ke bidang kami. Katakanlah, kita perlu menunjukkan 3 posting dari kategori 1 diurutkan berdasarkan judul. Jadi argumen kueri kita akan terlihat seperti ini: ( Dalam format string )
'posts_per_page=3&cat=1&orderby=title'
Inilah yang sekarang harus Anda masukkan di bidang khusus Anda. Setelah dimasukkan, simpan nilai bidang khusus Anda
Berikutnya adalah membangun kueri khusus di single.php Anda. Apa yang diperlukan di sini, kita perlu mendapatkan nilai dari bidang khusus kami, yang sebenarnya adalah argumen kueri kami, dan mengumpankannya ke contoh baru WP_Query
untuk mengambil posting. Kita juga perlu memeriksa apakah kita benar-benar memiliki nilai yang disimpan di bidang khusus itu, jika bidang khusus kosong, tidak menunjukkan apa pun
KODE:
Anda dapat mencoba sesuatu seperti ini di single.php setelah posting tunggal.
$args = get_post_meta( get_queried_object_id(), 'custom_query_arguments', true );
// check if the custom field has a value
if( ! empty( $args ) ) {
$q = new WP_Query( $args );
if( $q->have_posts() ) {
while( $q->have_posts() ) {
$q->the_post();
the_title();
}
wp_reset_postdata();
}
}
Jika pengguna ingin menghapus kueri khusus, ia cukup menghapus nilai bidang kustom dan membiarkan bidang khusus kosong. Jika ia perlu menampilkan kueri yang sama tetapi dari kategori 10 dan total 5 posting, ia bisa saja mengganti nilai aslinya dengan yang berikut ini.
'posts_per_page=5&cat=10&orderby=title'
BEBERAPA CATATAN:
Penting untuk menggunakan format dan sintaks yang benar saat memasukkan info ke dalam bidang dan kotak meta khusus ini. Kesalahan sintaks atau info yang salah akan menyebabkan hasil yang tidak diinginkan atau bahkan kesalahan fatal. Penting untuk memberi tahu klien Anda tentang info tersebut
JAWABAN ASLI
Saya tidak mengerti apa yang ingin Anda capai, tetapi dari apa yang dapat saya katakan, itu adalah dua hal yang terpisah
PILIHAN 1
apply_filters('the_content', $content);
digunakan untuk menerapkan filter konten ke konten posting mentah tanpa filter, yang biasanya berasal dari penggunaan $post->post_content
. Filter ini termasuk filter terkenal wp_autop
yang menambahkan tag p kethe_content()
apply_filters('the_content', $content);
biasanya digunakan bersama dengan di get_posts
mana seseorang bekerja secara langsung dengan WP_Post
objek tanpa menggunakan setup_postdata( $post )
yang membuat tag template seperti the_content()
tersedia untuk digunakan
PILIHAN 2
do_shortcode
digunakan untuk menambahkan kode pendek di mana saja dalam file templat di luar editor teks di bagian belakang layar editor halaman, pada dasarnya memfilter kode pendek melalui kaitnya.
Penggunaan yang benar adalah sebagai berikut
Contoh: Menambahkan kode singkat galeri dalam file templat
echo do_shortcode( '[gallery]' )
EDIT 1
Dari komentar Anda, saya tidak akan menggunakan kode pendek sama sekali.
Jika Anda tidak akan menambahkan kode pendek melalui editor teks dan akan menambahkannya langsung (hardcode) melalui do_shortcode
dalam file templat, saya lebih suka hanya menambahkan fungsi ke templat
Contoh:
Jika Anda memiliki fungsi kode pendek berikut
function footag_func( $atts ) {
return "foo = {$atts['foo']}";
}
add_shortcode( 'footag', 'footag_func' );
Anda cukup memanggil fungsi secara langsung di template seperti
echo footag_func();
Ini jauh lebih cepat dengan cara ini karena kode pendek tidak perlu diuraikan
EDIT 2
Sejujurnya di sini, Anda sepenuhnya melakukan kesalahan ini dari hasil edit. Itu sebabnya saya tidak bisa mengerti pertanyaan awal Anda
Kadang-kadang, saya perlu menambahkan meta posting pada posting / halaman / jenis posting kustom, sehingga mereka dapat menambahkan kode pendek (slider, formulir kontak dll) atau hanya teks sederhana. Ini adalah teks yang diajukan.
Untuk membuat kode pendek berfungsi, saya menggunakan opsi 1 .....
Bidang adat yang tidak bidang teks dan pasti tidak dimaksudkan untuk digunakan untuk mengeksekusi shortcode dan untuk itu slider materi atau bentuk kontak. Bidang khusus tidak boleh digunakan untuk menggantikan editor teks di pos dan halaman.
Seperti yang saya katakan sebelumnya, apply_filters('the_content', $content);
dimaksudkan untuk digunakan untuk menerapkan format ke konten posting mentah.
Anda punya dua pilihan di sini
Gunakan do_shortcode
langsung dalam file template, yang saya tidak akan merekomendasikan menggunakan fungsi lebih cepat karena shortcode tidak perlu diuraikan
Gunakan kode pendek langsung di editor teks untuk halaman / posting tertentu
Saya sangat merekomendasikan agar Anda melihat struktur baru dan apa yang ingin Anda capai. Bidang khusus bukan editor teks dan tidak dapat menjalankan kode pendek atau bilah geser.
Rekomendasi saya mungkin untuk melihat ke widget khusus atau sistem yang dapat Anda gunakan dengan bidang khusus