Unterschied zwischen Walker-class und Basis-PHP

Ich habe vor ein paar Tagen angefangen mit Walker zu arbeiten und habe immer noch diese einfache Frage:

Wenn Sie Untermenüs und Dropdown-Menüs erstellen , was ist der Unterschied zwischen der Verwendung der Walker-class, um sie zu erstellen, oder einfach mit PHP- Foreach-Schleife mit HTML-Tags und if-statementen?

Als Anfänger sehe ich immer noch, dass die Walker-class aus nicht überzeugenden Gründen kompliziert ist.

PS: Wenn Sie mit “Walker ist dynamischer” antworten, erklären Sie es bitte mit Beispielen.

Solutions Collecting From Web of "Unterschied zwischen Walker-class und Basis-PHP"

Wenn Sie ein Theme nur für Ihre eigene Website erstellen, können Sie mit einigen PHP-Loops leicht erreichen, was die – in der Tat schwieriger zu verstehende – Walker-class erreicht. Schließlich läuft die class nur durch eine baumartige Struktur und tut nichts mehr. Wenn Sie genau wissen, wie Ihr Baum aussehen soll, können Sie direkt mit PHP arbeiten.

Dinge werden anders, wenn Sie etwas allgemeineres erstellen, wie ein Thema, das untergeordnete Themen haben könnte. Dann wollen Sie Flexibilität für Ihre Benutzer. Nehmen walker_nav_menu zum Beispiel die class walker_nav_menu , die selbst bereits eine Erweiterung der Walker-class ist. Der Vorteil liegt nicht so sehr in dem HTML, das es standardmäßig erzeugt. Der Unterschied liegt in den Filtern, die es enthält, wie nav_menu_css_class , was es einem Benutzer ermöglicht, die an Menü

  • nav_menu_css_class angehängten classn mit einer function in der functions.php seines Kindes zu ändern. Beispielsweise:

     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; } 

    Mit dieser function fügt das Kind-Thema eine “Highlight-this” -class zum Menüpunkt “Über uns” auf einzelnen Seiten hinzu. Die Alternative wäre gewesen, die header.php (wahrscheinlich header.php ) zu bearbeiten. header.php zu ändern, müssten Sie die gesamte header.php in Ihrem header.php Thema duplizieren. Wenn die header.php des übergeordneten Themas aktualisiert wird, müssen Sie Ihre header.php Kopie auf notwendige Änderungen überprüfen. All das vermeidest du, wenn du die Walker-class benutzt. Schwieriger zu implementieren, vielleicht, aber es spart Zeit für andere Benutzer Ihres Codes.