Wp_query sonucundan bir dizi veriyi nasıl alabilirim?


35

WP_Query yöntemi ile bir sorgu çalıştırdığınızda, bir nesneyi aldım. Öyleyse, eşyaları görüntülemek için döngüyü yapabilirim. Ancak amacım hiçbir şey göstermemek, bunun yerine "foreach ..." gibi bir şey yaparak bazı veri göndermek istiyorum. Döndürebileceğim ve veri alabileceğim bir dizi veriyi nasıl alabilirim?


2
Doğrudan posta verilerine doğrudan şablon etiketleri kullanmak yerine erişmek arasında göz önünde bulundurulması gereken önemli bir fark, filtrelerin verilere uygulanmadığı ve bazı işlevlerin bozulabileceğidir.
Milo

Yanıtlar:


73

WP_Query işlev başvurusunu WordPress kodeksinde okumalısınız . Orada bakılacak çok fazla örnek var. A kullanarak sonuç kümesinin üzerinden geçmek istemiyorsanız while, sorgunun döndürdüğü tüm gönderileri WP_Querymülk içinde bulabilirsiniz posts.

Örneğin

$query = new WP_Query( array( 'post_type' => 'page' ) );
$posts = $query->posts;

foreach($posts as $post) {
    // Do your stuff, e.g.
    // echo $post->post_name;
}

1
Yine de linklediğiniz örneklerin hiçbiri gönderilerin nasıl işleneceğini göstermiyor. Bu yüzden cevap vermen güzel, belgelerde yer almaması üzücü. Başka bir ipucu: Eşsiz bir yayında bir eşleşme yapıyorsanız 'posts_per_page'=>1, args ile bunun gibi bir işlevi kullanabilirsiniz . function wp_queryfirstpost($args) { $q=new WP_Query($args); $pp=$q->get_posts(); $firstpost=false;if ($pp) $firstpost=$pp[0]; wp_reset_postdata(); return $firstpost; }
Henrik Erlandsson

@rofflox: Sen bir azizsin! Get_the_title / ID / younameit'i atlatmak için harika.
Flakon

8
Bunun $query->postsyerine kullanmanız gerekir $query->get_posts(), sorgu ayrıştırma işleminin yeniden başlatılmasını ve gereksiz ek veritabanı sorgularının tetiklenmesini tetikler
Tom J Nowell

) (get_posts> query-, $; beklendiği gibi çalışmıyor. Neden olduğundan emin değilim, ancak sorgudan daha az gönderi döndürür. Buraya bakın: stackoverflow.com/questions/25395299/...
Laxmana

1
Bu cevap açıktır, bazı argümanlarla yeni bir WP_Query oluşturduğunuzda get_posts () yöntemi hemen dahili olarak çağrılır ve TEKRAR ARAMAMALIDIR! Yukarıdaki örnekte gösterildiği gibi tekrar ararsanız, argüman ve sonuçlara bağlı olarak ilk çalıştırmayı (dahili bayraklar küme, vb.) Oluşturur ve farklı bir (daha küçük) sonuç kümesi döndürür. ya da hiç sonuç yok. TomJNowell ve Laxmana'nın yukarıda önerdiği gibi, gönderi verilerini almak için $ query-> posts kullanmalıdır.
ivanhoe,

11

Aslında, while()döngü kullanmayı reddetmeniz gerekmez . Aynı WP_Post Nesnesi zaten postözellikte saklanmış :

        $query = new WP_Query( $args );

        if ( $query->have_posts() ) {

            while ( $query->have_posts() ) {

                $query->the_post();

                // now $query->post is WP_Post Object, use:
                // $query->post->ID, $query->post->post_title, etc.

            }

        }

2
ifgereksizdir.
Akkumulator

2
Hayır, ifgereksiz değil. Bu kesin durumda, ancak çoğu üretim durumunda, if ile süre arasında çalıştırılacak kodunuz vardır.
magi182

2
@ magi182 Bu kesin durumda, onu gereksiz kılan. İnsanlar bunu ne zaman kullanacaklarını öğrenmelidir.
frodeborli

4
@frodeborli, "İnsanlar gerekir" ile başlayan ifadeler hakkındaki güzel şey, hemen hemen her zaman "insanlar olmaz" ifadesinin yerini alabilmeniz ve ifadenin hala doğru olarak test edilmesidir.
magi182

1
@ magi182 Yukarıdaki kodu tamamlayacak kod satırlarına sahip olmak için muhtemelen yüzlerce numara yapabilirim.
frodeborli

-1

get_posts( $args )bunun yerine kullanabilirsiniz wp_Query(), bu da size gönderilerin bir listesini verir.

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.