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.