Créer un shortcode pour lister les articles avec plusieurs paramètres

Sur de nombreux sites clients que je crée, je constate parfois que je dois inclure une liste de publication sur une page. Je ne parle pas de pages d'archives ici, mais d'ajouter une liste personnalisée à une page statique existante.

Par exemple, je souhaiterais peut-être répertorier certains messages sur la page "À propos de", ou le site peut nécessiter une page détaillée pour un sujet, avec une liste d'articles et de types d'articles personnalisés liés à ce sujet..

Pour ce faire, vous pouvez créer un modèle de page personnalisé afin d’inclure le contenu de la page actuelle et les résultats d’une seconde requête personnalisée. Toutefois, si vous souhaitez plus de flexibilité quant à la manière dont vous répertoriez les publications, ou souhaitez simplement le faire plusieurs fois, procédez comme suit: shortcode sera une solution plus simple.

Dans ce tutoriel, je vais vous montrer comment créer un shortcode simple pour répertorier toutes les publications d'un type de publication personnalisé, puis nous développerons pour créer un shortcode avec divers paramètres que les utilisateurs peuvent spécifier pour répertorier les publications de leur choix..


Ce qu'il vous faut pour compléter ce tutoriel

Vous aurez besoin des ressources suivantes:

  • Une installation de développement de WordPress
  • Accédez à votre dossier de plugins pour pouvoir créer et télécharger le plugin shortcode

Vous trouverez tout le code pour créer ce plugin dans le téléchargement de code.


Mise en route: création du contenu

Avant de configurer le shortcode, vous devez enregistrer un type de publication personnalisé et deux taxonomies personnalisées, que nous utiliserons pour tester le shortcode..

Le code pour faire cela est contenu dans le plugin que j'ai écrit pour le shortcode, bien que sur un projet réel, je vous recommande de le séparer du plugin lui-même..

Créez un nouveau fichier dans votre dossier plugins et appelez-le. post-listing-shortcode.php.

Ajoutez le code ci-dessous au fichier.

Remarque: La création de types d'articles et de taxonomies personnalisés n'est pas essentielle à l'apprentissage de ce tutoriel. Si vous le souhaitez, vous pouvez copier ce code à partir du fichier à télécharger et ignorer cette étape..

  'Clothes', 'singular_name' => 'Habillement', 'add_new' => 'Ajouter un nouveau', 'add_new_item' => 'Ajouter un nouvel habillement', 'edit_item' => 'Éditer l’habillement', 'new_item' => 'New Clothing Item', 'all_items' => 'Tous les vêtements', 'view_item' => 'View Clothing Item', 'search_items' => 'Search Clothes', 'not_found' => 'Aucun vêtement trouvé',> 'not_found_in_trash' => 'Aucun vêtement trouvé dans la corbeille', 'parent_item_colon' => ", 'menu_name' => 'Vêtements',); register_post_type ('clothes', array ('labels' => $ labels, 'has_archive') => true, 'public' => true, 'hierarchical' => true, 'supports' => array ('title', 'editor', 'extrait', 'custom-fields', 'thumbnail', 'page- attributs '),' taxonomies '=> array (' post_tag ',' category '),' exclude_from_search '=> true,' facility_type '=>' post ',)); // enregistre deux taxonomies pour correspondre à la publication type add_action ('init', 'rmcc_create_taxonomies', 0); fonction rmcc_create_taxonomies () // couleur taxonomy $ labels = array ('name' => _x ('Couleurs', 'nom de taxonomie générale'), 'si ngular_name '=> _x (' Color ',' nom singulier de taxonomie '),' search_items '=> __ (' Recherche de couleurs '),' all_items '=> __ (' Toutes couleurs '),' parent_item '=> __ ( 'Couleur parent'), 'parent_item_colon' => __ ('Couleur parent' '),' edit_item '=> __ (' Edit Color '),' update_item '=> __ (' Mettre à jour la couleur '),' add_new_item '= > __ ('Add New Color'), 'new_item_name' => __ ('New Color'), 'menu_name' => __ ('Colors'),); register_taxonomy ('color', 'clothes', array ('hierarchical' => true, 'labels' => $ labels, 'query_var' => true, 'rewrite' => true, 'show_admin_column' => true)); // fabric taxonomy $ labels = array ('name' => _x ('Fabrics', 'nom général de la taxonomie'), 'singular_name' => _x ('Fabric', 'taxonomy singular name'), 'search_items' => __ ('Tissus de recherche'), 'all_items' => __ ('Tout tissu'), 'parent_item' => __ ('Tissu parent'), 'parent_item_colon' => __ ('Tissu parent:'), 'edit_item '=> __ (' Edit Fabric '),' update_item '=> __ (' Update Fabric '),' add_new_item '=> __ (' Ajouter un nouveau tissu '),' new_item_name '=> __ (' Nouveau tissu ') , 'menu_name' => __ ('Tissus'),); register_taxonomy ('fabric', 'clothes', array ('hierarchical' => true, 'labels' => $ labels, 'query_var' => true, 'rewrite' => true, 'show_admin_column' => true)); ?>

Cela informe WordPress du plugin et enregistre le type de message personnalisé "vêtements" et les deux taxonomies, "couleur" et "tissu"..

Enregistrez ce plugin et activez-le via la page Plugins de WordPress.

Maintenant que votre type de publication personnalisé et vos taxonomies sont en place, créez des publications à l'aide de ces publications. Dans la capture d'écran ci-dessous, vous pouvez voir le contenu que j'ai créé:


Créer un shortcode de listing simple

Si vous voulez seulement lister le contenu d'une manière en utilisant votre shortcode, vous pouvez créer un shortcode très simple qui n'utilise pas de paramètres..

Ouvrez à nouveau votre fichier de plugin et ajoutez ce qui suit:

 // crée un shortcode pour lister tous les vêtements qui viennent en bleu add_shortcode ('list-posts-basic', 'rmcc_post_listing_shortcode1'); fonction rmcc_post_listing_shortcode1 ($ atts) ob_start (); $ query = new WP_Query (array ('post_type' => 'clothes', 'color' => 'blue', 'posts_per_page' => -1, 'order' => 'ASC', 'orderby' => 'title ',)); if ($ query-> have_posts ()) ?> 
    have_posts ()): $ query-> the_post (); ?>
  • > ">

Cela crée un shortcode simple, en utilisant WP_Query pour exécuter une requête personnalisée sur votre contenu et afficher les résultats dans une liste. Quand je tape [list-posts-basic] dans une page, les résultats sont comme indiqué dans cette capture d'écran:


Ajout de paramètres pour modifier la requête

Le shortcode sera beaucoup plus utile si les utilisateurs peuvent ajouter leurs propres paramètres, en choisissant par exemple:

  • Combien d'articles à lister
  • Quel type de message interroger
  • Catégories à inclure
  • Tissus et couleurs à inclure
  • Paramètres de commande

Pour ajouter ceci au shortcode, vous utilisez le shortcode_atts () fonction, qui vous permet de spécifier certains attributs par défaut que les utilisateurs peuvent remplacer.

Une fois encore dans votre fichier de plugin et sous le code du premier shortcode, ajoutez ce qui suit:

 // crée un shortcode avec des paramètres afin que l'utilisateur puisse définir ce qui est demandé - la valeur par défaut consiste à répertorier tous les articles de blog add_shortcode ('list-posts', 'rmcc_post_listing_parameters_shortcode'); fonction rmcc_post_listing_parameters_shortcode ($ atts) ob_start (); // définit les attributs et leurs valeurs par défaut, extrait (shortcode_atts (array ('type' => 'post', 'order' => 'date', 'orderby' => 'title', 'posts' => -1, 'color '=> ",' fabric '=>",' category '=> ",), $ atts)); // définir des paramètres de requête basés sur les attributs $ options = array (' post_type '=> $ type,' commande ' => $ order, 'orderby' => $ orderby, 'posts_per_page' => $ posts, 'color' => $ color, 'fabric' => $ fabric, 'category_name' => $ category,); $ query = new WP_Query ($ options); // exécuter la boucle en fonction de la requête if ($ query-> have_posts ()) ?> 
    • >

Remarque: En utilisant ob_start () et ob_get_clean () veille à ce que la boucle soit affichée à l'endroit de votre page ou de votre publication où vous avez ajouté le shortcode. Si vous ne les ajoutez pas, la liste sera affichée en haut du contenu..

Par défaut, toutes les publications sont classées par ordre décroissant de date. Par conséquent, si vous tapez [liste-messages] dans une page ou un message, le résultat est le même que dans cette capture d'écran:

Cependant, si vous ajoutez des paramètres, les choses deviennent plus intéressantes. Par exemple, pour lister tous les vêtements qui viennent en noir, je tape [list-posts type = "clothes" color = "black" orderby = "name" order = "ASC"]:

Ou pour lister tous les vêtements de la catégorie 'smart' que je tape [list-posts type = "clothes" category = "intelligent" orderby = "name" order = "ASC"]:

Si vous en avez besoin, vous pouvez spécifier plus d'attributs avec lesquels les utilisateurs peuvent travailler, mais vous devez inclure tous ceux disponibles dans votre plugin, extraire (shortcode_atts)) une fonction.

Il n'est pas nécessaire de spécifier une valeur par défaut pour chacun d'eux. Par exemple, les paramètres de catégorie et de taxonomie sont vides dans l'exemple. Les paramètres que vous pouvez définir sont ceux que vous pouvez spécifier pour WP_Query - pour une liste complète, voir sa page Codex.


Résumé

Pouvoir insérer un article dans une page ou un article peut être très utile. Cela vous évite d'avoir à modifier vos fichiers de modèle ou à écrire un modèle de page personnalisé.

Le shortcode que vous avez appris à créer dans ce plugin peut être utilisé de différentes manières. Vous pouvez bien entendu modifier facilement le résultat de ce shortcode. Mon exemple génère une liste à puces avec les titres des publications encadrés dans un lien vers leur page. vous pouvez remplacer le code à l'intérieur de la boucle par les balises de modèle pour afficher le contenu, les images en vedette ou autre chose.


Ressources

Quelques ressources utiles sur les sujets abordés ci-dessus:

  • L'API Shortcode
  • Attributs de shortcode
  • Paramètres WP_Query