Exécution de requêtes dans tag.php

4

Je suis probablement dense, mais je n'arrive pas à comprendre le problème.

Le site que je développe utilise une boucle personnalisée, avec une requête qui exclut tous les messages cochés comme archivés.

La raison pour laquelle je souhaite modifier le modèle tag.php est de générer une méta personnalisée au début et d'ajuster l'apparence de toutes les publications sur les pages d'archives.

Cela fonctionne parfaitement pour la majorité du site, mais sur tag.php, le nuage de tags se brise, ce qui permet à tous les tags sur lesquels vous cliquez d'afficher la liste complète des publications.

Lorsque je supprime la requête, le nuage de tags fonctionne correctement, mais les publications archivées sont toujours affichées et ne sont pas présentées comme elles doivent être.

Le code de requête que j'utilise est le suivant:

// 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 clé méta, epi_pubarchive, est une case à cocher créée à l'aide de Meta Box, vérifiant si cette case est cochée ou non.

J'ai essayé de supprimer la méta_query et de l'essayer avec les arguments de base post_type et order, mais cela ne fonctionnera pas non plus.

Quelqu'un sait quel est le problème avec le modèle de balise et les requêtes?

Existe-t-il un meilleur moyen d’atteindre le résultat souhaité?

    
posée Jon Watson 13.05.2016 - 22:01

1 réponse

4

En effet, la requête principale est ignorée et remplacée par votre requête personnalisée. Vous n'avez pas dit à votre requête personnalisée de rechercher cette balise, alors pourquoi le ferait-elle? Vous remarquerez peut-être également que votre pagination est interrompue pour la même raison. Vous n'avez pas indiqué à la nouvelle requête la page sur laquelle vous vous trouvez. Pourquoi devrait-elle afficher la bonne page?

De plus, cette requête principale coûte cher! Pourquoi le jetez-vous! Pourquoi ne pas le modifier à la place?

  

Imaginez que vous ayez envoyé votre café chaque matin à votre ami. Après 20 minutes de voyage, vous jetiez le café à la poubelle tous les jours et vous disiez: "Je suis intolérant au lactose, donnez-moi plutôt un chocolat chaud". Ils partent ensuite pour un autre voyage de 20 minutes pour aller chercher le chocolat chaud, laissant votre ami énervé, et vous attendez 40 minutes au lieu de 20. Ne serait-il pas plus facile de les taper sur l’épaule avant de partir et de leur dire "Hey I J'ai changé d'avis, je veux un chocolat chaud "?

Utilisez le filtre pre_get_posts pour modifier les options de la requête principale avant qu'elle ne se produise, par exemple. voici comment modifier le nombre de publications par page:

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

Vous pouvez également utiliser $query->set pour modifier d'autres options. Pour cela, vous devez définir vos types de publication et votre exclusion de taxonomie.

Une note finale sur le stockage des données et les performances

Vous ne devriez jamais tout rechercher, mais XYZ, vous voulez dire ce que vous cherchez, pas ce que vous ne cherchez pas. C'est plus lent et n'a pas d'échelle. Parfois, il est en fait plus rapide d’obtenir tout puis de le supprimer manuellement en PHP!

Ainsi, au lieu d’ajouter des publications à un terme archivé, envisagez d’utiliser un terme non lu / non archivé et de rechercher ceux-ci?

    
réponse donnée Tom J Nowell 13.05.2016 - 23:01

Lire d'autres questions sur les étiquettes