Par défaut, WordPress crée des archives qui répertorient toutes vos publications dans l’ordre inverse. Si les utilisateurs recherchent des publications dans une catégorie donnée ou avec un terme de taxonomie donné, ils devront se rendre sur la page d'archives de cette catégorie ou de ce terme..
Mais que faire si vous voulez rendre votre archive principale pour un type de message plus conviviale? Dans ce tutoriel, je vais vous montrer comment créer une page d'archivage pour un type d'article personnalisé qui affiche les articles de ce type d'article classés selon une taxonomie, afin qu'au lieu d'une longue liste, les visiteurs voient une liste pour chaque terme de taxonomie..
Pour suivre ce tutoriel, vous aurez besoin d’une installation de développement de WordPress et d’un éditeur de code. Vous allez créer un thème qui est un thème enfant de vingt-quatre ans, vous aurez donc besoin de celui installé (ce qui devrait être par défaut).
Je ne vais pas vous montrer comment créer un thème enfant, mais si vous êtes bloqué, jetez simplement un coup d'œil à la feuille de style du paquet de codes de ce tutoriel..
D'après mon expérience, cette technique est le plus souvent utilisée pour les types d'articles et les taxonomies personnalisés plutôt que pour les articles et les catégories ou les balises normaux. Je vais donc commencer par enregistrer un type d'article et une taxonomie..
Remarque: j'utilise le même type de message 'animal' que celui que j'avais enregistré dans un précédent tutoriel sur la création d'une archive à base d'images. Si vous voulez pousser les choses un peu plus loin, vous pouvez combiner la technique de ce tutoriel avec celle que je vous montre ici et afficher vos listes de termes de taxonomie avec des images en vedette..
Dans le fichier de fonctions de votre thème, ajoutez le code suivant pour enregistrer le type de publication:
// enregistre un type de message personnalisé appelé fonction 'animaux' wptp_create_post_type () $ labels = array ('nom' => __ ('Animaux'), 'nom singulier' => __ ('animal'), 'add_new' => __ ('Nouvel animal'), 'add_new_item' => __ ('Ajouter un nouvel animal'), 'edit_item' => __ ('Éditer un animal'), 'new_item' => __ ('Nouvel animal'), 'view_item '=> __ (' Voir animal '),' search_items '=> __ (' Rechercher des animaux '),' not_found '=> __ (' Aucun animal trouvé '),' not_found_in_trash '=> __ (' Aucun animal trouvé dans Poubelle' ), ); $ args = array ('labels' => $ labels, 'has_archive' => true, 'public' => true, 'hierarchical' => false, 'supports' => array ('titre', 'éditeur', ' extrait ',' custom-fields ',' thumbnail ',' attribut de page '),' taxonomies '=> array (' post_tag ',' category '),); register_post_type ('animal', $ args); add_action ('init', 'wptp_create_post_type');
Ensuite, ajoutez le code pour enregistrer la taxonomie:
// enregistre une taxonomie appelée fonction 'Famille d'animaux' wptp_register_taxonomy () register_taxonomy ('animal_cat', 'animal', array ('labels' => array ('name' => 'Familles animales', 'singular_name' => ' Animal Family ',' search_items '=>' Rechercher les familles d’animaux ',' all_items '=>' Toutes les familles d’animaux ',' edit_item '=>' Modifier les familles d’animaux ',' update_item '=>' Mettre à jour la famille d’animaux ',' add_new_item '=>' Ajouter une nouvelle famille d'animaux ',' new_item_name '=>' Nouveau nom de famille d'animaux ',' menu_name '=>' Famille d'animaux ',),' hierarchical '=> true,' sort '=> true,' args '=> array (' orderby '=>' term_order '),' rewrite '=> array (' slug '=>' animal-family '),' show_admin_column '=> true)); add_action ('init', 'wptp_register_taxonomy');
Une fois que vous avez fait cela, ajoutez des données. Ci-dessous, vous pouvez voir les données que j'ai ajoutées avec certains termes de taxonomie appliqués. Je ne prétends pas que ma terminologie est exacte en ce qui concerne les familles d’animaux. Ne faites donc pas de commentaire si je me trompe.!
L'étape suivante consiste à créer un modèle d'archive pour le nouveau type de publication. Dans votre thème, créez un nouveau fichier appelé archive-animal.php
.
Comme ce thème est un thème enfant de vingt-quatorze ans, le modèle d'archive aura besoin d'un code copié à partir de ce thème pour envelopper la boucle personnalisée que vous allez créer. Ajoutez donc les éléments suivants à votre modèle d’archive:
Remarque: Si vous travaillez avec votre propre thème, copiez le code d'habillage à partir de l'index ou du fichier archive de votre propre thème..
3. Remplir le modèle d'archive: Récupérer des termes de taxonomie
Pour que vos archives puissent afficher les animaux par terme de taxonomie, l'étape suivante consiste à récupérer ces termes..
Dans votre nouveau fichier de modèle, sous la fermeture
balise (ou au-dessous de la partie initiale de votre code d’emballage si vous utilisez votre propre thème), récupérez les termes en utilisant
get_terms ()
:'count', 'hide_empty' => 0)); ?>Notez que j'ai utilisé deux paramètres ici:
commandé par
- Cela vous permet de spécifier l'ordre des termes affichés. J'ai utilisé compter
comme valeur pour que le terme comportant le plus de messages attribués soit affiché en premier, mais vous pouvez le commander par nom ou par ID - si vous laissez ce champ vide, WordPress classera par nom. Voir la page du Codex sur get_terms ()
pour plus de détails.hide_empty
- cela indique à WordPress de ne pas récupérer les termes sans publication. Cela vous évite d'avoir à vérifier si votre requête contient des publications plus tard..Cela fait, vous utilisez pour chaque()
Indiquer à WordPress de passer par chacun de ces termes et d'exécuter une requête que vous devez définir. Sous le code que vous venez d'ajouter, insérez ce qui suit:
'animal', 'animal_cat' => $ term-> slug); $ query = new WP_Query ($ args);
Cela indique à WordPress de passer en revue chaque terme, puis définit la requête à exécuter à chaque fois. Les arguments de la requête incluent le type de publication et le terme dans la 'animal_cat'
taxonomie, qui est la valeur de la $ terme
variable.
Après avoir défini votre requête, vous devez ajouter une boucle. Tout d'abord, indiquez le nom du terme interrogé sous la forme d'un en-tête. Au-dessous du début de la ligne $ requête
mais à l'intérieur des accolades de la pour chaque
déclaration, ajoutez cette ligne:
écho''. $ terme-> nom. '
';
Ensuite, ajoutez le code pour contenir vos articles dans une liste:
// affiche les titres de l'article dans une liste echo '
Dans la liste, ajoutez maintenant votre boucle:
// Démarrer la boucle while ($ query-> have_posts ()): $ query-> the_post (); ?>
Comme vous pouvez le constater, il s’agit d’une boucle simple qui affiche le titre de chaque message dans un lien vers le message et n’affiche aucun contenu. Si vous le souhaitez, vous pouvez ajouter un extrait ou une image sélectionnée ici.
Enfin, réinitialisez la requête en utilisant wp_reset_postdata ()
en dessous de la ligne de lecture écho '';
Voici à quoi ressembleront votre requête et votre boucle:
'animal', 'animal_cat' => $ term-> slug); $ query = new WP_Query ($ args); // affiche le nom du terme dans une balise de titre echo ''. $ terme-> nom. '
'; // affiche les titres de l'article dans une liste echo '
Enfin, enregistrez votre fichier de modèle et affichez votre archive de type de publication. Vous verrez qu'il répertorie vos publications par terme de taxonomie plutôt que dans une longue liste..
Cette technique est utile lorsque vous souhaitez que les visiteurs puissent voir rapidement des données catégorisées sans avoir à regarder une série de pages d'archives. Elles rassemblent toutes ces informations au même endroit, mais elles sont triées pour plus de commodité. Voici quelques idées pour adapter la technique et la pousser plus loin:
get_categories ()
ou get_tags ()
.index.php
fichier pour afficher les articles par catégorie, tag ou termes de taxonomie.posts_per_page
et décalage
Pour ce faire, dans les arguments de votre requête, voir les détails de cette procédure sur la page WP_Query Codex..posts_per_page
limiter le nombre de messages affichés pour que chaque liste ait la même longueur. Vous pouvez combiner ceci avec un style pour afficher des listes côte à côte.get_term_link ()
pour faire ça.