J'ai commencé à travailler avec Walker il y a quelques jours et j'ai toujours cette question simple:
Lors de la création de sous-menus et de menus déroulants, quelle est la différence entre utiliser la classe Walker pour la construire ou simplement utiliser la boucle phpforeach avec des balises HTML et les instructions if?
En tant que débutant, je constate toujours que la classe Walker est compliquée pour des raisons peu convaincantes.
P.S: si vous répondez par 'Le marcheur est plus dynamique', expliquez-le avec des exemples.
Si vous construisez un thème juste pour votre propre site Web, vous pouvez facilement réaliser avec PHP boucles ce que la classe - en fait, plus difficile à comprendre - (Walker) atteint. Après tout, la classe se contente de parcourir une structure arborescente et ne fait rien de plus. Si vous savez exactement à quoi vous souhaitez que votre arbre ressemble, vous pouvez y accéder directement avec PHP.
Les choses deviennent différentes lorsque vous construisez quelque chose de plus générique, comme un thème pouvant avoir des thèmes enfants. Ensuite, vous voulez de la flexibilité pour vos utilisateurs. Par exemple, prenons la classe walker_nav_menu
, qui est déjà une extension de la classe de randonneur. L'avantage n'est pas tant dans le code HTML qu'il génère par défaut. La différence réside dans les filtres qu’il incorpore, tels que nav_menu_css_class
, qui permet à un utilisateur de modifier les classes attachées aux éléments du menu <li>
avec une fonction dans son functions.php
. Par exemple:
add_filter('nav_menu_css_class' , 'wpse240664_nav_class' , 10 , 2);
function wpse240664_nav_class($classes, $item){
if(is_single() && $item->title == 'About Us'){
$classes[] = 'highlight-this';
}
return $classes;
}
Avec cette fonction, le thème enfant ajoute une classe 'mettre en surbrillance' à l'élément de menu 'À propos de nous' sur des pages simples. L'alternative aurait été de modifier le fichier de modèle de menu (probablement header.php
). Juste pour modifier un élément de menu, vous devez dupliquer le header.php
entier dans votre thème enfant. Lorsque le header.php
du thème parent est mis à jour, vous devez vérifier les modifications nécessaires dans votre copie enfant. Vous évitez tout cela si vous utilisez la classe marcheur. Plus difficile à mettre en œuvre, peut-être, mais cela fait gagner du temps aux autres utilisateurs de votre code.