web-dev-qa-db-fra.com

Comment créer un thème "prêt au plugin"?

Comment réviser un thème pour pouvoir publier mes hooks d'événement et permettre à quiconque de créer un plugin pour ajouter facilement de nouvelles fonctionnalités à mon thème?

4
Volomike

Après avoir travaillé sur plusieurs projets si importants que je ne connaissais même pas toutes les personnes impliquées, je suis arrivé à une conclusion:

Restez simple, écrivez une bonne documentation.

Le code est simple s’il est facile à lire, à apprendre et à développer.

Ne réinventez pas la roue: utilisez les crochets indiqués dans la mesure du possible, ajoutez-en de nouveaux dans un schéma prévisible.

Un exemple très basique:

if ( ! is_singular() && is_active_sidebar( 't5-archive-sidebar' ) )
{
    do_action( 'sidebar_before' );
    print '<ul id="sidebar">';
    dynamic_sidebar( 't5-archive-sidebar' );
    print '</ul>';
    do_action( 'sidebar_after' );
}

En examinant l'attribut id, tout le monde peut prédire les points d'ancrage, car ils portent toujours le même nom. Vous savez déjà comment les hooks pour <div id="header"> et <div id="content"> seront nommés. Il y a un billet intéressant Trac que vous devriez lire et le thème Hook Alliance @ Otto recommandé dans sa réponse.

Enregistrez tous les callbacks de vos hooks au même endroit: le début du functions.php. Si tout est lié à un point d'ancrage, vous n'avez pas besoin de function_exists(), car un plugin ou un thème enfant peut simplement annuler l'enregistrement de votre fonction et utiliser la sienne.

Exemple:

add_action( 'content_before',       't5_frontpage_widget' );
add_action( 'footer_before',        't5_loop_navigation' );
add_action( 'header_before',        't5_skiplink', 1, 0 );
add_filter( 'the_title',            't5_fill_empty_title', 20, 1 );
add_action( 'wp_loaded',            't5_post_format_support' );
add_action( 'wp_loaded',            't5_load_theme_language' );
add_action( 'wp_loaded',            't5_setup_custom_background' );
add_action( 'wp_loaded',            't5_setup_custom_header' );
add_action( 'wp_loaded',            't5_setup_sidebars' );
add_filter( 'wp_title',             't5_wp_title_filter', 20, 2 );

Incluez des fichiers supplémentaires aussi tard que possible, simplifiez le remplacement de ces fichiers et utilisez un fichier par classe.

Utilisez PHPDoc pour toutes les fonctions et classes, ajoutez le hook appelé par chacune d'elles.

Exemple:

/**
 * Handles posts without a title. Uses the first 35 caharacters instead.
 *
 * @wp-hook the_title 20
 * @param  string $title
 * @return string
 */
function t5_fill_empty_title( $title )
{
}

Le @wp-hook the_title 20 indique au lecteur exactement quand cette fonction sera appelée et comment la supprimer. Pour les codes complexes, fournissez des exemples d'utilisation dans le DocBlock.

Évitez le code qui rend le code de plugin difficile à écrire:

  • Ne jamais inclure de fichiers, déclarer des fonctions ou créer de variables globales dans des fichiers de vue (modèles). Les auteurs sur le thème des enfants devraient recréer à nouveau ceux-ci - perte de temps.
  • Ne jamais exécuter du code lorsque le functions.php est appelé. Liez tout à un crochet pour donner aux plugins une chance de désactiver le code.
  • Ne jamais utiliser un 0 de priorité.
  • N'utilisez jamais require, require_once ou include et include_once dans votre thème. Utilisez plutôt locate_template() . Dans certains cas, un plugin peut enregistrer son propre répertoire en tant que répertoire de thème supplémentaire pour un thème enfant. locate_template() permet à un tel plugin de remplacer un fichier complet.
  • Ne créez jamais des objets anonymes .
  • Ne mettez jamais de type d'article personnalisé, de taxonomies personnalisées, de codes abrégés ou de formulaires de contact dans un thème. C'est un territoire de plugin ordinaire.

Et dernier point, mais non le moindre: utilisez le contrôle de version (Git, Mercurial), écrivez des commits atomiques et expliquez dans chaque message de commit pourquoi la raison pour laquelle vous avez effectué ce changement.

3
fuxia

Essayez d'utiliser des crochets standardisés. Découvrez ceux de la Theme Hook Alliance: https://github.com/zamoose/themehookalliance

1
Otto

Il n’ya vraiment pas de réponse définitive à votre question: Comment créer un thème "prêt au plugin" ?

Cependant, il y a plusieurs choses que vous devriez utiliser dans votre thème. Je ne peux pas énumérer tout ce que vous devriez faire avec autant de détails. Cependant, je peux fournir une courte liste avec une explication rapide pour laquelle vous devriez les utiliser.


Fonctions principales de WordPress

  1. add_theme_support(); - L'ajout d'une prise en charge de thème permet aux développeurs de plug-in de vérifier si certaines fonctionnalités de thème sont présentes et d'injecter des fonctionnalités supplémentaires à chacun.
  2. register_sidebar(); ou register_sidebars(); - La création de barres latérales de manière dynamique permet aux développeurs de plug-in de manipuler la sortie de la barre latérale en masquant ce qui est déjà là-bas, en ajoutant plus de contenu ou en supprimant entièrement une barre latérale.
  3. register_nav_menu(); ou register_nav_menus(); - Permet aux plugins de manipuler fortement votre structure de navigation, comme pour modifier un élément de menu ou pour ajouter un élément. nouvel élément de menu, ou modification des styles CSS, etc ... Ajout de paramètres d'autorisation aux navigations, ou spécifiquement à des éléments de menu de navigation particuliers.
  4. wp_register_sidebar_widget(); et wp_set_sidebars_widgets(); - Les widgets vont vraiment bien avec vos barres latérales dynamiques à partir du deuxième point. Encore une fois, cela permet une grande flexibilité avec votre thème. Permettre aux développeurs d'ajouter des widgets personnalisés et de les insérer dans vos barres latérales dynamiques pour davantage de fonctionnalités ou de contenu.
  5. get_header();get_footer();get_sidebar(); ou get_template_part(); - L’utilisation des fonctions intégrées de WordPress pour obtenir des sections de votre thème permet aux développeurs de plugins de manipuler à nouveau la sortie de votre thème, en insérant du code supplémentaire dans votre thème, en supprimant le code de votre thème, ou en changeant l’effet de votre thème, en utilisant des crochets, que je couvrirai ensuite, après cette liste.
  6. wp_head();wp_footer();wp_title(); et body_class(); - Ces fonctions sont excellentes pour les développeurs de plugins. Cela permet aux développeurs de plugins de mettre en file d'attente les nouveaux scripts ou styles ou de retirer les scripts ou styles existants de l'en-tête et du pied de page de votre thème. Utiliser wp_title(); permet aux développeurs de plug-ins de manipuler la sortie de la balise de titre de votre thème. Idéal pour les plugins de référencement. body_class(); peut vraiment être utilisé pendant pas mal de temps. Je vous recommande vivement de créer un support pour cela dans tous vos thèmes.

Si vous avez des doutes sur une fonction particulière et que vous savez qu'elle doit exister quelque part, essayez de visiter Query Posts, pour obtenir une meilleure référence de code WordPress .


WordPress Hooks (Actions et Filtres)

La prochaine chose que vous devriez considérer serait Hooks WordPress , ou ... Actions et filtres pour être politiquement correct.

Par défaut, WordPress prend déjà en charge de nombreux événements déclenchés dans votre thème si vous utilisez les fonctions publiées dans la liste numérotée, au-dessus de cette section.

Ces "événements" sont appelés "points d'ancrage". Ils permettent aux développeurs de plug-in d'ajouter, de modifier ou de supprimer du code de certaines zones de votre thème. Ou déclenchez un certain événement lorsqu'un autre événement est déclenché dans votre thème.

Ce qui nous amène au domaine suivant auquel vous devriez penser, tout en créant un thème WordPress "prêt au plugin".


Créer vos propres crochets WordPress

Il serait sage d'apprendre à créer vos propres actions et filtres WordPress dans votre thème. Cela permettra aux développeurs de plugins de HAUTEMENT manipuler votre thème WordPress.

Si vous ne savez pas comment créer des actions WordPress ou des filtres WordPress, cliquez ici pour en savoir plus sur créer des actions WordPress avec do_action(); et cliquez ici pour en savoir plus sur créer des filtres WordPress avec apply_filters(); .

Simplement en utilisant davantage de fonctions par défaut fournies par le noyau de WordPress (comme celles énumérées dans la première liste numérotée au début de cette réponse, ou bien ici pour un index de fonction complet ), BEAUCOUP des crochets que les développeurs devraient utiliser, sont déjà définis par le noyau.

Ne soyez jamais timide avec la création de vos propres crochets WordPress, dans votre thème WordPress. Il est toujours préférable de disposer d'un grand nombre de points d'ancrage que les développeurs peuvent exploiter et utiliser, plutôt que de ne pas en avoir assez pour faire ce qu'ils doivent faire.

N'oubliez pas d'utiliser des références uniques à vos noms de hook. (Ils doivent être uniques pour ne pas entrer en conflit avec les points d'ancrage WordPress Core existants, ni avec les points d'ancrage WordPress existants créés par d'autres développeurs de plugins.)

En créant vos propres points d'ancrage, les développeurs de plugins WordPress peuvent se connecter à vos points d'ancrage WordPress créés à l'aide de add_action(); et add_filter(); et configurez la sortie ou le comportement de votre thème WordPress sans apporter de modifications au code principal de votre thème.

Ce qui est bien, lorsque vous publiez une mise à jour pour votre thème, car leurs modifications seront persistantes et ne seront ni écrasées ni perdues par la mise à jour du thème.

Selon @Otto / answer , vous pouvez essayer d'utiliser des hooks standardisés fournis par le Alliance de crochet de thème .


0
Michael Ecklund