Obter postagens por meta valor

27

Eu gostaria de listar todas as mensagens que têm uma chave de cp_annonceurcom o valor professionnel.

Principiante
fonte
8
Esteja ciente de que você deve ter pesquisado o problema e tentou resolvê-lo antes de postar uma pergunta. Se você não fosse novinho em folha aqui, provavelmente teria votado negativamente na questão e seguido em frente, em vez de respondê-la. No espírito de "Bem-vindo à pilha", esta é a sua abelha livre. Por favor, dê uma olhada em Como fazer perguntas futuras.
S_ha_dum
Este apenas me fez perder algum tempo por causa da resposta não aceita abaixo. Então, eu estou deixando aqui meus 2 centavos. Ele nunca respondeu, nem aceitou a resposta abaixo. Por que você não remove essas perguntas enquanto existem dezenas de perguntas semelhantes por aqui?
mircobabini 21/07

Respostas:

47

O que você está pedindo é um meta_query

$args = array(
   'meta_query' => array(
       array(
           'key' => 'cp_annonceur',
           'value' => 'professionnel',
           'compare' => '=',
       )
   )
);
$query = new WP_Query($args);

Toda a informação que você precisa está no Codex .

s_ha_dum
fonte
3
@ Iniciante: se isso resolveu o problema, marque-o como "Aceito". Procure a marca de seleção perto das setas de votação à esquerda.
S_ha_dum
8

Existem duas maneiras de fazer isso:

  1. Intercepte a consulta principal em pre_get_posts:

    add_action( 'pre_get_posts', function( $query )
    {
        // only handle the main query
        if ( ! $query->is_main_query() )
            return;
    
        $query->set( 'meta_key',   'cp_annonceur' );
        $query->set( 'meta_value', 'professionnel' );
    } );
  2. Adicionar uma consulta adicional

    $second_loop = get_posts( array(
        'meta_key'   => 'cp_annonceur',
        'meta_value' => 'professionnel',
    ) );
kaiser
fonte
2
É bom saber que o caminho mais curto com get_posts ()
Andrew Welch
8

Usei a seleção personalizada (pode ter um desempenho melhor)

$posts = $wpdb->get_results("SELECT * FROM $wpdb->postmeta
WHERE meta_key = 'cp_annonceur' AND  meta_value = 'professionnel' LIMIT 1", ARRAY_A);

Inspirado em https://tommcfarlin.com/get-post-id-by-meta-value/

michalzuber
fonte
11
Pode ter melhores desempenhos, mas descarta toda a idéia de ter funções do Wordpress para pesquisar (e armazenar em cache) dados. E, também, o que acontecerá se o WP decidir alterar a estrutura da tabela? :)
Erenor Paz
2

Podemos obter o resultado desejado com a Meta query do WordPress:

// the meta_key 'diplay_on_homepage' with the meta_value 'true'
$cc_args = array(
    'posts_per_page'   => -1,
    'post_type'        => 'post',
    'meta_key'         => 'cp_annonceur',
    'meta_value'       => 'professionnel'
);
$cc_query = new WP_Query( $cc_args );

Para obter um guia mais detalhado sobre a meta consulta, siga este blog: http://www.codecanal.com/get-posts-meta-values/

Jitendra Damor
fonte
Posso saber por que esse post_per_pagevalor é -1?
Abhay Gawade
11
@AbhayGawade Você pode limitar o número máximo de resultados usando esse parâmetro, -1 significa que não há limite.
Kush