Executando consultas no tag.php

4

Eu provavelmente estou sendo densa, mas não consigo descobrir qual é o problema aqui.

O site que estou desenvolvendo usa um loop personalizado, com uma consulta que exclui todas as postagens marcadas como arquivadas.

O motivo pelo qual eu quero editar o modelo tag.php é produzir meta personalizada para o front-end e ajustar a aparência de todas as postagens nas páginas do arquivo.

Funciona perfeitamente para a maioria do site, mas no tag.php faz com que a nuvem de tags seja interrompida, fazendo com que toda e qualquer tag clicada traga a lista de postagens completa.

Quando removo a consulta, a nuvem de tags funciona bem, mas as postagens arquivadas ainda são exibidas e não estão dispostas da maneira que precisam ser.

O código de consulta que estou usando é:

// The Queries
   $args = array(
      'post_type' => array('post', 'report', 'analysis', 'guest-blog'),
      'order'     => 'DESC',
      'meta_query'     => array(
            array(
               'key'     => 'epi_pubarchive',
               'value'   => 1,
               'compare' => '!=',
           )
      )
   );

 $the_query = new WP_Query( $args );

A meta key, epi_pubarchive, é uma caixa de seleção criada usando Meta Box, essencialmente verificando se a caixa está marcada ou não.

Eu tentei remover o meta_query e testá-lo com o post_type básico e ordenar args, mas isso também não funcionará.

Alguém sabe qual é o problema com o modelo de tag e as consultas?

Existe uma maneira melhor de alcançar o resultado desejado?

    
por Jon Watson 13.05.2016 / 22:01

1 resposta

4

Isso porque a consulta principal está sendo descartada e substituída pela consulta personalizada. Você não disse a sua consulta personalizada para procurar essa tag, então por que isso aconteceria? Você também pode notar que sua paginação está quebrada pelo mesmo motivo, você não disse à nova consulta em qual página está, por que ela puxaria a página correta?

Além disso, essa consulta principal é cara! Por que você está jogando fora! Por que não modificá-lo?

  

Imagine que você enviou um amigo para você tomar um café todas as manhãs, e todos os dias depois de uma viagem de 20 minutos, você jogou o café no lixo e disse: "Sou intolerante à lactose, me dê um chocolate quente". Eles então partem para outra viagem de 20 minutos para buscar o chocolate quente, deixando seu amigo irritado, e você espera 40 minutos ao invés de 20. Não seria mais fácil se você batesse no ombro deles antes de eles saírem e dissessem "Ei, eu mudou de idéia, eu quero um chocolate quente "?

Use o filtro pre_get_posts para alterar as opções na consulta principal antes que isso aconteça, por exemplo, Veja como você pode alterar quantas postagens são por página:

add_filter( 'pre_get_posts', function( \WP_Query $query ) {
    if ( $query->is_tag() && $query->is_main_query() ) {
        $query->set( 'posts_per_page', 5 );
    }
} );

Você também pode usar $query->set para alterar outras opções, e deve fazer isso para definir seus tipos de postagem e exclusão de taxonomia.

Uma nota final sobre armazenamento e desempenho de dados

Você nunca deve procurar por tudo, mas XYZ, você quer dizer o que você está procurando, não o que você não está procurando. É mais lento e não escala. Às vezes, é realmente mais rápido pegar tudo e depois removê-lo manualmente em PHP!

Então, em vez de adicionar postagens a um termo arquivado, considere usar um termo não lido / desarquivado e procurá-lo em vez disso?

    
por Tom J Nowell 13.05.2016 / 23:01