Ottenere gli ID dei post da WP_Query?

21 ott 2014, 18:01:37
Visualizzazioni: 94.9K
Voti: 49

Esiste un modo per recuperare un array di ID dei post dalla seguente query:

$latest = new WP_Query( array (
    'orderby'               => 'rand', // Ordina in modo casuale
    'posts_per_page'        => 3 // Limita a 3 post
));

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

    get_template_part( 'templates/content', 'post' ); // Carica il template del post

endwhile; endif; wp_reset_postdata(); // Reimposta i dati del post

Follow Up:

Ho utilizzato wp_list_pluck per recuperare un array di ID dei post:

$post_ids = wp_list_pluck( $latest->posts, 'ID' ); // Estrae gli ID dai post

Poi ho convertito l'array in una stringa utilizzando la funzione implode:

$post_ids_string = implode( ',', $post_ids ); // Converte in stringa separata da virgole

Scusate per la domanda ambigua.

3
Commenti

rick, la tua domanda è ambigua. Per favore sii molto chiaro su cosa vuoi prima di pubblicare una domanda. Questo eviterà a tutti di rispondere a cose irrilevanti. In realtà ti servono gli ID dei post restituiti come stringa, non come array

Pieter Goosen Pieter Goosen
21 ott 2014 19:01:11

Il tuo wp_reset_postdata dovrebbe essere dentro l'istruzione if, non fuori, altrimenti potresti resettare i dati del post quando non sono stati modificati

Tom J Nowell Tom J Nowell
21 ott 2014 19:19:20

Se ti interessano solo gli ID, dovresti seriamente considerare la risposta di s_ha_dum. Questo restituirà gli ID senza recuperare anche molti altri dati dal database che poi scarteresti.

Chris Rae Chris Rae
27 feb 2015 23:51:03
Tutte le risposte alla domanda 5
4
135

Utilizza l'argomento fields nella tua query.

fields (string) - Quali campi restituire. Tutti i campi sono restituiti di
default. Ci sono altre due opzioni: - 'ids' - Restituisce un array di ID dei post. - 'id=>parent' - Restituisce un array associativo [ parent => ID, … ].

https://developer.wordpress.org/reference/classes/wp_query/#return-fields-parameter

$latest = new WP_Query( array (
    'orderby'               => 'rand',
    'posts_per_page'        => 3,
    'fields' => 'ids'
));
var_dump($latest->posts);
21 ott 2014 18:23:00
Commenti

Questa dovrebbe essere la risposta accettata in quanto interroga solo gli ID, rendendola molto più veloce rispetto all'interrogazione di tutto e poi al "plucking" (ciclo e ri-archiviazione) in un nuovo array.

Barry Kooij Barry Kooij
5 feb 2016 18:31:24

Forse hai bisogno di ottenere gli ID DOPO che la normale wp_query è già stata eseguita, ad esempio quando unisci due query successivamente e hai bisogno degli ID per escludere i risultati dalla query precedente.

trainoasis trainoasis
5 ago 2019 12:09:10

Grazie per aver condiviso questa soluzione, tra le risposte a questa domanda, questa è la più efficiente.

Marcos Buarque Marcos Buarque
26 nov 2020 16:36:23

Questa dovrebbe essere la risposta accettata al 100%

MikeeeG MikeeeG
11 lug 2023 14:15:34
1
59

Prova

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

Leggi wp_list_pluck

21 ott 2014 18:16:56
Commenti

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

Marian Marian
31 mar 2017 11:09:45
0

Ti suggerisco questa soluzione

get_posts([
  'posts_per_page' => -1,
  'post_status' => 'publish',
  'post_type' => 'some-custom-post-type',
  'fields' => 'ids',
]);

e come risultato otterrai un array con gli ID all'interno ;)

array (size=5)
  0 => int 81002
  1 => int 77885
  2 => int 77180
  3 => int 74722
  4 => int 73312
3 set 2020 11:23:32
0

Utilizzare la soluzione di @s-ha-dum è economico se hai solo bisogno di ottenere gli ID e non hai un oggetto query già impostato.

Ecco il motivo:

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 specifichi solo 'fields' => 'ids' non otterrai altro che gli ID.

Se usassi 'fields' => 'id=>parent' (sembra davvero divertente) otterresti anche gli ID dei genitori.

Qualsiasi altro utilizzo dell'argomento 'fields' non avrà alcun effetto a partire da WordPress v4.7.

Ma nel caso in cui tu abbia la query come nell'esempio, wp_list_pluck farà il lavoro.

28 dic 2016 02:01:02
1

Perché non usare la funzione get_the_ID()? Condivido solo il codice del loop e mostra tutti gli ID dei post nella query.

// Il Loop
    if ( $the_query->have_posts() ) {
        while ( $the_query->have_posts() ) {
            $the_query->the_post();     
                    
            echo '<li>' . get_the_ID() . '</li>';
        }
    } else {
        // nessun post trovato
        $string = "nessun post trovato";
    }
12 lug 2021 22:27:41
Commenti

Penso che l'obiettivo fosse probabilmente ottenere gli ID in un array per fare qualcos'altro, non mostrarli effettivamente. Usare il loop per questo sembra eccessivo.

Rup Rup
13 lug 2021 01:47:13