Wie programmgesteuert Elemente in einem benutzerdefinierten Menü hinzufügen

In meinem benutzerdefinierten WP-Menü enthält ein Element eine Dropdown-Liste darunter, die alle Instanzen von CPT auflistet.

Die einzige Möglichkeit, die ich kenne, besteht darin, die Liste irgendwo anders im DOM mit PHP zu erstellen und dann diese Liste direkt in den benutzerdefinierten Menüpunkt mit Javascript zu verschieben.

Problem: Dies erfordert Javascript.

Gibt es eine Möglichkeit, dasselbe zu tun, indem man die function, die das benutzerdefinierte Menü erstellt, “hackt”, so dass, wenn das Menü von PHP erstellt wird, es bereits diese Listen von CPT-Instanzen enthält?

Solutions Collecting From Web of "Wie programmgesteuert Elemente in einem benutzerdefinierten Menü hinzufügen"

Was Sie wollen, kann getan werden. Es ist wahrscheinlich nicht sehr sauber und ordentlich.

Sie können dies erreichen, indem Sie beim Einfügen eine benutzerdefinierte Walker Class für das wp_nav_menu() .

 class My_Walker_Class extends Walker_Nav_Menu { function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) { $output .= sprintf( "\n
  • https://wordpress.stackexchange.com/questions/158673/how-to-programmatically-add-elements-in-a-custom-menu/%s
  • \n", $item->url, ( $item->object_id === get_the_ID() ) ? ' class="current"' : '', $item->title ); /** * Here you will need to add a conditional to see if the parent menu item was found * and if so go into a subroutine that grabs your CPT list. Add it all to $output. */ if ( $item->object_id == 111 ) // Match by ID { // Call external function that generates CPT list $output .= my_get_cpt_list(); } } } $args = array( 'theme_location' => 'my_theme_location', 'menu' => 'my_menu', 'container' => 'div', 'container_class' => '', 'container_id' => '', 'menu_class' => 'menu', 'menu_id' => '', 'echo' => true, 'fallback_cb' => 'wp_page_menu', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', 'items_wrap' => '
      %3$s
    ', 'depth' => 0, 'walker' => new My_Walker_Class() ); wp_nav_menu( $args );

    Passen Sie natürlich nach Bedarf an, damit es tatsächlich funktioniert.