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