Comment créer un plugin Packed Addons pour WordPress

Garder les fonctionnalités séparées de la présentation est une pratique recommandée pour le développement de thèmes WordPress. Dans cet article, vous apprendrez comment faire exactement cela, en fournissant à vos utilisateurs un plugin unique pour vos thèmes..

Logique de développement de thèmes

Nous vendons des thèmes WordPress sur ThemeForest depuis plus de quatre ans et avons appris de nombreuses choses qui nous ont permis de réussir sur le marché. L'un des aspects clés d'un développement de thème réussi est la «logique de développement de thème correcte».. 

Le principal avantage de la séparation de la logique de développement est la rapidité de production: plus vous pourrez créer rapidement des thèmes de qualité, plus vous pourrez générer de revenus. Conserver les fonctionnalités dans un plugin séparé est également utile pour les mises à jour. Imaginez que vous avez dix thèmes sur ThemeForest et que vous souhaitez ajouter de nouvelles fonctionnalités en tant que mise à jour. Avoir toutes vos fonctionnalités dans un seul plugin signifie que vous ne devez la mettre à jour qu'une seule fois, sans quoi même une petite mise à jour deviendrait lente et potentiellement douloureuse..

Donc, si vous voulez créer des thèmes puissants et gagner plus d’argent, respectez le système de plugins et de thèmes de WordPress..

Types de fonctionnalité

Quel type de fonctionnalité un thème premium peut-il contenir? Quel genre de choses devrions-nous tirer dans un plugin séparé? Voici une liste des composants clés que nous gardons généralement séparés des fichiers de thème:

  • Panneau d'options de thème
  • Page / Publier des champs personnalisés étendus
  • Widgets personnalisés
  • Shortcodes personnalisés
  • Types de messages personnalisés
  • Fonctions supplémentaires personnalisées

Dans cet article, nous ne détaillerons pas comment créer les composants eux-mêmes, mais nous expliquerons comment les intégrer tous dans un plugin addons.. 

Commençons

Aller à votre wp-content> plugins et créez un dossier vide avec le nom de votre plugin emballé. Nous vous recommandons d'utiliser un nom explicite. Par exemple, notre plugin addons s’appelle «ninzio-addons» (Ninzio étant le nom de notre société). 

Important: n'utilisez pas de trait de soulignement dans le nom du dossier! Utilisez un tiret si nécessaire.

Ensuite, dans ce dossier de plug-in, créez un fichier php avec exactement le même nom que votre dossier. Dans notre exemple, cela serait "ninzio-addons.php". Encore une fois, pas de soulignement s'il vous plaît. Ouvrez ce fichier et ajoutez le commentaire d'en-tête DocBlock suivant:

/ ** * Nom du plugin: Votre nom de plugin * URI du plugin: votre URL de plugin * Domaine de texte: text-domain * Chemin du domaine: / languages ​​/ * Description: Brève description du plugin * Auteur: Nom de l'auteur * Version: 1.0.0 * Auteur URI: auteur uri * /

Examinons les détails que nous avons ajoutés ici: 

  • Nom du plugin: cela devrait être court et descriptif. 
  • Plugin URI: vous pouvez coller l'adresse de votre site ici. 
  • Domaine de texte: c'est un paramètre très important. Vous devriez le nommer de la même manière que votre dossier de plugin et votre fichier principal. Avec le domaine de texte, vous et vos utilisateurs pouvez traduire les chaînes du plugin. Nous verrons plus tard comment traduire un plugin bien rempli (nous trouvons que c'est très important pour nos clients). 
  • Domain Path: ce paramètre est également très important pour la traduction des plugins. Le chemin du domaine est relatif au dossier de fichier de langue. Allez dans le dossier du plug-in des addons et créez un dossier vide portant le nom «langues». Pour l'instant laissez-le vide; plus tard, nous allons créer le fichier de langue. 
  • Tous les autres paramètres «Auteur», «Version», «Auteur URI» sont raisonnablement explicites..

Maintenant, après avoir créé notre dossier de plugins addons et le fichier principal, il est temps de configurer notre plugin.

Configuration

Dans le fichier de plugin principal, après le commentaire d'en-tête, collez cet extrait:

if (! define ('ABSPATH')) exit; // Quitter si on y accède directement

C'est pour des raisons de sécurité; il bloque l'accès direct au fichier plugin.

Juste après, ajoutez ce code:

function your_addons_load_plugin_textdomain () load_plugin_textdomain ('ninzio-addons', false, dirname (plugin_basename (__ FILE__)). '/ langages /');  add_action ('plugins_loaded', 'your_addons_load_plugin_textdomain');

Ici, nous chargeons notre plugin textdomain - assurez-vous que le nom de la fonction est correct. Notre recommandation pour nommer les fonctions est d'utiliser des noms auto-descriptifs avec un préfixe de votre plugin. Par exemple ninzio_addons. Et comme il s’agit d’une fonction php, on peut utiliser des traits de soulignement au lieu de tirets. 

Assurez-vous d'être précis lors de la copie ou de la saisie de la fonction load_plugin_textdomain. Pour le paramètre de domaine, entrez le domaine textuel exact défini précédemment. Et pour le paramètre de chemin relatif du plugin, entrez le chemin du dossier des langues que nous avons créé précédemment.

Chemin du répertoire du plugin

Définissons maintenant notre chemin de répertoire de plugin; ajoutez ce code:

define ('your_addons', plugin_dir_path (__FILE__));

Ici nous utilisons vos_addons comme chemin du répertoire du plugin. Jusqu'ici tout va bien; nous avons créé notre plugin, il est maintenant temps de le remplir avec des fonctionnalités personnalisées.

Panneau d'options de thème

Nous n'utiliserons pas cette étape pour expliquer comment créer un panneau d'options pour un thème. Vous pouvez en créer un personnalisé ou le faire comme nous le faisons. utilisez un cadre de panneau d'option de thème disponible dans le commerce. Si vous êtes nouveau dans les frameworks de panneaux d’options, nous vous recommandons de lire les articles de Bonang Salemane sur l’intégration du thème Redux Framework:

  • Débuter avec le framework Redux: le présenter et l’intégrer dans votre thème

    La plupart des thèmes WordPress bien conçus permettent aux administrateurs de site d'ajuster certains aspects du thème via une page d'options. Le processus de création d'une page d'options…
    Bonang Salemane
    WordPress

Pour ajouter un panneau d'option de thème à vos addons, copiez le dossier du panneau d'option, dans son intégralité, dans le dossier du plug-in des addons. Nous devons maintenant avoir besoin de plusieurs fichiers pour l'activer:

if (! class_exists ('ReduxFramework') && file_exists (your_addons. '/optionpanel/framework.php')) require_once ('optionpanel / framework.php');  if (! isset ($ redux_demo) && file_exists (your_addons. '/optionpanel/config.php')) require_once ('optionpanel / config.php'); 

Dans cet extrait de code, nous avions besoin des deux fichiers principaux de reduxframework: le fichier framework.php qui gère la fonctionnalité du panneau d’options et le fichier config, php, responsable des configurations du panneau d’options. Les fichiers de notre panneau d'options se trouvent dans un dossier «optionpanel» placé dans le dossier du plug-in ninzio-addons. Terminé.

Fonctions personnalisées

Il est temps d'inclure des fonctions personnalisées. Créez un fichier dans votre dossier de plug-ins addons et nommez-le comme “addons-functons.php”. Mettez toutes vos fonctions personnalisées dans ce fichier. 

Une chose à surveiller est que vous utilisez les conventions de dénomination des fonctions appropriées. Utilisez des noms de fonction descriptifs avec un préfixe unique. Par exemple:

fonction your_addons_profile_social_links () …

Juste après les fichiers de structure de thème, exigez votre fichier de fonctions personnalisées:

require_once ('includes / addons-functions.php');

Widgets personnalisés

Et maintenant, incluez des widgets personnalisés. Créez un dossier avec le nom «widgets» dans votre dossier de plug-in addons, placez tous vos fichiers de widgets personnalisés dans ce dossier. Nommer les fichiers de widgets personnalisés n’est pas critique ici, mais il est recommandé d’utiliser des préfixes et des tirets, et non des traits de soulignement..

Par exemple, notre fichier de widget Twitter personnalisé s'appelle «ninzio-recent-tweets.php». De même, notre widget Mailchimp s'appelle «ninzio-mailchimp.php». Incluons-les comme suit:

require_once ('widgets / ninzio-recent-tweets.php'); require_once ('widgets / ninzio-mailchimp.php');

Encore une fois, nous ne couvrirons pas le processus de création de widgets personnalisés; Pour cela, consultez le post de Bonang Salemane:

  • Création de vos propres widgets à l'aide de diverses API WordPress: Introduction

    Les widgets sont un moyen astucieux de donner aux propriétaires de sites un certain contrôle sur l'apparence (et parfois les fonctionnalités) de leurs sites WordPress. Dans cette série, nous allons…
    Bonang Salemane
    Widgets WordPress

Types de poteaux personnalisés et taxonomies

Si vous souhaitez ajouter un portefeuille, des événements ou tout autre élément similaire aux publications classiques de WordPress mais devant être séparé du thème, vous devez utiliser des types de publication personnalisés. Tous nos thèmes ont des types de messages personnalisés inclus. La création de types de publication personnalisés peut être complexe. Une fois encore, cela dépasse le cadre de ce didacticiel, mais je vous recommande de lire celui de Tom McFarlin:

  • Petit conseil: types de post, taxonomies et liens permanents

    Les types de messages personnalisés et les taxonomies sont deux fonctionnalités puissantes de WordPress. Malheureusement, ils peuvent avoir tendance à causer des problèmes si les développeurs ne sont pas…
    Tom McFarlin
    WordPress

Pour les types de publication personnalisés, vous devez créer un dossier séparé dans votre plug-in addons, par exemple «ninzio-projets». Et dans ce dossier, placez tous vos fichiers liés à vos types de publication personnalisés. Les fichiers les plus importants ici sont les fichiers principaux qui créent les types de publication personnalisés, le fichier de publication unique et le fichier de publication boucle / archive. Nommez le fichier principal de votre type de message personnalisé comme vous avez nommé votre dossier de type de message personnalisé, tel que «ninzio-projects.php». Placez votre code de type de message personnalisé dans ce fichier, puis, pour activer ce type de message, vous aurez besoin du fichier principal:

require_once ('ninzio-projects / ninzio-projects.php');

Lorsque vous séparez une telle fonctionnalité, vous devez toujours prendre en compte vos clients, plus précisément, comment ils peuvent étendre / réécrire vos fichiers de modèle de type publication personnalisé (archivés et uniques). Supposons que notre nom de type de message personnalisé soit «projets». Le fichier de type message personnalisé unique doit être appelé «single-projects.php» et le fichier boucle / archive doit être appelé «archive-projects.php».. 

Et si votre type de publication personnalisé comporte également des taxonomies personnalisées, vous devez également créer un fichier séparé pour ces publications. Appelons notre fichier de taxonomie «taxonomy-projects.php». Nous avons maintenant trois fichiers:

unique-projets.php archive-projets.php taxonomie-projets.php

Rendons-les réinscriptibles. Ajoutez ces trois fonctions à votre fichier d’addons principal:

function your_addons_projects_single_template ($ single_template) global $ post; if ($ post-> post_type == 'projets') if ($ thème_file = localiser_template (array ('single-projects.php')))) $ single_template = $ theme_file;  else $ single_template = your_addons. 'projets / single-projects.php';  return $ single_template;  add_filter ("single_template", "your_addons_projects_single_template", 20);


function your_addons_projects_archive_template ($ archive_template) global $ post; if ($ post-> post_type == 'projets') if ($ thème_file = localiser_template (array ('archive-projects.php'))) $ archive_template = $ theme_file;  else $ archive_template = your_addons. 'projets / archive-projects.php';  return $ archive_template;  add_filter ("archive_template", "your_addons_projects_archive_template", 20);


function your_addons_projects_taxonomy_template ($ taxonomy_template) if (is_tax ('projects-category')) if ($ theme_file = Locate_template (tableau ('taxonomy-projects.php'))) $ taxonomy_template = $ theme_file;  else $ taxonomy_template = your_addons. 'projets / taxonomy-projects.php';  return $ taxonomy_template;  add_filter ("taxonomy_template", "your_addons_projects_taxonomy_template", 20);

Changez le nom de ces fonctions pour avoir votre préfixe unique. La logique principale consiste à charger les fichiers de modèle du type d'article personnalisé après avoir vérifié si une copie de celui-ci est présente dans le dossier du thème. Lorsque votre client copie le modèle de type de publication personnalisé dans le thème et l'étend ou l'écrase, le plug-in de votre addons charge la version de votre client du fichier de type de publication personnalisé. Donc, dans cette situation, vos fichiers de base dans le plug-in des addons ne sont pas modifiés, ils sont simplement élargi par votre client. Les futures mises à jour de votre plugin addons ne supprimeront pas les modifications personnalisées de votre client..

Scripts, styles et codes courts personnalisés

Pour les scripts et les styles personnalisés, nous vous recommandons de créer des dossiers séparés et de les mettre en file d'attente comme vous le feriez dans le fichier "functions.php" de votre thème..

Si vous envisagez d'ajouter des codes abrégés personnalisés, vous devez créer et inclure votre fichier de codes abrégés dans votre dossier d'addons. Créez un dossier avec le nom “shortcodes” et dans ce dossier, créez le fichier “yourprefix-shortcodes.php” (dans notre cas: “ninzio-shortcodes.php”). Dans le fichier «-shortcodes.php», vous devez mettre tout votre code de code court personnalisé. 

Comme vous l'aurez compris, nous n'utiliserons pas ce tutoriel pour couvrir le processus de création de codes courts personnalisés, mais je vous recommande de lire le tutoriel de Siddharth:

  • WordPress Shortcodes: la bonne façon

    L'une des principales raisons pour lesquelles WordPress est la plate-forme CMS la plus populaire disponible est le niveau de personnalisation qu'il apporte à la table. Aujourd'hui,…
    Siddharth
    Thème de développement

Incluons notre fichier de shortcodes personnalisé:

require_once ('shortcodes / ninzio-shortcodes.php');

Les langues

Nous avons presque fini avec le plugin addons. Après avoir testé toutes vos fonctionnalités personnalisées, il est temps de créer le fichier de langue pour rendre votre plugin traduisible.. 

Aller au dossier du plugin addons> langues. Utilisez le logiciel PoEdit (PoEdit est une application gratuite disponible pour Mac, Windows et Linux.) Pour générer le fichier de langue. Encore une fois, soyez très précis avec le nom du fichier; les fichiers résultants doivent être nommés exactement comme votre dossier de plug-in addons. Par exemple, le nom de notre plugin est “ninzio-addons”, le fichier de langue doit être “ninzio-addons.pot”. Il s’agit du fichier de langue principal contenant toutes les chaînes de votre domaine textdomain. À partir de ce fichier, vous pouvez créer d'autres fichiers de langue.. 

Pour traduire le fichier de langue de votre plugin addons:

  1. Lancer Poedit.
  2. À Poedit, allez à Fichier> Nouveau à partir d'un fichier POT / PO…
  3. Sélectionnez et ouvrez le fichier pot du dossier languages.
  4. Entrez votre nom, votre adresse e-mail, votre langue et votre pays (c'est-à-dire français de fr_FR, allemand de_DE).
  5. Clique le Mettre à jour bouton dans l'interface principale de Poedit.
  6. Enregistrez le fichier portant le nom «filename-xx_XX.po» avec «xx_XX» pour votre langue et votre pays..
  7. C'est tout!

Conclusion

Maintenant votre plugin est prêt, bravo! Nous avons extrait toutes les fonctionnalités nécessaires de nos fichiers de présentation et fourni un plugin complet que nous pouvons mettre à jour sur plusieurs thèmes.. 

J'espère que vous avez aimé suivre, n'oubliez pas que vous pouvez créer l'exemple de plug-in d'addons emballé sur Github et l'utiliser comme point de départ.