Führen Sie einen Filter aus, wenn ein Walker ausgeführt wird

Gibt es eine Möglichkeit, eine bestimmte function add_filter , wenn eine bestimmte Walker_Nav_Menu class ausgeführt wird? Die function muss immer ausgeführt werden, wenn der Walker geht, und ich möchte, dass sie Variablen teilen, insbesondere $column_limit . Die function sollte vor allen anderen Dingen im Walker ausgeführt werden, um den Li-classn classn hinzuzufügen, bevor sie generiert werden.

Der Zweck dieser ganzen Reihe von PHP ist die Aktivierung von Mega-Menü-functionalität in WordPress. Im Wesentlichen, wenn ich Markup wie folgt habe:

  

Wenn break und widget classn sind, die vom Benutzer im WordPress-Menü-Editor hinzugefügt wurden, geben der walker und die function Folgendes aus:

  

Die function fügt mega-menu-columns-# dem

  • im obigen Code hinzu. Alle anderen Änderungen werden vom Walker vorgenommen. All das funktioniert, aber ich möchte, dass es mit weniger Konfiguration funktioniert; Im Wesentlichen möchte ich in der Lage sein, das Spaltenlimit einmal zu setzen, und nicht das theme_location in der function theme_location zu müssen. Wenn ich ein Menü für den Walker einstelle, möchte ich, dass mein gesamtes PHP automatisch ausgeführt wird. Wenn dies nicht klar genug ist, bitten Sie um weitere Erläuterungen.

    Hier ist mein aktueller Code:

     // mega menu walker class megaMenuWalker extends Walker_Nav_Menu { private $column_limit = 3; // used to how many columns can be generated (

    Solutions Collecting From Web of "Führen Sie einen Filter aus, wenn ein Walker ausgeführt wird"

    Wenn alles Ihr eigener Code ist, wäre es vernünftig, dies nur als Teil von Walker zu implementieren.

    Wenn Sie einen Filter hinzufügen müssen, während ein anderer Walker läuft, könnten Sie wahrscheinlich:

    Fügen Sie es unter wp_nav_menu_args und überprüfen Sie, ob wp_nav_menu_args auf wp_nav_menu_args eingestellt ist:

     add_filter( 'wp_nav_menu_args', function( $args ) { if ( $args['walker'] instanceof megaMenuWalker ) { add_filter( 'wp_nav_menu_objects', 'callback_name_here' ); } return $args; } ); 

    Entfernen Sie es im wp_nav_menu Hook, nachdem das Menü-Markup vollständig generiert wurde:

     add_filter( 'wp_nav_menu', function( $nav_menu ) { remove_filter( 'wp_nav_menu_objects', 'callback_name_here' ); return $nav_menu; } );