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_shortcode
bu 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_Query
almak 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_autop
p 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_posts
doğrudan WP_Post
nesnelerle ç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_shortcode
ve 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_shortcode
Kı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