WP_Query'den posta kimliklerini al?


27

Aşağıdakilerden sorgulanan bir dizi posta kimliğini alabilmemin bir yolu var mı:

$latest = new WP_Query( array (
    'orderby'               => 'rand',
    'posts_per_page'        => 3
));

if ( $latest -> have_posts() ) : while ( $latest -> have_posts() ) : $latest -> the_post();

    get_template_part( 'templates/content', 'post' );

endwhile; endif; wp_reset_postdata();

Takip et:

wp_list_pluckBir dizi kimliği almak için kullanılır :

$post_ids = wp_list_pluck( $latest->posts, 'ID' );

Sonra diziyi implode işlevini kullanarak bir dizgeye dönüştürdüm:

$post_ids_string = implode( ',', $post_ids );

Belirsiz soru için özür dilerim.


Rick, sorunuz belirsiz. Lütfen bir soru göndermeden önce ne istediğinizi açıkça belirtin. Bu, herkesi alakasız şeylere cevap vermekten kurtaracaktır. Aslında yazı kimliğinin bir dizide değil
Pieter Goosen,

1
Sizin wp_reset_postdatao değiştirilmedi zaman aksi takdirde sonrası verilerini sıfırlamak olabilir, değilse deyimi dışında içeride olmalı
Tom J Nowell

1
Sadece kimlikleri istiyorsanız, s_ha_dum'in cevabını ciddiye almalısınız. Bu, kimlikleri, daha sonra attığınız veritabanından başka pek çok veri almadan da döndürür.
Chris Rae,

Yanıtlar:


43

Deneyin

$post_ids = wp_list_pluck( $latest->posts, 'ID' );

Okuma wp_list_pluck


5
Bu, yalnızca yayın kimlikleri için değil, her yayın için tüm verilere de ihtiyacınız varsa yararlı olabilir. Aksi takdirde, @ s-ha-dum'un çözümüyle giderdim.
Marian

74

Kullanım fieldsSorgunuzda argüman.

fields (string) - Döndürülecek alanlar. Tüm alanlar
varsayılan olarak döndürülür . İki seçenek daha var: - 'ids' - Bir dizi posta kimliği döndür. - 'id => parent' - İlişkisel bir dizi döndürür [parent => ID,…].

http://codex.wordpress.org/Class_Reference/WP_Query#Return_Fields_Parameter

$latest = new WP_Query( array (
    'orderby'               => 'rand',
    'posts_per_page'        => 3,
    'fields' => 'ids'
));
var_dump($latest->posts);

12
Bu, kabul edilen cevap olmalıdır, çünkü sadece ID'yi sorgulamaktan çok daha hızlı hale getirmesini ve onu yeni bir dizide 'koparmaktan' (döngü ve yeniden saklamaktan) daha hızlı kılar.
Barry Kooij

Belki de normalden sonra ID'leri almanız gerekir, örneğin daha sonra iki sorguyu birleştirdiğinizde ve önceki sorgudan sonuçları dışlamak için ID'lere ihtiyaç duyduğunuzda, wp_query zaten çalıştırılmıştır.
trainoasis

2

@ S-ha-dum'un çözümünü kullanmak, yalnızca kimlik numarası almanız gerekiyorsa ve önceki sorgu nesnesi ayarınız yoksa ekonomiktir.

İşte nedeni:

switch ( $q['fields'] ) {
    case 'ids':
        $fields = "$wpdb->posts.ID";
        break;
    case 'id=>parent':
        $fields = "$wpdb->posts.ID, $wpdb->posts.post_parent";
        break;
    default:
        $fields = "$wpdb->posts.*";

Çünkü sadece 'fields' => 'ids'hiçbir şey belirtmemeniz durumunda, ID'den daha fazla alacaksınız.

Birlikte gidersen 'fields' => 'id=>parent'(Gerçekten komik görünüyor) ebeveyn kimliklerini de alacaksın.

'fields'Argümanı kullanmanın başka bir yolu WordPress v4.7'den itibaren herhangi bir etkiye sahip olmayacaktır.

Ancak sorgunuz varsa, örnekte olduğu gibi wp_list_pluckişi yapacak.

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.