Obter IDs de postagem do WP_Query?


27

Existe uma maneira de recuperar uma matriz de IDs de postagem consultados a partir do seguinte:

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

Acompanhamento:

Eu costumava wp_list_pluckrecuperar uma matriz de IDs de postagem:

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

Em seguida, converteu o array em uma string usando a função implode:

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

Desculpe pela pergunta ambígua.


Rick, sua pergunta é ambígua. Seja muito claro o que você deseja antes de postar uma pergunta. Isso evitará que todos respondam coisas irrelevantes. Você realmente precisa do ID pós retornou em uma string, não um array
— Pieter Goosen

11
Seu wp_reset_postdatadeve estar dentro e não fora a instrução if, caso contrário você pode redefinir dados de postagem quando ele não foi alterado
— Tom J Nowell

11
Se você deseja apenas os IDs, considere seriamente a resposta de s_ha_dum. Isso retornará os IDs sem também recuperar muitos outros dados do banco de dados que você joga fora.
— 22815 Chris Rae

Respostas:


43

Experimentar

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

Ler wp_list_pluck


5
Isso pode ser útil se você também precisar de todos os dados de cada postagem, não apenas dos IDs das postagens. Caso contrário, eu usaria a solução do @ s-ha-dum.
— Marian

74

Use o fieldsargumento na sua consulta.

fields (string) - Quais campos retornar. Todos os campos são retornados por
padrão. Existem duas outras opções: - 'ids' - Retorna uma matriz de IDs de postagem. - 'id => parent' - Retorna uma matriz associativa [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
Essa deve ser a resposta aceita, pois apenas consulta os IDs, tornando-os muito mais rápidos do que consultar tudo e do que 'arrancar' (repetir e re-armazenar) em uma nova matriz.
— Barry Kooij 05/02

Talvez você precise obter IDs APÓS o normal wp_query já foi executado, por exemplo, quando você mescla duas consultas posteriormente e precisa de IDs para excluir resultados da consulta anterior.
— trainoasis

2

Usar a solução de @ s-ha-dum é econômico se você precisar apenas obter os IDs e não tiver o conjunto de objetos de consulta anterior.

Aqui está o porquê:

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, no caso, você apenas especifica 'fields' => 'ids'nada mais do que os IDs.

Se você escolher 'fields' => 'id=>parent'(parece realmente engraçado), também receberá os IDs dos pais.

Qualquer outra maneira de usar o 'fields'argumento não terá nenhum impacto a partir do WordPress v4.7.

Mas caso você tenha a consulta, como no exemplo wp_list_pluck, fará o trabalho.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.