web-dev-qa-db-fra.com

Tags de modèle vs get_template_part () vs functions.php

Quand utiliser les balises de template et quand utiliser get_template_part() et quand utiliser function.php? Je suis confus à eux.

Par exemple, si je souhaite afficher les portefeuilles associés sous un seul portefeuille, je peux créer une balise de modèle nommée show_related_portfolios().

En revanche, je peux créer un fichier nommé content-related-portfolios.php et l’utiliser comme get_template_part( 'content', 'related-portfolios' ).

Ou je peux créer une fonction qui récupère les portefeuilles associés dans functions.php.

Existe-t-il des meilleures pratiques pour les utiliser?

2
Sodbileg Gansukh

Une balise de modèle est juste une fonction, je ne peux donc pas comprendre la différence entre une fonction dans functions.php et une balise de modèle.

Donc les choiches sont 2: fonction VS fichier.

Le bon choix dépend au cas par cas, et toutes choses @ shazzad pointées m'ont trouvé d'accord.

Je préfère utiliser file et get_template_part lorsque le code doit contenir beaucoup de code HTML, car je n'aime pas avoir des fonctions qui ouvrent et ferment les balises php ou avec un grand écho de sortie HTML.

En résumé, je préfère les fichiers lorsque la fonctionnalité requise concerne uniquement la présentation et les fonctions lorsque j’ai besoin de quelques calculs.

Parfois, j'utilise les deux, par exemple:

if ( ! function_exists('show_related_portfolios') ) {

    function show_related_portfolios( $someargs = array() ) {
      $defaults = array( ... );
      $args = wp_parse_args( $someargs, $defaults );
      $related_q = new WP_query();
      if ( $related_q->have_posts() ) {
        while( $related_q->have_posts() ) { $related_q->the_post();
          // template for singular related portfolio
          get_template_part( 'content', 'related-portfolio' ); 
        }
      }
      wp_reset_postdata(); 
    }

}

de cette façon, je peux utiliser les arguments de la fonction, déplacer la grande partie de php à l'intérieur d'une fonction et le modèle peut être simplement du code HTML pour la plupart.

L'utilisation de la fonction permet également d'utiliser la fonctionnalité en tant que shortcode avec très peu de travail.

Notez l'instruction if ( ! function_exists('show_related_portfolios') ) {: cette option empêche l'erreur si la fonction est déjà définie et permet en outre aux thèmes enfants de remplacer complètement la fonction. En outre, grâce à l'utilisation de get_template_part, les thèmes enfants peuvent facilement remplacer l'affichage de l'élément singulier.

Notez que ceci est juste un cas, celui que vous avez utilisé comme exemple, mais il est impossible une règle générale de ce qui est mieux.

3
gmazzap

get_template_part() devrait être un choix correct. Parce que,

  • Si le fichier modèle est manquant, cela ne déclenchera aucune erreur, il suffira de le supprimer.
  • Autres/ou vous pouvez trouver le fichier par nom pour de futures modifications
  • Le plugin peut utiliser le hook et changer le fichier dynamiquement

Où, en utilisant la fonction personnalisée pourrait -

  • déclencher une erreur si elle manque d'une manière ou d'une autre Il faudrait un certain temps pour savoir où la fonction a été écrite, si nécessaire pour la modifier par quelqu'un d'autre
  • Il ne peut pas être modifié par une autre fonction/plugin si vous n'êtes pas parti
    N'importe quel crochet.

Avantage d'utiliser la fonction

  • Vous pouvez configurer des arguments pour la fonction, ce qui sera pratique avec une utilisation utile. Ex: function( 'Number of related posts', 'Order', 'excluding / inclusion any posts') etc.
  • La partie modèle vérifie l'existence du fichier (file_exists), ce qui prend un certain temps de chargement, mais les fonctions se chargent beaucoup plus rapidement.

C'est mon opinion, d'autres pourraient avoir une meilleure opinion.

2
Shazzad