Qu'est-ce qui devrait être spécifiquement inclus dans theme_name_setup ()?

4

J'ai "hérité" du développement d'un ancien thème que je suis en train de mettre au point pour WP 3.9. Le code de thème est livré avec un functions.php qui a une fonction nom_thème () qui se connecte à after_theme_setup. Jusqu'ici tout va bien. Cependant, il semble que tout ce qui se trouve sous le soleil a été jeté dans la fonction theme_name_setup (), ainsi que tous les autres fichiers de thème pour les pages d’administration, les fonctions de modèles, les fonctions de style, les en-têtes personnalisés, les widgets, etc. - tout cela est appelé (via require_once ) depuis ce nom_thème_set_setup (), et est donc tout chargé, bon gré mal gré, sur le hook after_theme_setup.

J'ai examiné d'autres thèmes (les thèmes par défaut 2012, -13, -14 et les traits de soulignement) qui ont une fonction beaucoup plus propre theme_setup (), et j'en sais assez pour savoir que le raccordement absolu de tout - fonctions au sein de fonctions - sur le le même crochet est une épave de train qui attend de se produire (bien que le thème semble fonctionner correctement de cette façon pour le moment). J'ai des exemples de thèmes par défaut à parcourir, mais ce que je veux savoir (et que je n'arrive pas à trouver via tout-puissant Google) est précisément:

Au-delà des considérations add_theme_support (), textdomain / localisation, register_nav_menus (), et de la prise en charge des miniatures, que faire si, devrait être spécifiquement inclus dans la fonction theme_name_setup (), raccordé comme décrit ci-dessus? (Et, par extension, tout le reste devrait être défini / accroché ailleurs.)

    
posée Caspar 09.07.2014 - 13:14

1 réponse

5

Rien. Une fonction theme_name_setup() ne devrait même pas exister.

  1. Le nom est trop vague. Que signifie Configuration ? C'est également la racine de votre question, car un tel nom ne nous dit rien sur ce que fait la fonction. Pourrait être n'importe quoi ou rien du tout. Techniquement, les thèmes n’ont même pas besoin de functions.php . Mais ils fonctionnent, la configuration se fait par WordPress.

  2. Il enfreint le principe de la responsabilité unique . Ce terme vient de l'objet une programmation orientée, mais l’idée s’applique à tout bon code, c’est même le cœur de la philosophie UNIX : Faire une chose et bien le faire.
    Cela nous amène au prochain problème.

  3. Cela nuit à l'interopérabilité. Prenez en compte la fonction suivante:

    add_action( 'after_setup_theme', 'theme_name_setup' );
    
    function theme_name_setup() {
        require 'widgets.php';
        require 'comment-enhancements.php';
        require 'javascript.php';
    }
    

    Que dois-je faire pour charger uniquement widgets.php et javascript.php dans mon thème enfant? Je dois décrocher la fonction large et répéter des parties de votre code. Et puis, je vous prie de ne jamais renommer, combiner ou diviser des fichiers dans une mise à jour de votre thème parent.

Pour exprimer cela de manière plus positive:

  • Donnez à chaque classe et fonction un nom qui indique au lecteur son rôle. Si vous ne pouvez pas trouver un bon nom précis, ce code en fait probablement trop.

  • Vous pouvez utiliser le même hook avec plusieurs rappels. C'est le point de l'API action / filtre. Utilisez-le.

  • Essayez de laisser chaque fonction renvoyer une valeur utile pour pouvoir la tester et la déboguer séparément. load_theme_textdomain() par exemple renvoie TRUE quand un fichier a été trouvé, FALSE sinon. Si vous utilisez une fonction distincte pour charger la traduction, vous pouvez utiliser cette valeur de retour.

réponse donnée fuxia 16.07.2014 - 01:07

Lire d'autres questions sur les étiquettes