web-dev-qa-db-fra.com

Quels sont les avantages de la structure de modèle wordpress ORIGINAL?

Condition préalable: venant d'un monde personnalisé PHP (utilisant symfony, zend, etc.), pour moi, il n'est pas naturel de séparer les modèles de la même manière que dans le thème wordpress original. Par exemple, la partie supérieure d'une page se trouve dans l'en-tête, au centre dans un "index, une page ..." et la partie inférieure dans un pied de page.

exemple de structure actuelle: index.php

[include header]
... main content...
[include footer]

et header.php

<html>
    <head>
      ....
    </head>
    <body>
      .....

et footer.php

       .....
   </body>
</html>

Je suis plus habitué à la structure dans laquelle vous avez une mise en page et incluez un autre modèle (partiel) à l'intérieur. exemple: modèle index.php

    <html>
      <head> [include header] </head> 
      <body> 
          [include body] [include    footer] 
      </body> 
    </html>

J'essaie donc de réfléchir aux avantages de la structure de modèle wordpress originale.

Question: Quels sont les avantages de la structure de modèle wordpress ORIGINAL par rapport au SECOND exemple que j'ai décrit ci-dessus?

6
simple

Premièrement, comme @Toscho l’implique, les balises de modèle get_header() et get_footer() incluent simplement les fichiers nommés header.php et footer.php, respectivement. Les deux balises de modèle sont appelées à partir de modèles fichiers, et vous pouvez séparer le contenu entre modèle fichier (index.php) et partie de modèle fichier (header.php, footer.php) de toute façon. tu veux. Donc, WordPress certainement peut adapter votre dernier exemple.

Cela dit, le vrai pouvoir de la méthode "WordPress" standard de séparation du contenu provient de la hiérarchie de modèles WordPress . Dans WordPress, le fichier index.php est en fait le fichier de modèle dernier utilisé. Il s'agit du fichier de modèle de secours par défaut lorsqu'aucun autre fichier de modèle, plus spécifique, n'a été trouvé:

WordPress Template Hierarchy

Étant donné que l'un des 7 fichiers de modèle (principaux) à 16 (secondaires) (et ce n'est que pour un thème distribué publiquement; les thèmes personnalisés peuvent avoir un nombre quelconque de fichiers de modèle) seront utilisés, en fonction de la contexte actuel, la méthode "WordPress" de séparation des balises minimise la quantité de code dupliqué.

Supposons que vous souhaitiez changer votre type de document de transitionnel à strict (ou que vous souhaitiez passer à HTML5), ou que vous souhaitiez modifier votre déclaration de droit d'auteur dans le pied de page de votre site. En utilisant la méthode "WordPress" de séparation des balises, vous effectuez ces modifications dans le fichier un. En utilisant votre dernière méthode de séparation du contenu, vous apportez ces modifications sept à seize (ou plus) fois.

Modifier

J'ai pensé que cette question se poserait:

Je veux connaître votre opinion concernant la situation suivante. Supposons que nous devions inclure "les balises og (balises méta Open Graph)" et que leur format diffère pour les modèles "index", "single.php" "page" "archive". Si nous avons une structure du type "structure de thème wp d'origine", nous devons utiliser des instructions conditionnelles (if..else) dans le fichier "header.php", n'est-ce pas? Et je pense que tout le monde est d’accord pour dire que les "déclarations conditionnelles" offrent de meilleures performances à la demande, non?

Nous avons plusieurs options:

  1. Utilisez PHP les conditions de requête directement dans header.php
  2. Utilisez PHP les conditions de requête dans les rappels, rattachées à wp_head (ou wp_enqueue_scripts, etc.)
  3. Utilisez get_header( $context ), où $context est basé sur la hiérarchie des modèles et qui inclura header-$context.php s'il est trouvé ou header.php s'il n'est pas trouvé.

Mais les multiples options ne répondent pas vraiment à votre question sous-jacente en matière de performance. Personnellement, je pense que la performance est négligeable, car toutes les conditions de requête sont mises en cache dans le cache d’objets de requête. Donc, les appeler ne devrait vraiment pas entraîner de succès significatif.

7
Chip Bennett

Il n'y a pas de contradiction, vous pouvez utiliser les deux.

Exemple

<!doctype html>
<html <?php language_attributes(); ?>>
  <head>
    <?php get_header(); ?>
  </head>
  <body>
    <?php get_template_part( 'content', get_post_format() ); ?>
    <?php get_footer(); ?>
  </body>
</html>

L'avantage du système WordPress est le suivant: Vous êtes libre de structurer vos modèles comme vous le souhaitez.

7
fuxia