webleads-tracker

WordPress & Référencement naturel
Mes servicesWordPress - Référencement
Hébergement WordPress
Vous êtes ici : SeoMix » WordPress » Thèmes WordPress » Get_Template_Part, Functions.php ou Include ?

Get_Template_Part, Functions.php ou Include ?

Ceux qui modifient, créent ou optimisent les thèmes de WordPress ont déjà rencontré ces deux fonctions : Get_Template_Part et Include. Elles servent toutes les deux à  inclure un autre contenu dans votre page. On pourrait également y ajouter vos propres fonctions, puisqu'elles peuvent également rajouter du contenu dans vos articles.

La question, c'est de savoir quelle méthode utiliser pour optimiser au maximum le temps de chargement de votre thème WordPress.

Commençons tout d'abord à présenter les 3 méthodes avant de montrer les résultats.

Get_Template_Part

La fonction Get_Template_Part fait partie intégrante de WordPress, et permet d'intégrer dans plusieurs types de page un même contenu.

Pour le header, le footer ou les éventuelles sidebar, il existe d'autres fonctions pour les appeler directement. Mais imaginons que vous avez créé un bloc de contenu commun à plusieurs types de pages. Vous allez pouvoir appeler depuis celles-ci  un fichier de template. L'idée, c'est de gagner du temps pour la mise à jour et l'évolution de cet élément.

Voici la syntaxe de la fonction Get_Template_Part de WordPress :

<?php get_template_part('nom-du-template');?>

 Il est également possible de complexifier l'appel en ajoutant un type de template en fonction de la page appelante. On appelera alors un fichier sous la forme {slug}-{name}.php.

Par exemple, j'appelle le fichier monloop depuis la page d'accueil de mon blog WordPress. Mon fichier template s'appelera monloop-index.php, et j'utiliserai le code pour l'insérer :

<?php get_template_part('monloop', 'index');?>

De même pour l'utilisation d'un élément de template seomix-is-good depuis vos pages d'articles. Cela donnerait un fichier seomix-is-good-single.php et le code d'appel suivant :

<?php get_template_part('seomix-is-good', 'single');?>

Documentation complète : Get_Template_Part

Include

La fonction Include n'est pas propre à WordPress, mais à PHP. Dans les anciens thèmes du CMS, on la retrouverait presque systématiquement quand on voulait inclure un même contenu dans plusieurs types de template.

Voici la syntaxe de la fonction Include :

<?php include (TEMPLATEPATH . "/mon-fichier.php"); ?>

Cela permettait donc d'inclure le contenu du template mon-fichier.php dans la page en cours. Libre à vous ensuite de mettre le contenu de votre choix dans ce fichier.

Documentation complète : Php Include

Votre fonction WordPress

Pour terminer, il est possible de créer sa propre fonction qui va ajouter du contenu dans vos pages.

Pour créer une fonction, il faut modifier le fichier functions.php de votre thème WordPress. Vous allez pouvoir ainsi créer une fonction simple qui va afficher un contenu, en vous basant sur cette syntaxe :

function nom-de-ma-fonction () {
echo 'montexte';
}

Pour afficher une simple ligne de contenu, ce code deviendrait alors :

function affichemoncontenu () {
echo "Ma super phrase de contenu";
}

Dans les fichiers de votre thème, il suffira ensuite de copier/coller le code d'appel de la fonction pour faire apparaître votre contenu là où vous le souhaitez :

<?php if (function_exists('affichemoncontenu')) affichemoncontenu();?>

Et le tour est joué : vous avez créé votre fonction WordPress pour ajouter un contenu dans les différentes pages de votre bog.

Résultats du test

Le test mis en place pour tester ces différentes fonctionnalités de WordPress est simple : j'ai pris une page d'un blog que je gère et qui possède par défaut 10 articles différents en page d'accueil. J'ai testé l'insertion d'un contenu statique relativement long de 16000 caractères, avec 40 images (4 images répétées 10 fois). Pour mesure le temps de chargement, j'ai utilisé l'outil Webwait pour charger 100 fois la page pour chaque méthode, chaque chargement étant espacé de 2 secondes.

Attention, comme tout test de ce type, il est soumis à trois variables que l'on ne peut maîtriser totalement, et qui peuvent fausser partiellement les résultats obtenus :

  • La connexion Internet de l'endroit du test.
  • La surcharge du réseau sur cette même connexion.
  • La surcharge variable du serveur sur lequel est le site Internet.
Comme le montre le graphique, c'est le fichier functions.php de WordPress qui l'emporte :
Test des fonctions de WordPress

Le test des fonctions de WordPress

Voici les mêmes résultats sous forme de tableau :

Méthode utilisée Moyenne MaxMin
Sans contenu ajouté2,694,322,34
Fonction2,895,722,47
Include3,108,162,70
Template_part3,067,402,51
 

Comme on peut le constater, une fonction personnalisée sera la meilleure méthode pour ajouter du contenu statique dans votre thème: elle bat à plate couture la fonction include ou les get_template_part de WordPress. Cela provient sans doute du fait que le fichier functions.php est forcément chargé par votre thème, et qu'il mettra donc moins longtemps à s' exécuter plutôt que de charger un autre fichier de template.

Mais les fonctions personnalisées de WordPress ne restent utiles que pour du contenu simple ou statique. Si certains éléments de votre thème font appel à des loops personnalisés par exemple, ou à des requêtes SQL complexes, je vais quand même vous conseiller l'utilisation du Get_Template_Part qui sera plus simple à coder et à implanter, surtout si votre fichier functions est déjà long.

Les thèmes relatifs

Voici les thématiques abordées par Get_Template_Part, Functions.php ou Include ?:

22 commentaires
  1. Djolhan
    3 messages

    Djolhan - Le 19 décembre 2011, 09:52

    Merci pour ce test, c’est effectivement très intéressant comme retour. Et j’avoue que je ne m’attendais pas à voir l’include aussi mauvais par rapport au fichier functions.php. Cela dit, comme tu l’indiques, ca reste logique puisqu’il est chargé systématiquement.

  2. Amaury
    1 message

    Amaury - Le 19 décembre 2011, 10:02

    Je doute qu’il y ait réellement une différence de performances entre ces différentes méthodes.

    Pour moi la grande différence entre le INCLUDE et le GET_TEMPLATE_PART c’est la portée des variables PHP.

    Dans un include, on conserve les variables PHP utilisées dans le fichier parent, alors qu’avec la fonction de WordPress, il faut faire un global PHP.

  3. BoiteaWeb
    53 messages

    BoiteaWeb - Le 19 décembre 2011, 14:21

    Merci Daniel pour ces tests, j’en veux encore !!

    Je suis d’accord avec Amaury et j’ajouterai que l’utilisation du code « pur WordPress » est parfois préféré et demandé par des clients pour que la future maintenance du code soit plus simple si elle est faite par des dev WP.
    Aussi je vous dirait d’éviter de faire un include non sécure comme :
    include( $_GET['monfichier'] );

    Bonne journée !

  4. BoiteaWeb
    53 messages

    BoiteaWeb - Le 19 décembre 2011, 16:12

    Dis, pour le INCLUDE, as-tu mis le lien en relatif ou absolu ? Car il semblerait qu’en absolu les performances soient meilleures, aurais-tu la possibilité de tester en absolu si ce n’était pas le cas ? Merci

  5. Daniel Roch
    727 messages

    Daniel Roch - Le 19 décembre 2011, 19:30

    Mon test était en relatif, car les thèmes le sont toujours (sinon ils seraient incompatibles avec les autres sites).

    Je verrais si j’ai le temps pour refaire le test.

  6. BoiteaWeb
    53 messages

    BoiteaWeb - Le 19 décembre 2011, 19:44

    Non tu peux faire de l’absolu avec de la compatibilité en utilisant les DEFINE de WP et autres dirname/etc

  7. Amaury
    4 messages

    Amaury - Le 19 décembre 2011, 20:27

    Julio > S’il utilise la constante TEMPLATEPATH, alors c’est un chemin absolu fourni par WP !

  8. BoiteaWeb
    53 messages

    BoiteaWeb - Le 19 décembre 2011, 20:52

    Voilà c’est elle dont je parlais. Merci Amaury

  9. Screenfeed
    17 messages

    Screenfeed - Le 19 décembre 2011, 22:46

    Merci Daniel pour ce test très intéressant :)

    Je suis surpris que get_template_part soit plus performant que include (ok, ça se joue à très peu de choses).

  10. alex
    2 messages

    alex - Le 21 décembre 2011, 20:13

    À mon avis, c’est juste de la micro-optimisation qui, dans la plus part des cas, ne sert pas à grand chose.
    Les tests seraient plus fiables s’ils auraient été faits en local. Les résultats sont incohérents — en théorie get_template_part devrait être le plus lent.

  11. arena
    1 message

    arena - Le 23 décembre 2011, 10:26

    @Alex, @Screenfeed,
    Effectivement ces tests ne prouvent rien. get_template_part déroule plus de code et se termine par un ‘require’ …

  12. GeekPress
    16 messages

    GeekPress - Le 24 décembre 2011, 11:30

    Je suis surpris du résultat du test. En « théorie » la fonction de WordPress devrait être moins performante qu’un simple include puisqu’il y a moins de traitement.

    Arena mentionne que get_template_part termine par un require, cela veut peut être dire qu’un require est plus performant qu’un include.

  13. BoiteAWeb
    53 messages

    BoiteAWeb - Le 24 décembre 2011, 13:56

    La différence entre un include et un require c’est que si le fichier à inclure n’est pas trouvé, un simple warning apparait, mais avec un require, si ce fichier n’existe pas, le script s’arrête.

  14. K-rip
    6 messages

    K-rip - Le 23 janvier 2012, 15:33

    Je ne connaissais pas la fonction get_template_part, , merci pour ces précisions ! J’ai cependant du mal à comprendre à quoi correspondent les variables entre parenthèses. J’ai dans mon fichier page.php la ligne suivante :
    Je souhaite apporter des modifications au niveau des balises des pages, mais je ne trouve pas où elles sont générées, il n’y a qu’un fichier loop.php et il ne semble pas concerner les pages…

  15. Olivier C
    10 messages

    Olivier C - Le 13 avril 2012, 09:50

    Je suis d’accord avec certains ici : les tests effectués peuvent êtres très aléatoires.

    Moi par exemple, quand je teste une page donnée de mon site, les tests peuvent donner un résultat de performance temps du simple au double, pour un écart de quelques secondes seulement entre deux tests. La page étant toujours la même, sans modifications.

  16. Daniel Roch
    727 messages

    Daniel Roch - Le 13 avril 2012, 12:06

    @Olivier : tout à fait d’accord avec toi. Ce genre de test peut subir de nombreuses variations qui dépendent des facteurs externes à l’élément testé. C’est d’ailleurs pour cela que chaque méthode a été testé 100 fois pour réduire la marge d’erreur.

  17. Olivier C
    10 messages

    Olivier C - Le 13 avril 2012, 12:27

    C’est vrai Daniel, en faisant une moyenne je pense que l’on peut quand même se faire une idée. Mais ça reste un peu aléatoire…

    À ce propos : j’ai retiré de mon fichier functions.php – temporairement j’espère – ton excellent script sur les menus. Il me faisait perdre au moins deux ou trois secondes dans la génération d’une page (et pourtant j’utilise WP super cache, mais pas à fond il est vrai…). Et cela est vrai pour la plupart des scripts que je met dans ce fichier. Je me demande si j’ai bien configuré mon truc (j’ai créé mon thème moi-même)…

  18. Daniel Roch
    727 messages

    Daniel Roch - Le 14 avril 2012, 11:39

    Tiens, bizarre que tu rencontres ce problème. Il faudra que je regarde mon code de plus près pour voir d’où peut venir le souci.

  19. Pascal
    1 message

    Pascal - Le 19 juillet 2012, 14:25

    J’ai bien aimé le benchmark, même s’il aurait effectivement eu plus de sens effectué en local pour éviter les variations dues entre autre à la bande passante. Par contre, j’ai eu l’occasion de tester un thème où get_template_part était omniprésent, ce qui m’amène à faire quelques remarques par rapport à l’article et aux commentaires :
    - à utiliser un framework, il est préférable d’utiliser l’ensemble du framework pour optimiser développement et maintenance que de créer des fonctions personnalisées, qui éventuellement créeront des conflits lors de la mise à jour de WordPress
    - il est inutile d’utiliser get_template_part si la part récupérée est dédiée au fichier appelant, çà n’a de sens que s’il est possible d’appeler divers types de contenu par exemple à partir d’un même template.
    - découlant de la 2e remarque, il est préférable de revoir (si possible) la hiérarchie des templates plutôt que de créer des

    if(is_single(){get_template_part('loop', 'single')} else {get_template_part('loop', 'archives')}

    . On y gagnera en performances et en lisibilité.

  20. Fabien
    34 messages

    Fabien - Le 02 octobre 2012, 12:55

    Je suis en train de recoder mon thème avec ces principes mais j’ai la très désagréable impression que le nombre de requêtes SQL par page est en train d’exploser à cause de ca (j’ai de plus nombreux loop personnalisés)

    Est-ce à priori lié ou bien ça n’a rien à voir ?

  21. Daniel Roch
    727 messages

    Daniel Roch - Le 02 octobre 2012, 15:47

    Théoriquement, cela n’a rien à voir car ses fonctions ne font pas de requêtes SQL : il faut plutôt regarder du côté de tes loops personnalisés.

  22. roali
    1 message

    roali - Le 17 mars 2013, 15:34

    merci pour cette présentation facile qui nous permet d’ajouter autant de chose a notre blog, la fonction include est trés exhaustive mais a ceux qui comprennent bien wordpress et sa hiérarchie

» Commentez cet article !
(Merci de donner un vrai prénom)
(Ne sera jamais publié)
(Modèration subjective)
Html accepté <a> <i> <b> [codesyntax]CODE[/codesyntax]
» Prévisualisez votre message

© 2010-2012 SeoMix : WordPress & Référencement
Propulsé par WordPress et Daniel Roch. Logo créé par Willy-Bahuaud

Indispensable
WordPress
A propos de SeoMix
Mes servicesWordPress - Référencement
Suivez-nous !
  • 8915 abonnés
  • 197 articles
  • 4619 messages
Vous devriez lire
Seo et emarketing
Les amis
3b6d3c5c4cd4574799620cd0957d99c7KKKKKKKKKKKKKKKKKKKKKKKKKKKKK