Filtrando postagens por metadados de postagem

8

Desejo filtrar postagens de maneira que apenas as postagens, para as quais get_post_meta($post->ID, "project_cat", true)(retorna um ID da postagem) igual ao meu valor especificado, sejam exibidas.

Alguma maneira de fazer isso?

Estou especialmente interessado em maneiras de fazê-lo compatível com o plugin WP-Paginate .

Porton
fonte
56% é muito baixo - lembre-se de retornar às suas perguntas antigas e aceitar as respostas corretas. Isso os tira da pilha 'sem resposta' e ajuda outras pessoas a encontrar soluções com mais facilidade. As pessoas também estarão mais dispostas a oferecer respostas se souberem que o OP responderá a elas. :)
Stephen Harris
Veja minha resposta abaixo. Não está claro quando / onde você deseja filtrar as postagens. Se você atualizar sua resposta para incluir isso, posso sugerir quais 'condicionais' você precisa verificar. Como alternativa, consulte o exemplo vinculado query_post. O princípio geral é o mesmo - definindo o meta_queryvalor.
21712 Stephen

Respostas:

11

O WP_Queryobjeto aceita um meta argumento pós. De um modo geral, você deseja fazer o seguinte:

  $my_query = new WP_Query( 
    array(
      'post_type' => 'post',
      'meta_query' => array(
        array(
          'key' => 'project_cat',
          'value' => 'my-value',
        )
      ),

        // Other query properties
    ) 
  );

Onde 'meu valor' é o seu 'valor especificado'.

Exemplo de uso:

  add_action( 'pre_get_posts' , 'my_pre_get_posts' );

  function my_pre_get_posts( $query ) {

    // Check this is main query and other conditionals as needed
    if( $query->is_main_query() ) {
        $query->set( 
          'meta_query', 
          array( 
            array(
              'key' => 'project_cat',
              'value' => 'my-value'
            )
          )
        );
    }

  }

Consulte WP_Query , pre_get_posts . Todos os condicionais estão disponíveis para você. Atualmente, isso é executado em todas as consultas principais - o que você provavelmente não deseja.

Como alternativa, você pode usar query_posts(uma maneira mais simples, mas muito menos eficiente) para alterar a consulta apenas para uma instância específica em um modelo.

Stephen Harris
fonte
@TahirYasin - veja o codex .
Stephen Harris
1

você pode filtrar a postagem com base no valor meta e exibir a postagem na página cms.

'meta_query' => array(
        array(
            'key'     => 'front_page',
            'value'   => 'yes',
            'compare' => 'LIKE',
        ))

consulte o tutorial para obter uma explicação passo a passo

http://www.pearlbells.co.uk/filter-posts-custom-fields-wp_query/

Liz Eipe C
fonte