web-dev-qa-db-fra.com

Comment définir un filtre par catégorie dans une page personnalisée

Je suis encore relativement nouveau dans le monde merveilleux du développement WordPress et espérais obtenir de l'aide pour une question.

J'ai un modèle de page simple qui extrait tous les articles d'une certaine catégorie et les affiche dans un ordre défini. Tout va bien, mais ce que je voudrais faire, c'est ajouter un filtre pour que l'utilisateur puisse sélectionner une catégorie enfant dans la liste, puis la page s'actualisera avec uniquement les messages de la catégorie enfant affichée.

Le Codex a une suggestion impliquant la fonction wp_dropdown_category(), mais son action vous amène à l'archive des catégories, ce que je ne souhaite pas; Je dois garder l'utilisateur dans la page.

J'utilise :

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array (
    'cat'            => 1,
    'posts_per_page' => 10,
    'paged'          => $paged
);
$query = new WP_Query( $args );

pour la sélection d'origine et avait à l'esprit de changer 'cat' => pour la sortie sélectionnée dans la liste mais ne peut pas le faire correctement.

Toute aide appréciée avec reconnaissance!

1
Philip

wp_dropdown_categories () function affiche une boîte de sélection. Vous pouvez encapsuler la sortie dans un formulaire avec une action de formulaire sur la même page. Lorsque l'utilisateur soumet le formulaire, vous pouvez obtenir la valeur de l'ID de la catégorie et interroger les publications de cette catégorie. Ou vous pouvez utiliser jQuery afin de ne pas avoir besoin du tout de formulaire.

Codex a Nice exemple pour les deux cas.

Si vous souhaitez publier le formulaire sur la page en cours, vous pouvez utiliser cette URL de page comme action de formulaire telle que celle-ci.

<li id="categories">
<h2><?php _e( 'Categories:' ); ?></h2>
<form id="category-select" class="category-select" action="<?php echo get_permalink($page_id); ?>" method="get">
<!-- $page_id is the current page id -->
    <?php wp_dropdown_categories( 'show_count=1&hierarchical=1&name=category_select' ); ?>
    <input type="submit" name="submit" value="view" />
</form>
</li>

Vous pouvez utiliser la valeur renvoyée comme ceci

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$cat = ( isset( $_GET['category_select'] ) ) ? $_GET['category_select'] : 1;
$args = array (
    'cat'            => $cat,
    'posts_per_page' => 10,
    'paged'          => $paged
);
$query = new WP_Query( $args );
0
sakibmoon