Ejecutando consultas en tag.php

4

Probablemente estoy siendo denso, pero parece que no puedo entender cuál es el problema aquí.

El sitio que estoy desarrollando utiliza un bucle personalizado, con una consulta que excluye cualquier publicación marcada como archivada.

La razón por la que quiero editar la plantilla tag.php es generar meta personalizada en el extremo delantero y ajustar la apariencia de todas las publicaciones en las páginas de archivo.

Funciona perfectamente para la mayoría del sitio, pero en tag.php hace que la nube de etiquetas se rompa, haciendo que todas y cada una de las etiquetas pulsadas muestren la lista completa de publicaciones.

Cuando elimino la consulta, la nube de etiquetas funciona bien, pero las publicaciones archivadas aún se muestran y no se presentan de la forma en que deben estar.

El código de consulta que estoy usando es:

// 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 );

La clave meta, epi_pubarchive, es una casilla de verificación creada con Meta Box, que básicamente marca si la casilla está marcada o no.

He intentado eliminar el meta_query y probarlo con el post_type básico y los argumentos de orden, pero eso tampoco funcionará.

¿Alguien sabe cuál es el problema con la plantilla de etiqueta y las consultas?

¿Hay una mejor manera de lograr el resultado deseado?

    
pregunta Jon Watson 13.05.2016 - 22:01

1 respuesta

4

Esto se debe a que la consulta principal se está descartando y reemplazando con su consulta personalizada. No le ha dicho a su consulta personalizada que busque esa etiqueta, ¿por qué lo haría? También puede notar que su paginación está interrumpida por la misma razón, no le ha dicho a la nueva consulta en qué página se encuentra, ¿por qué sacaría la página correcta?

Lo que es más, esa consulta principal es costosa! ¿Por qué lo estás tirando? ¿Por qué no modificarlo en su lugar?

  

Imagina que enviaste a tu amigo para que te comiera un café con leche todas las mañanas, y todos los días, después de un viaje de 20 minutos, tiraste el café en el recipiente y dijiste: "Soy intolerante a la lactosa, dame un chocolate caliente". Luego se van para otro viaje de 20 minutos para buscar el chocolate caliente, dejando a su amigo molesto, y usted esperando 40 minutos en lugar de 20. ¿No sería más fácil si los golpeara en el hombro antes de que se fueran y dijera "Oye, yo? Cambié de opinión, quiero un chocolate caliente "?

Use el filtro pre_get_posts para cambiar las opciones en la consulta principal antes de que suceda, por ejemplo. Aquí le mostramos cómo puede cambiar la cantidad de publicaciones 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 );
    }
} );

También puede usar $query->set para cambiar otras opciones, y debe hacer esto para configurar los tipos de publicación y la exclusión de taxonomía.

Una nota final sobre el almacenamiento y el rendimiento de los datos

Nunca debes buscar todo excepto XYZ, quieres decir lo que estás buscando, no lo que no estás buscando. Es más lento y no se escala. A veces, en realidad es más rápido obtener todo y luego eliminarlo manualmente en PHP.

Entonces, en lugar de agregar publicaciones a un término archivado, considera usar un término no leído / no archivado, y busca esos en su lugar.

    
respondido por el Tom J Nowell 13.05.2016 - 23:01

Lea otras preguntas en las etiquetas