Apply_filters ('the_content', $ içerik) vs do_shortcode ($ içerik)


22

Bir tema seçeneğim veya özel postmeta metin alanım olduğunu varsayalım. Şimdi birden fazla kısa kod, genel metin, resim vb. Yürütmek istiyorum.

En iyi uygulama nedir ve neden?

Seçenek 1:

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

Seçenek 2:

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

Lütfen hangisinin en iyi uygulama olduğunu ve nedenini açıklayınız.

DÜZENLE

Senaryoyu ayrıntılı olarak açıklayayım. Müşterileri için gereksinimleri olan temalar geliştiriyorum. Bazen, kısa kodlar (kaydırıcı, iletişim formu vb.) Veya sadece basit bir metin ekleyebilmeleri için yazı / sayfalar / özel yazı türlerine meta meta eklemem gerekir. Dosyalanmış bir metin.

Kısa kodu çalıştırmak için 1. seçeneği kullanıyorum . Şimdi, birinden bunun yanlış bir yol olduğunu duydum ve kullanmalıyım do_shortcode. Ama bana bunun neden yanlış olduğuna dair bir açıklama yapmadılar. Bu yüzden soruyorum.

Tüm bu işlem wp'nin varsayılan metin editöründe yapılabilir. Ancak bu seçenekleri şablona özel kullanım için oluşturmam gerekiyor, müşterilerim bunu istiyor.

Yanıtlar:


16

SORU VE YANIT VERİLDİ

Bazen sizi naglayan ve daha sonra tekrar hayatta avlayan bu sorular vardır ve bu böyle bir sorudur.

Bu soru soruna alternatif bir çözüm düşünmemi sağladı. Daha önce de belirttiğim gibi, özel alanlar ve meta kutular küçük meta veri parçalarını saklamak için vardır ve kısa kod ve işlevleri çalıştırabileceğiniz içerik yayınlamak için bir uzantı olarak davranmazlar. Ayrıca, daha önce de belirttiğim gibi, yönteminiz yanlış ve kullanılmamalıdır

Yayınınızda ilginç bulduğum şey, yanlışlıkla kullanıcı girdisinden özel içerik görüntülemek için özel alanlar ve meta kutular kullandığınız. Bu yüzden oturdum ve bu işi yapmak ve özel alan verilerini ve meta kutu verilerini doğru bir şekilde kullanmak için olası bir yol düşündüm

Bu benim fikrim:

SENARYO:

NOT: Bu, herhangi bir ihtiyaca uyacak şekilde değiştirilebilir

Tek bir gönderide, kullanıcı gönderiden sonra özel içeriği ihtiyaçlarına göre dinamik olarak göstermek ister / gerektirir. Bu dinamik olmalı. İçerik özel bir sorgu olmalıdır ve kullanıcının istediği zaman neyi göstereceğini ve ne istediğini seçmesi gerekir

MÜMKÜN ÇÖZÜM:

Kısa kodlar, özel alanlarda yürütülemediği için burada çalışmaz. Ne olacak do_shortcodebu dinamik değildir ve biz istemiyoruz şey kodlanmış olarak, çalışır. Sorunuzda olduğu gibi, özel alanları kullanacağız. Yine vurguluyorum, özel bir sorgu veya kısa kod yürütmek için özel alanı kullanmayın

PLAN:

Özel alanı yalnızca sorgu bağımsız değişkenlerimizi kaydetmek için kullanacağız , hepsi bu. Yani, yaptığımız şey, adında özel bir alan oluşturmak custom_query_arguments. Yazı editörü ekranınızda artık özel alanınızı kullanıma hazır olarak göreceksiniz

Bir sonraki adım, özel sorgu bağımsız değişkenlerimizi alanımıza eklemek olacaktır. Diyelim ki kategori 1'den başlığa göre sıralanmış 3 gönderi göstermemiz gerekiyor. Bu yüzden sorgu bağımsız değişkenlerimiz şöyle görünmelidir: ( Dize biçiminde )

'posts_per_page=3&cat=1&orderby=title'

Şimdi özel alanınıza girmeniz gereken budur. Girdikten sonra, özel alanınızın değerini kaydedin

Sonra single.php içinde özel sorgu oluşturmak olacaktır. Burada ihtiyaç duyulan şey, değeri aslında sorgu argümanlarımız olan özel alanımızdan almamız ve yayınları WP_Queryalmak için yeni bir örneğine beslememiz gerekir . Ayrıca, bu özel alana gerçekten kaydedilmiş bir değere sahip olup olmadığımızı da kontrol etmeliyiz, özel alan boşsa hiçbir şey gösterme

KOD:

Tek bir gönderinin hemen ardından single.php dosyasında böyle bir şey deneyebilirsiniz.

$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();
    }

} 

Kullanıcı özel sorguyu kaldırmak istiyorsa, yalnızca özel alanın değerini silebilir ve özel alanı boş bırakabilir. Aynı sorguyu göstermesi gerekiyorsa, ancak kategori 10 ve toplam 5 yayından, orijinal değeri aşağıdaki ile değiştirebilir

'posts_per_page=5&cat=10&orderby=title'

BİRKAÇ NOTLAR:

Bu özel alanlara ve meta kutulara bilgi girerken doğru sözdizimini ve biçimi kullanmak önemlidir. Sözdizimi hataları veya yanlış bilgi, istenmeyen çıktılara hatta ölümcül hatalara neden olur. Müşterilerinize bu tür bilgileri bildirmek önemlidir

ORİJİNAL CEVAP

Neyi başarmaya çalıştığınızı anlamıyorum, ama size söyleyebileceğimden, bunlar iki ayrı şey

SEÇENEK 1

apply_filters('the_content', $content);içerik filtrelerini, genellikle kullanımından gelen ham filtrelenmemiş posta içeriğine uygulamak için kullanılır $post->post_content. Bu filtreler, wp_autopp etiketleri ekleyen ünlü filtreyi içerir.the_content()

apply_filters('the_content', $content); genellikle , şablon etiketlerini kullanım için kullanılabilir hale getiren, kullanmadan get_postsdoğrudan WP_Postnesnelerle çalıştığı yerlerle bağlantılı olarak kullanılır.setup_postdata( $post )the_content()

SEÇENEK 2

do_shortcode temel olarak kısa kodları kancalarından filtreleyerek, sayfa düzenleyici ekranının arka ucundaki metin düzenleyicisinin dışındaki şablon dosyalarına herhangi bir yere bir kısa kod eklemek için kullanılır.

Doğru kullanım aşağıdaki gibidir

Örnek: Bir şablon dosyasına galeri kısa kodunu ekleme

echo do_shortcode( '[gallery]' )

DÜZENLEME 1

Yorumlarınızdan, o zaman kısa kod kullanmam.

Metin düzenleyicisi aracılığıyla bir kısa kod eklemeyecekseniz do_shortcodeve bir şablon dosyası üzerinden doğrudan (sabit kod) ekleyecekseniz, işlevi şablona eklemeyi tercih ederim

Misal:

Aşağıdaki kısa kod işlevine sahipseniz

function footag_func( $atts ) {
    return "foo = {$atts['foo']}";
}
add_shortcode( 'footag', 'footag_func' );

İşlevi doğrudan aşağıdaki gibi bir şablonda çağırabilirsiniz

echo footag_func();

Kısa kodun ayrıştırılması gerekmediğinden bu şekilde çok daha hızlıdır

DÜZENLEME 2

Burada dürüst olmak gerekirse, bunu düzenlemenizden tamamen yanlış yapıyorsunuz. Bu yüzden ilk sorunuzu anlayamadım

Bazen, kısa kodlar (kaydırıcı, iletişim formu vb.) Veya sadece basit bir metin ekleyebilmeleri için yazı / sayfalar / özel yazı türlerine meta meta eklemem gerekir. Dosyalanmış bir metin.

Kısa kodun çalışması için seçenek 1'i kullanıyorum .....

Özel alanlar vardır değil metin alanları ve mutlaka kısa kod yürütmek ve bu husus sürgü veya iletişim formları için kullanılabilir anlamına gelmez. Özel alanlar hiçbir zaman yazılarda ve sayfalarda metin düzenleyicinin yerine kullanılmamalıdır.

Daha önce belirttiğim gibi, apply_filters('the_content', $content);ham post içeriğine biçimlendirme uygulamak için kullanılır.

Burada iki seçeneğiniz var

  • do_shortcodeKısa kodun ayrıştırılması gerekmediği için, işlevi kullanmak daha hızlı olduğu için önermediğim şablon dosyalarında doğrudan kullanın

  • Belirli bir sayfa / yazı için doğrudan metin düzenleyicide kısa kodu kullanın

Yapılarınıza ve neye ulaşmak istediğinize yeni bir göz atmanızı şiddetle tavsiye ederim. Özel alanlar metin düzenleyici değildir ve kısa kodları veya kaydırıcıları yürütemez.

Benim tavsiyem belki de özel widget'lara veya özel alanlarla kullanabileceğiniz bir sisteme bakmak


1
Pieter açıklama için teşekkürler. Bunu zaten biliyorum. Ama soruyordum, eğer hedef sadece meta / tema seçenekleri textarea'dan kısa kodlar çıkarmaksa, hangi seçeneğin daha doğru olacağını soruyordum. Filtrelenmiş içeriği almak için option1 kullanıyorum ve bu benim bir alışkanlık oldu. Ve yalnızca bir metin dosyasından bir kısa kod yazdırmak için seçenek 1'i kullanarak. Bu yüzden soruyordu.
тнє Sufi

Düzenlemeyi gördüm. Ne demek istediğini anladım. Ama benim senaryom farklı. Metin alanı / alanı ve birkaç kısa kod var. Artık kullanıcı bu alana herhangi bir kısa kod / kodu koyabilir. Yani doğrudan bir işlevi kullanamıyorum. Bu kısmı dinamik tutmam gerekiyor.
тнє Sufi

Bu metin alanı nerede, arka uç sayfa düzenleyici ekranındakiyle aynı mı
Pieter Goosen

Bir yazı meta olabilir. Veya bir tema seçeneği olabilir. Ben her ikisi için the_content filtre kullanın.
тн

Üzgünüm, ama sonra bunların hiçbiri mantıklı değil. Özel alanlarda neden kısa kodlar kullanmak istiyorsunuz? O zaman neden kısa kodlar bile kullanıyorsunuz?
Pieter Goosen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.