apply_filters ('the_content', $ content) vs do_shortcode ($ content)

21

Katakanlah saya memiliki opsi tema atau area teks postmeta khusus. Sekarang saya ingin mengeksekusi beberapa shortcode, teks umum, gambar dll.

Apa yang akan menjadi praktik terbaik dan mengapa?

Pilihan 1:

$content = //my text area data;
echo apply_filters('the_content', $content);

Pilihan 2:

$content = //my text area data;
echo do_shortcode($content);

Mohon jelaskan kepada saya mana yang akan menjadi praktik terbaik dan mengapa.

EDIT

Biarkan saya menggambarkan skenario secara rinci. Saya mengembangkan tema untuk klien dengan persyaratan mereka. 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 . Sekarang, saya mendengar dari seseorang bahwa ini adalah cara yang salah, dan saya harus menggunakannya do_shortcode. Tetapi mereka tidak memberi saya penjelasan mengapa itu salah. Itu sebabnya saya bertanya.

Seluruh proses ini dapat dilakukan di editor teks default wp. Tetapi saya perlu membuat opsi-opsi itu untuk penggunaan khusus templat, itulah yang diinginkan klien saya.

тнє Sufi
sumber

Jawaban:

16

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_shortcodebekerja, 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_Queryuntuk 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_autopyang menambahkan tag p kethe_content()

apply_filters('the_content', $content); biasanya digunakan bersama dengan di get_postsmana seseorang bekerja secara langsung dengan WP_Postobjek 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_shortcodedalam 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_shortcodelangsung 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

Pieter Goosen
sumber
1
Pieter berterima kasih atas penjelasannya. Saya sudah tahu itu. Tapi saya bertanya, opsi mana yang akan lebih akurat jika targetnya hanya untuk output shortcode dari post meta / theme option textarea. Saya menggunakan option1 untuk mendapatkan konten yang difilter, dan itu menjadi kebiasaan saya. Dan menggunakan opsi 1 bahkan untuk hanya mencetak kode pendek dari file teks. Begitu bertanya.
тнє Sufi
Saya melihat hasil edit. Saya mengerti maksud Anda. Tapi skenario saya berbeda. Seperti, ada teks yang diarsipkan / area, dan beberapa shortcode. Sekarang pengguna dapat memasukkan kode pendek apa pun di area itu. Jadi saya tidak bisa langsung menggunakan fungsi. Saya perlu menjaga bagian itu tetap dinamis.
тнє Sufi
Di mana bidang teks itu, apakah itu sama dengan di layar editor halaman belakang
Pieter Goosen
Ini bisa menjadi meta pos. Atau itu bisa menjadi opsi tema. Saya menggunakan filter konten untuk keduanya.
тнє Sufi
Maaf, tapi semua ini tidak masuk akal. Mengapa Anda ingin menggunakan kode pendek di bidang khusus. Mengapa Anda bahkan menggunakan kode pendek?
Pieter Goosen