Fourchissez votre taxonomie WordPress dans le bon sens

Les types de publications personnalisées et les taxonomies personnalisées sont l’un des nouveaux trucs les plus excitants pour les développeurs WordPress depuis sa publication dans WordPress version 2.9. Cependant, les utiliser peut devenir un casse-tête même pour les développeurs WordPress les plus expérimentés sans connaître quelques astuces supplémentaires. Dans cet article, je vais utiliser Twenty Eleven comme exemple pour vous donner des conseils et astuces pour créer votre propre taxonomie de la bonne façon..

Voici les grandes lignes de ce que nous allons couvrir aujourd'hui. Nous allons utiliser un scénario hypothétique pour illustrer certaines solutions de contournement importantes; Vous pourriez ne pas avoir exactement la même situation, mais la solution de contournement devrait s'appliquer à beaucoup de maux de tête spécifiques à la taxonomie, tels que 404, des problèmes de pagination et des listes de taxonomie non interrogeables..

  • Étape 1: Création de votre type de message personnalisé
  • Étape 2: Créer nos taxonomies de produits
  • Étape 3: Initier le type de poste et les taxonomies
  • Étape 4: Création du fichier de taxonomie
  • Étape 5: Appelez la requête à l'aide de pre_get_posts ()

Étape 1: création de votre type de message personnalisé

Pour notre exemple, nous allons créer un type de publication personnalisé pour notre liste de produits hypothétiques.; Lancez votre éditeur et créez un nouveau fichier appelé, post-type.php; Puis enregistrez le fichier dans un nouveau dossier appelé "comprend". Voici le code que nous allons ajouter à ce fichier:

 function product_listing () $ labels = array ('name' => __ ('Property Listings', 'nom général du type de message'), 'singular_name' => __ ('Property Listing', 'post type nom singulier'), 'add_new' => _x ('Ajouter nouveau', 'Listing'), 'add_new_item' => __ ('Ajouter nouveau listing'), 'edit_item' => __ ('Modifier le listing'), 'new_item' => __ ('Nouvelle liste'), 'all_items' => __ ('Toutes les listes'), 'view_item' => __ ('Voir la liste'), 'search_items' => __ ('Chercher des listes'), 'not_found' = > __ ('Aucune annonce trouvée'), 'not_found_in_trash' => __ ('Aucune annonce trouvée dans la corbeille'), 'parent_item_colon' => ", 'menu_name' => 'Annonces'); $ args = array ('labels '=> $ labels,' public '=> true,' public_queryable '=> true,' show_ui '=> true,' show_in_menu '=> true,' query_var '=> true,' menu_position '=> 4,' type_fonction '=>' post ',' hierarchical '=> false,' has_archive '=> true,' rewrite '=> array (' slug '=>' listing ',' with_front '=> false), // Important!' prend en charge '=> array (' title ',' editor ',' thumbnail ',' author '),' taxonomies '=> array ( 'product_feature', 'product_category'),); register_post_type ('listing', $ args); 

Ce que nous avons fait là-bas: nous avons créé une fonction pour un produit qui sera ajouté à la init action dans WordPress plus tard. étiquettes $est un tableau contenant toutes les informations nécessaires pour créer un type de publication. En dessous de l’étiquette se trouve un tableau d’arguments ($ args). La chose importante à retenir est le 'récrire"partie où nous définissons notre slug qui sera utilisé comme un lien permanent, pour cet exemple, nous allons utiliser"inscription'. Au bas, nous avons des arguments de taxonomie qui contiennent notre fonction_produit et catégorie de produit.

Une technique courante utilisée par de nombreux développeurs WordPress consiste à exclure le type de publication personnalisé des résultats de la recherche avec l’argument de 'exclude_from_search' => true. Nous n'allons pas le faire ici car nous aurons besoin d'archives pour la taxonomie de type publication afin que les utilisateurs puissent rechercher notre produit. Pour moi, la règle est la suivante: ne pas utiliser 'exclude_from_search' => true lors de l'enregistrement de votre type de message public; Si vous devez l'afficher dans une page d'archive, vous souhaitez l'inclure dans les recherches. Si nous voulions l'exclure de recherche de blog, alors nous devons l'exclure avec une fonction personnalisée, nous irons plus tard.


Étape 2 Créer nos taxonomies de produits

Comme vous pouvez le constater d'après le code de l'étape 1, nous devrons enregistrer deux taxonomies personnalisées pour notre liste de produits. Le premier sera la fonctionnalité du produit et le second sera la catégorie de produit. Alors, commençons.

Nous devons ajouter une nouvelle fonction après la fonction product_listing. Nous appellerons cette fonction product_taxonomies. Le code complet des taxonomies est visible ci-dessous:

 / ** * Ajouter des taxonomies personnalisées pour la liste de produits * / function product_taxonomies () $ labels = array ('name' => __ ('Caractéristiques du produit', 'nom général de la taxonomie'), 'singular_name' => __ ('Product Fonction ',' nom singulier de taxonomie '),' search_items '=> __ (' Rechercher les fonctionnalités du produit '),' all_items '=> __ (' Toutes les fonctionnalités du produit '),' parent_item '=> __ (' Caractéristique du produit principal ' ), 'parent_item_colon' => __ ('Fonctionnalité du produit parent:'), 'edit_item' => __ ('Editer la fonctionnalité du produit'), 'update_item' => __ ('Mettre à jour la fonctionnalité du produit'), 'add_new_item' => __ ('Add New Product Feature'), 'new_item_name' => __ ('New Product Feature'), 'menu_name' => __ ('Product Features')); register_taxonomy ('product_feature', array ('listing'), array ('labels' => $ labels, 'hierarchical' => true, 'show_ui' => true, 'rewrite' => array ('slug' => ' product_feature '),' query_var '=> true,' show_in_nav_menus '=> true,' public '=> true)); $ labels = array ('name' => __ ('Catégories de produits', 'Nom général de taxonomie'), 'Singluar_name' => __ ('Catégorie de produits', 'Nom singulier de taxonomie'), 'search_items' => __ ( 'Rechercher dans la catégorie de produit'), 'all_items' => __ ('Toutes les catégories de produit'), 'parent_item' => __ ('Catégorie de produit parent'), 'parent_item_colon' => __ ('Catégorie de produit parent:'), 'edit_item' => __ ('Modifier la catégorie de produit'), 'update_item' => __ ('Mettre à jour la catégorie de produit'), 'add_new_item' => __ ('Ajouter une nouvelle catégorie de produit'), 'new_item_name' => __ ( 'Nouvelle catégorie de produits'), 'menu_name' => __ ('Catégories de produits')); register_taxonomy ('product_category', array ('listing'), array ('labels' => $ labels, 'hierarchical' => true, 'show_ui' => true, 'rewrite' => array ('slug' => ' product_category '),' query_var '=> true,' show_in_nav_menus '=> true,' public '=> true)); 

le product_taxonomies La fonction, illustrée ci-dessus, enregistre deux taxonomies personnalisées pour nous. La chose importante à noter ici est que l'argument 'rewrite' est le même que le type de message après lequel nous avons créé un slug personnalisé à l'étape 1. Cela deviendra l'URL de nos archives de taxonomie. Ensuite, nous avons également créé un argument public afin que les gens puissent parcourir nos taxonomies..


Étape 3 Init(Iate) Le type de poste et les taxonomies

Utilisons maintenant le filtre add_actions pour permettre à WordPress d’exécuter nos fonctions..

 add_action ('init', 'product_listing', 0); add_action ('init', 'product_taxonomies', 10);

Faites attention au tout dernier argument que nous transmettons à la add_action filtre. Nous enregistrons le type de poste de liste de produits avec la priorité 0 et les taxonomies personnalisées du type de poste lui-même, 10.. C'est une chose cruciale à noter: ne pas enregistrer une taxonomie personnalisée avec une priorité inférieure à la priorité pour enregistrer son type de publication associé. C’est le principal problème qui pourrait vous causer des maux de tête; si la priorité de votre taxonomie est inférieure à la priorité de votre type de message, les choses se casseront, car la valeur par défaut de "10" sera utilisée pour le type de message personnalisé si vous ne spécifiez pas autrement..

Maintenant, incluons-le dans les fonctions Twenty Eleven. Ouvrez le functions.php et faites défiler jusqu'à la dernière ligne et ajoutez ce code ci-dessous après les fonctions de classes de corps Twenty Eleven afin que le thème puisse exécuter notre code de type message.

 function twentyeleven_body_classes ($ classes) if (! is_multi_author ()) $ classes [] = 'auteur unique';  if (is_singular () &&! is_home () &&! is_page_template ('showcase.php') &&! is_page_template ('sidebar-page.php')) $ classes [] = 'singulier'; retourne $ classes;  add_filter ('body_class', 'vingteleven_body_classes'); // ce sont nos fichiers d'inclusion require_once ('/ includes / post-types.php');

Ouvrez maintenant votre wp-admin et activez le thème Twenty Eleven, si vous ne l'avez pas déjà fait, et votre type de message personnalisé et sa taxonomie ont été ajoutés sous le menu des messages..


Étape 4 Créer le fichier de taxonomie

Voici l'étape importante si vous voulez faire votre taxonomie navigable. Tout d'abord, copiez le Twenty Eleven archive.php fichier et le renommer en taxonomy.php. Ce que nous voulons faire avec nos "taxonomies" est très similaire à ce que WordPress fait avec "archive.php" et "fichier category.php"; C'est pourquoi il n'est pas nécessaire d'exécuter une requête personnalisée sur une page d'archive taxonomy / category / post_tag..

Remarque: C’est ce que je vois actuellement chez la plupart des développeurs de thèmes WordPress. Ils ajoutent leur requête personnalisée directement au fichier de taxonomie, ce qui casse souvent la pagination. Comment travaillons-nous autour de cela? Facile mes amis, je vais vous dire le secret pour faire votre requête personnalisée sans l'ajouter directement à la taxonomy.php fichier:

Remplissons le fichier de taxonomie avec notre code. Aller à la ligne sous le get_header () et entrez le code ci-dessous.

 $ term = get_term_by ('slug', get_query_var ('terme'), get_query_var ('taxonomie'));

le get_term_by fonction retournera la valeur du slug que nous spécifions. Se souvenir du 'rewrite' => array ('slug' => 'property_feature')? C'est la valeur de la limace qui sera retournée. Nous allons l'utiliser pour écho la limace comme titre de taxonomie. Maintenant, allez à la ligne où se trouve la balise h1 avec class page-title et notez le code pour appeler le terme ci-dessous.

 echo $ term-> name;

Tester le code

Retournez à votre panneau d'administration puis allez dans les fonctionnalités et les catégories de produits. Nous allons créer des fonctionnalités et des catégories pour nos produits. J'appellerai les fonctions 1, 2, 3 et les catégories 1, 2, 3.

Ensuite, nous créons une nouvelle liste de produits. Sous le champ publié, vous verrez votre taxonomie personnalisée d'entité et de catégorie que vous venez de créer. N'oubliez pas de les vérifier. J'ai créé 3 listes de produits, donc je vérifie la catégorie et la fonctionnalité pour chacun d'eux..

Pour voir comment votre taxonomie fonctionne, allez à la fonctionnalité du produit ou à la catégorie de produit et faites défiler jusqu'à la catégorie que vous avez créée, puis cliquez sur le bouton Afficher (voir ci-dessus). Si vous êtes dirigé vers la page d'erreur 404, allez dans votre wp-admin, allez dans Paramètres -> Permaliens et cliquez sur Enregistrer pour faire en sorte que WordPress efface les règles de réécriture. Si vous avez quelque chose de similaire à l'image ci-dessus, votre taxonomie fonctionne déjà.

Notez que le titre de la taxonomie sous le menu est le terme que nous appelons avec le mot écho.

Créons un menu pour accéder plus facilement aux archives de taxonomie. Allez dans l'onglet de menu et créez deux menus, nous appellerons le premier menu "Parcourir par fonctionnalités" et le second menu "Parcourir par catégories". Depuis que nous avons défini le paramètre 'show_in_nav_menus' => true, cela apportera notre taxonomie personnalisée aux options de menu. Choisissez toutes les fonctionnalités pour le menu "Parcourir par fonctionnalités" et les catégories pour le menu "Parcourir par catégories".

Allez ensuite dans la zone des widgets et ajoutons les menus que nous venons de créer au widget de menu personnalisé..

Accédez à votre page d'accueil et cliquez sur le bouton Actualiser pour afficher votre widget de taxonomie personnalisé. Créez maintenant plus de listes de produits réservés afin que la pagination apparaisse. J'ai créé environ 8 listes et les ai assignées à la fonctionnalité 1. Ensuite, réglez l'option "Afficher les pages de blog au plus" dans Paramètres -> Lecture pour afficher uniquement 3 messages et allez à la page des archives de taxonomie pour vérifier si la pagination fonctionne ou non. Whallah! La pagination fonctionne bien dans la navigation par défaut de WordPress.

Testons-le avec le célèbre plugin de pagination WordPress, le wp-pagenavi brancher. Après avoir installé le plugin, allez dans votre taxonomy.php et trouver la ligne avec twentyeleven_content_nav ('nav-above'); et twentyeleven_content_nav ('nav-under'); remplacez le code par le wp_pagenavi () fonctionne comme dans le code ci-dessous.

 // twentyeleven_content_nav ('nav-above'); wp_pagenavi (); // twentyeleven_content_nav ('nav-below'); wp_pagenavi ();

Maintenant, cliquez sur Actualiser et vous pouvez voir que la pagination wp_pagenavi fonctionne si vous suivez mes instructions..

Cela ne cause plus de maux de tête sur la pagination, alors que permalink n’est pas la valeur par défaut..
L'étape suivante consiste à créer notre requête personnalisée afin de laisser le fichier d'archives de taxonomie afficher ce que nous demandons..


Étape 5: appelez la requête à l'aide de pre_get_posts ()

le pre_get_posts () filter est l'un des filtres les plus impressionnants (à mon avis!) Il nous permet de créer un post-filtre avant que celui-ci soit appelé. La plupart des développeurs de thèmes WordPress utilisent rarement cette arme puissante… Très bien les gars! Chargeons notre arme secrète avec le code. Lancez votre éditeur et ouvrez le fichier Twenty Eleven functions.php.

Nous allons le charger avec deux fonctions à la fin du fichier functions.php sous notre fonction required_once, la première consiste à appeler notre requête personnalisée sur la taxonomie et la seconde à exclure notre liste de la recherche. Voici le code de la première fonction.

 add_action ('pre_get_posts', 'add_custom_taxonomy_query'); function add_custom_taxonomy_query (& $ query) if (! is_admin () && is_tax ('product_feature') || is_tax ('product_category')) $ query-> set ('orderby', 'date'); $ query-> set ('commande', 'ASC'); $ query-> set ('posts_per_page', '1'); 

Le code ci-dessus exécute la requête pour les taxonomies product_feature et product_category afin de classer par date et par ordre croissant, ainsi que les publications par page ayant la valeur 1. Accédez à la page de votre archive de taxonomie, puis cliquez sur le bouton d'actualisation. Yay! Vous venez de voir notre arme secrète en cours d'exécution. Maintenant, testez votre formulaire de recherche, je tape "produit" dans le formulaire de recherche et le résultat est que mon produit apparaît toujours dans la page de résultats. D'accord! Rendons-le invisible dans le résultat de la recherche.

 fonction search_filter ($ query) if (! is_admin ()) if ($ query-> is_search) $ query-> set ('post_type', tableau ('post', 'page'));  return $ query;  add_filter ('pre_get_posts', 'search_filter');

Ajoutez la fonction ci-dessus dans le fichier functions.php, puis accédez à votre site et essayez de rechercher votre produit. Japper! La liste de produits est maintenant invisible. Pour inclure dans la recherche, ajoutez simplement 'listing' dans le tableau d'ensemble de requêtes après 'page'.

 $ query-> set ('post_type', array ('post', 'page', 'listing'));

Conclusion

D'accord, c'est la fin du tutoriel! Je vous ai expliqué comment gérer la page d’erreur de pagination 404 et vous indiquer trois règles importantes pour créer votre taxonomy.php fichier qui sont:

  1. N'utilisez pas 'exclude_from_search' => true lors de l'enregistrement de votre type de publication publique, si vous devez l'afficher dans une page d'archive.
  2. Ne pas enregistrer la taxonomie personnalisée avec une priorité inférieure à la priorité pour enregistrer son type de publication associé.
  3. Inutile d'exécuter une requête personnalisée sur la page d'archive taxonomy / category / post_tag, cela endommagerait la pagination..

Je t'ai aussi chargé de mon pre_get_posts arme secrète pour traiter toutes les requêtes sans ruiner la pagination et autres choses pouvant causer des maux de tête. le pre_get_posts La méthode elle-même peut toujours être étendue avec vos propres options de thème. Profiter du cours!