Comment inclure et exiger des fichiers et des modèles dans WordPress

En ce qui concerne PHP, beaucoup de développeurs aiment le langage, beaucoup de développeurs le détestent, et beaucoup de développeurs l'utilisent généralement pour faire leur travail..

Pour ce que ça vaut, je suis de ce dernier camp. Je pense que PHP va bien. Comme pour toute chose, ce n'est pas sans problèmes, mais j'aime bien travailler avec cela et le voir comme un moyen de faire le travail contre un langage pie-dans-le-ciel pendant un certain temps d'utopie du développement.

Le problème, c’est l’une des choses qui passionne les développeurs à propos de PHP - ses fonctionnalités et sa flexibilité - sont les choses mêmes qui nous trébuchent souvent. La liste est longue, mais dans le monde WordPress, l'un des points de confusion les plus courants est la manière appropriée d'inclure des fichiers externes..

PHP propose quatre (!) Façons de le faire et WordPress en propose même sa propre variante.

Dans cet article, nous allons examiner les quatre manières proposées par PHP pour inclure des fichiers, ainsi que des instructions sur le moment d'utilisation de chacun, et passer en revue les fonctionnalités de WordPress pour inclure des fichiers..


Y compris les fichiers avec PHP

De manière générale, inclure des fichiers avec PHP désigne l'action d'inclure un autre script dans le contexte du script sur lequel vous travaillez actuellement..

Vous pouvez considérer cela comme une importation de fichier telle que, lorsque le fichier est renvoyé du serveur, les scripts sont combinés dans l'ordre dans lequel ils sont inclus, puis interprétés comme un fichier unique..

Dans un premier temps, nous examinerons les moyens d’inclure des fichiers en PHP et leurs implications. À la fin de l'article, nous verrons quand nous devrions le faire..

comprendre()

Selon le manuel PHP:

include () inclura et évaluera le fichier spécifié. Si le fichier n'est pas trouvé, un avertissement PHP sera lancé.

En termes simples, cela signifie que PHP se tournera vers le fichier que vous tentez d’inclure. S'il est trouvé, il sera ajouté à votre script à l'endroit exact où vous l'avez déclaré..

C'est important à comprendre. Par exemple, supposons que vous écriviez un ensemble de fonctions qui dépendent d'un ensemble de fonctions précédent. Dans ce cas, vous devrez vous assurer que l'autre fichier est inclus en premier..

D'autre part, si vous souhaitez intégrer un ensemble de fonctions ou un fichier externe au milieu d'une fonction existante, vous pouvez l'inclure exactement à l'endroit où vous en avez besoin..

Deuxièmement, notez que si le fichier est manquant, PHP émettra un avertissement. Selon la configuration du serveur, cela peut apparaître dans le navigateur ou dans un fichier journal (ou les deux)..

Néanmoins, les avertissements ne sont que cela - ils ne sont pas considérés comme fatals et n'arrêtent généralement pas l'exécution, mais il est important de les noter car cela implique généralement qu'une partie de votre travail n'est pas chargée ni interprétée correctement.

Enfin, notez que lorsqu'un fichier est chargé à l'aide de comprendre() qu'il aura accès à toutes les variables précédemment définies dans votre script existant.

Par exemple, supposons que vous travaillez sur une fonction et qu'à mi-parcours, vous allez inclure un fichier séparé. Ce fichier séparé aura accès aux variables définies précédemment dans la fonction dans laquelle il est inclus.

Bien que cela puisse sembler pratique, cela rend le script externe un peu flou car cela n’indique pas nécessairement qu’il dépend de variables définies en externe. Cela peut être déroutant surtout lorsque vous travaillez en équipe.

include_once ()

Tiré directement du manuel PHP:

include_once () aura le même comportement que include () mais n'inclura plus le fichier s'il a déjà été inclus..

De toute évidence, il n’est pas nécessaire de passer autant de temps à parler des points généraux de include_once (), mais il existe des différenciateurs clés entre la façon dont include_once () fonctionne et comment comprendre() travaux.

D'abord, alors que include_once () effectue en grande partie la même chose que comprendre(), ce sera ne pas vous permettent d'inclure le script à nouveau. Cela signifie que si quelque part dans votre projet, un fichier externe a été inclus, c’est l'emplacement définitif dans lequel ce fichier a été inclus.

Alors, quel est l'avantage de cela? En plus de garantir qu'il n'y a qu'un seul endroit dans lequel un script est inclus, cela garantit également que les variables et les fonctions ne seront pas nécessairement redéfinies. Rappelez-vous que lorsque vous utilisez comprendre(), les scripts ont accès aux fonctions et variables définies ci-dessus.

Si vous choisissez de définir un nouvel ensemble de variables ou de fonctions dans un fichier, incluez-le dans un autre script et ne pas utilisation include_once (), vous risquez alors de redéfinir les fonctions et les variables, ce qui pourrait causer des problèmes majeurs avec l'exécution de votre code.


Exiger des fichiers avec PHP

Exiger des fichiers est similaire à l'inclusion de fichiers en ce sens que c'est une autre façon d'inclure un script dans le script en cours d'écriture, mais cela comporte un ensemble de ses propres implications concernant les erreurs et la sécurité..

Bien que vous puissiez considérer l'acte d'exiger un fichier de la même manière que vous pouvez inclure un fichier, cela implique l'implication qu'il est plus fort - c'est-à-dire que le fichier externe est Champs obligatoires pour l'exécution.

Comme nous le verrons, c'est exactement ce cas.

exiger()

Encore une fois, tout droit du manuel PHP:

require () effectue la même chose que include () mais génère une erreur PHP fatale si le fichier n'est pas trouvé.

Alors, voici la chose avec exiger(): il effectuera la même action que comprendre() en ce qui concerne l'importation du script externe dans le contexte de celui sur lequel vous travaillez, mais s'il ne parvient pas à localiser le fichier, il génère une erreur et interrompt complètement l'exécution..

Cela signifie que votre application s’arrête. Avec comprendre(), vous recevrez un avertissement et il tentera de continuer.

À un certain niveau, il peut sembler que l’exigence de fichiers soit la bonne façon de faire. Après tout, pourquoi voudriez-vous risquer d'inclure quelque chose juste pour avoir un avertissement avec une défaillance potentielle de l'application.

Mais tout dépend de la nature de votre travail. Parfois, de simples avertissements PHP sont acceptables - comme oublier d’initialiser l’index d’un tableau - d’autres fois, il faut une erreur..

Il n'y a pas de règles strictes concernant le moment d'utilisation de cette option, mais réfléchissez de manière critique à la nature de ce que vous faites et aux implications que cela comporte si elle échouait.

Demandez une fois()

Enfin, du manuel PHP:

require_once () effectue la même chose que require () mais n'inclura pas le fichier une seconde fois s'il est déjà inclus..

C’est peut-être le plus facile à comprendre puisque nous avons traité les trois dernières fonctions de manière relative. Tout simplement, Demandez une fois() exécute exactement les mêmes fonctions que requis, bien qu'il ne tente pas d'inclure un fichier s'il est déjà chargé dans votre script.


Règles de base

Outre la réflexion critique sur la fonction la mieux adaptée à la nature de votre projet, voici deux règles supplémentaires à prendre en compte lorsque vous travaillez avec comprendre() et exiger():

  • Demandez une fois() est préférable pour les sites de grande taille car il effectue des tâches supplémentaires au niveau inférieur qui ont un impact sur la sécurité et les performances
  • include_once () est plus rapide et généralement acceptable pour les sites de petite taille

Assez facile, mais qu'en est-il des fonctions d'assistance WordPress?


Y compris les fichiers avec WordPress

Avec tout cela dit, il y a sont de meilleurs moyens que d'utiliser comprendre() et exiger() inclure des modèles dans vos projets WordPress.

Disons, par exemple, que vous avez plusieurs fichiers de boucle - un pour un format de publication:

  • loop-standard.php
  • loop-image.php
  • loop-quote.php

Et vous devez les inclure dans single.php chaque fois que vous travaillez sur la page d'un article d'un thème.

À un moment donné, il était acceptable de faire quelque chose comme ceci:

 include_once ('loop-standard.php');

Mais ce n'est plus la meilleure pratique.

get_template_part ()

WordPress offre maintenant une fonction, get_template_part (), cela fait partie de l'API native et est utilisé spécifiquement pour la réutilisation de sections - ou de modèles - de code (à l'exception de l'en-tête, du pied de page et de la barre latérale) dans votre thème.

La fonction accepte deux arguments:

  • Le premier argument est le slug du template. Dans l'exemple ci-dessus, ce serait 'boucle'.
  • Le deuxième argument est le nom du modèle. Dans l'exemple ci-dessus, ce serait 'la norme','citation', ou 'image'.

En nous en tenant à notre exemple ci-dessus, supposons que nous sommes dans la boucle et que nous souhaitons inclure le modèle de format de publication de devis. Dans ce cas, nous ferions ce qui suit:

 if ('quote' == get_post_format ()) get_template_part ('loop', 'quote'); 

Ou, en supposant que vous ayez nommé vos modèles pour qu'ils correspondent aux types de format de publication, vous pouvez faire quelque chose de plus net:

 get_template_part ('loop', get_post_format ());

Propre, droit?

Vous pouvez réellement aller un peu plus loin. Disons que vous avez extrait votre code de pagination dans son propre fichier modèle appelé pagination.php. En utilisant get_template_part (), vous pouvez l'inclure dans l'ensemble de votre site, par exemple, footer.php ou dans index.php, single.php, archives.php, etc. simplement en ajoutant:

 get_template_part ('pagination');

Beaucoup plus facile, n'est-ce pas?


Quand devrais-je utiliser quoi?

Donc, après tout cela, nous n’avons toujours pas encore discuté des directives concernant le moment d’utiliser quoi. Je ne suis nullement une autorité en la matière, mais voici les règles empiriques que je suis:

  1. En développement de thème, j'utilise toujours get_template_part ().
  2. En développement de plugin, j'utilise presque toujours include_once () et je l'utilise généralement une fois dans une fonction. Vous pouvez le voir dans mes chaudières.
  3. Si le plugin que j'écris va être utilisé sur un très grand site, alors j'utilise Demandez une fois().

C'est tout!


Lectures complémentaires

Pour des explications plus détaillées sur le contenu de cet article, veillez à lire les pages de manuel correspondant à chacune des fonctions:

  • comprendre()
  • include_once ()
  • exiger()
  • Demandez une fois()
  • get_template_part ()