web-dev-qa-db-fra.com

Comment changer la requête SQL pour wp_get_archive ()

J'utilise wp_get_archive() dans category.php.

Si je suis à la page de category=2, il ne devrait afficher que les archives de cette catégorie. Cependant c'est pour toutes les catégories.

Alors, comment puis-je changer la requête pour wp_get_archive() qui redirige uniquement vers le modèle d'archive pour cette catégorie spécifique
c'est le code dans mon category.php

<?php get_header(); ?>
 <?php 
   $args =array(               
                'posts_per_page' =>1,                 
           );
  $loop = new WP_Query( $args );                                            
  if($loop->have_posts()):while ( $loop->have_posts() ): $loop->the_post();
   the_content();
  endwhile;
  endif;
 ?>
 <?php wp_get_archives( array( 'type' => 'daily') ); ?>

et si le même code pour archive.php

2
user3848698

En regardant le code source pour wp_get_archives() , il existe un filtre appelé getarchives_join que vous pouvez utiliser pour restreindre wp_get_archives() à une catégorie spécifique

Vous devez également obtenir l'ID de la catégorie actuelle, ce qui est simple. Il vous suffit d'utiliser get_queried_object_id().

Vous pouvez essayer quelque chose comme ceci pour afficher les archives de la catégorie actuellement visualisée.

add_filter( 'getarchives_join', function ($r) 
{

    global $wpdb;

    if( is_category() ) {
        $category_id = get_queried_object_id();
        $r =  $wpdb->prepare( " INNER JOIN $wpdb->term_relationships AS tr ON $wpdb->posts.ID = tr.object_id  AND tr.term_taxonomy_id IN (%s)", $category_id );
    }
    return $r;

}, 10, 2 );

MODIFIER

Juste un ou deux commentaires à propos de votre code lors de votre dernière modification. Comme il s’agit du code des modèles category.php et archive.php, vous ne devez pas utiliser de requêtes personnalisées. Je suppose que c'est là que réside votre gros problème.

Utilisez pre_get_posts pour modifier la requête principale en fonction de vos besoins. Vous devez supprimer les requêtes personnalisées et revenir à la boucle par défaut de ces deux pages d'archive.

Voici à quoi devrait ressembler votre page de catégorie

<?php get_header(); ?>

<?php 
if( have_posts() ) {

    while ( have_posts() ) { 
        the_post();

        the_content();

    }

}
?>

<?php wp_get_archives( array( 'type' => 'daily') ); ?>

Ensuite, dans votre fichier functions.php, ajoutez le code suivant

add_action( 'pre_get_posts', function ( $q ) 
{

    if(    !is_admin() 
        && $q->is_main_query() 
        && (    $q->is_category() 
             || $q->is_date() 
            ) 
    ) {
        $q->set( 'posts_per_page', 1 );
    }
});

Cela définira les publications par page à un sur les pages d'archive et de catégorie.

2
Pieter Goosen