Ricevi ID post da WP_Query?


27

Esiste un modo per recuperare una matrice di ID post interrogati dai seguenti:

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

Azione supplementare:

Ho usato wp_list_pluckper recuperare una matrice di post ID:

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

Quindi ha convertito l'array in una stringa usando la funzione implode:

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

Ci scusiamo per la domanda ambigua.


rick, la tua domanda è ambigua. Si prega di essere molto chiari su ciò che si desidera prima di pubblicare una domanda. Ciò salverà tutti dal rispondere a cose irrilevanti. In realtà hai bisogno che l'ID postale sia restituito in una stringa, non in un array
Pieter Goosen,

1
Il tuo wp_reset_postdatadovrebbe essere dentro non fuori l'istruzione if, altrimenti si potrebbe ripristinare dati post quando non è stato cambiato
Tom J Nowell

1
Se desideri solo gli ID, dovresti considerare seriamente la risposta di s_ha_dum. Ciò restituirà gli ID senza anche recuperare molti altri dati dal database che poi si butta via.
Chris Rae,

Risposte:


43

Provare

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

Leggere wp_list_pluck


5
Questo può essere utile se hai bisogno anche di tutti i dati per ogni post, non solo degli ID dei post. Altrimenti, andrei con la soluzione di @s-ha-dum.
Marian

74

Usa l' fieldsargomento nella tua query.

campi (stringa) - Quali campi restituire. Tutti i campi vengono restituiti per
impostazione predefinita. Ci sono altre due opzioni: - 'ids' - Restituisce un array di ID post. - 'id => parent' - Restituisce un array associativo [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
Questa dovrebbe essere la risposta accettata in quanto richiede solo l'ID che lo rende molto più veloce rispetto alla query di tutto e al "pizzicamento" (loop e re-archiviazione) in un nuovo array.
Barry Kooij,

Forse è necessario ottenere gli ID DOPO che il normale wp_query è già stato eseguito, ad esempio quando si uniscono due query in seguito e sono necessari gli ID per escludere i risultati dalla query precedente.
trainoasi,

2

L'uso della soluzione di @ s-ha-dum è economico se hai solo bisogno di ottenere gli ID e non hai impostato un oggetto query precedente.

Ecco perché:

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.*";

Perché nel caso non specifichi 'fields' => 'ids'altro, otterrai in cambio degli ID.

Se 'fields' => 'id=>parent'scegli (Sembra davvero divertente) otterrai anche l'ID del genitore.

Qualsiasi altro modo di utilizzare l' 'fields'argomento non avrà alcun impatto a partire da WordPress v4.7.

Ma nel caso tu abbia la query come nell'esempio wp_list_pluckfarà il lavoro.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.