WordPress : Autoriser le filtrage des boucles pour toutes les catégories
Je souhaite donner la possibilité de filtrer la page d’index et chaque page d’archives d’une catégorie par des éléments tels que les plus récents, les mieux notés, les plus consultés. Je sais comment filtrer une boucle pour chacun d’eux mais j’ai besoin d’une solution pour passer à chaque boucle filtrée.
Solution n°1 trouvée
Je recommanderais de définir une requête var pour définir vos filtres personnalisés, puis de transmettre la valeur (assainie) de cette requête var à query_posts()
(pour modifier la boucle principale, si tel est votre objectif).
Tout d’abord (dans functions.php
), définissez votre requête var :
<?php
function wpse47974_queryvars( $qvars )
{
$qvars[] = 'wpse47974_filter';
return $qvars;
}
add_filter( 'query_vars', 'wpse47974_queryvars' );
?>
Ensuite, dans le modèle, interrogez votre requête var. Je suppose que vous avez un ensemble prédéfini de filtres, défini dans un tableau,$wpse47974_valid_filters
:
<?php
// Query Tag Filter
$wpse47974_filter = '';
if ( isset( $wp_query->query_vars['wpse47974_filter'] ) && in_array( $wp_query->query_vars['wpse47974_filter'], $wpse47974_valid_filters ) ) {
$wpse47974_filter = $wp_query->query_vars['wpse47974_filter'];
}
?>
Ensuite (quelque part), vous devrez définir vos paramètres de requête en fonction de vos types de filtres. Je laisse cela comme un exercice pour le PO ; cependant, dans le code suivant, ces paramètres de requête sont représentés par » $wpse47974_filter_args['key'] => 'value';
« , et nous les ajoutons à un tableau, ici (dans le fichier de modèle) :
<?php
// Define an empty array to hold our filter parameters.
// This needs to be an array, in order not to generate
// errors later in the array_merge(), if no filter parameters
// are being applied to the default query
$wpse47974_filter_args = array();
// If our query var is set, apply the filter parameter
if ( '' != $wpse47974_filter ) {
$wpse47974_filter_args['key'] = 'value';
};
?>
Ensuite, toujours dans le fichier modèle, fusionnez la requête par défaut avec nos paramètres de filtre ci-dessus, à modifier query_posts()
(note : avant de sortir la boucle) :
<?php
// Globalize $wp_query
global $wp_query;
// Merge the default query with our filter parameters
$wpse47974_query_posts_args = array_merge( $wp_query->query, $wpse47974_filter_args );
// Modify the default query
query_posts( $wpse47974_query_posts_args );
?>
Maintenant, la requête de boucle principale est modifiée selon votre filtre.
Éditer
J’ai oublié une partie importante : comment insérer les variables de requête dans l’URL !
Dans votre modèle, où vous avez vos liens de filtre (ou boutons, ou autre), je suppose que vous avez une ancre HTML. Définissez l’ href
attribut comme suit, à l’aide de la add_query_arg()
fonction :
<a href="<?php echo add_query_arg( array( 'wpse47974_filter' => 'value' ) ); ?>">FILTER NAME</a>
Maintenant, lorsque vous cliquez sur le lien, la page est rechargée, avec votre requête var ajoutée à l’URL.
0 commentaire