¿Obtiene los ID de publicación de WP_Query?

21

¿Hay alguna manera de recuperar una matriz de ID de publicación consultada de la siguiente manera?

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

Seguimiento:

Usé wp_list_pluck para recuperar una matriz de ID de publicación:

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

Luego convirtió la matriz en una cadena usando la función implode:

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

Lo siento por la pregunta ambigua.

    
pregunta Rich 21.10.2014 - 17:01

3 respuestas

37

Probar

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

Lea wp_list_pluck

    
respondido por el shanebp 21.10.2014 - 17:16
55

Use el argumento fields en su consulta.

  

fields (cadena) - Qué campos devolver. Todos los campos son devueltos por
  defecto. Hay otras dos opciones:    - 'ids': devuelve una matriz de ID de publicación.    - 'id = > parent' - Devuelve una matriz asociativa [parent = > ID, ...].

     

enlace

$latest = new WP_Query( array (
    'orderby'               => 'rand',
    'posts_per_page'        => 3,
    'fields' => 'ids'
));
var_dump($latest->posts);
    
respondido por el s_ha_dum 21.10.2014 - 17:23
1

El uso de la solución de @ s-ha-dum es económico si solo necesita obtener los ID y no tiene el conjunto de objetos de consulta anterior.

Aquí es por qué:

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

Porque en el caso de que solo especifique 'fields' => 'ids' nada más obtendrá a cambio de los ID.

Si irías con 'fields' => 'id=>parent' (se ve muy divertido) también obtendrás la identificación de los padres.

Cualquier otra forma de usar el argumento 'fields' no tendrá ningún impacto a partir de WordPress v4.7.

Pero en caso de que tenga la consulta como en el ejemplo, wp_list_pluck hará el trabajo.

    
respondido por el prosti 28.12.2016 - 01:01

Lea otras preguntas en las etiquetas