Hinzufügen von Seitenleisten zum Navigationsmenü?

Ist es möglich, dem Navigationsmenü eine Seitenleiste hinzuzufügen?

Ich möchte in der Lage sein, Seitenleisten in Aussehen> Menüs hinzuzufügen, wie ich Seiten hinzufügen.

Ich habe eine Möglichkeit, zusätzliche Seitenleisten zu erstellen, das ist also kein Problem (ich könnte auch einfach mehrere dedizierte Seitenleisten registrieren).

Im Grunde brauche ich eine Möglichkeit, Widgets im Menü anzuzeigen, ohne zusätzliche Plugins zu verwenden.

Ist so etwas möglich? Muss ich Walker_Nav_Menu ?

BEARBEITEN

Meine menu_walker.php sieht so aus:

 // Allow HTML descriptions in WordPress Menu remove_filter( 'nav_menu_description', 'strip_tags' ); function my_plugin_wp_setup_nav_menu_item( $menu_item ) { if ( isset( $menu_item->post_type ) && 'nav_menu_item' == $menu_item->post_type) { $menu_item->description = apply_filters( 'nav_menu_description', $menu_item->post_content ); } return $menu_item; } add_filter( 'wp_setup_nav_menu_item', 'my_plugin_wp_setup_nav_menu_item' ); // Menu without icons class theme_walker_nav_menu extends Walker_Nav_Menu { public function display_element($el, &$children, $max_depth, $depth = 0, $args, &$output){ $id = $this->db_fields['id']; if(isset($children[$el->$id])){ $el->classes[] = 'has_children'; } parent::display_element($el, $children, $max_depth, $depth, $args, $output); } // add classes to ul sub-menus function start_lvl( &$output, $depth = 0, $args = array() ) { // depth dependent classes $indent = ( $depth > 0 ? str_repeat( "\t", $depth ) : '' ); // code indent $display_depth = ( $depth + 1); // because it counts the first submenu as 0 $classes = array( 'navi', ( $display_depth ==1 ? 'first' : '' ), ( $display_depth >=2 ? 'navi' : '' ), 'menu-depth-' . $display_depth ); $class_names = implode( ' ', $classes ); // build html $output .= "\n" . $indent . '
    ' . "\n"; } // add main/sub classes to li's and links function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) { global $wp_query; $indent = ( $depth > 0 ? str_repeat( "\t", $depth ) : '' ); // code indent static $is_first; $is_first++; // depth dependent classes $depth_classes = array( ( $depth == 0 ? 'main-menu-item' : '' ), ( $depth >=2 ? 'navi' : '' ), ( $is_first ==1 ? 'menu-first' : '' ), 'menu-item-depth-' . $depth ); $depth_class_names = esc_attr( implode( ' ', $depth_classes ) ); // passed classes $classes = empty( $item->classes ) ? array() : (array) $item->classes; $class_names = esc_attr( implode( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) ) ); $is_mega_menu = (strpos($class_names,'mega') !== false) ? true : false; $use_desc = (strpos($class_names,'use_desc') !== false) ? true : false; $no_title = (strpos($class_names,'no_title') !== false) ? true : false; if(!$is_mega_menu){ $class_names .= ' normal_menu_item'; } // build html $output .= $indent . '
  • ID) . '" class="' . esc_attr($depth_class_names) . ' ' . esc_attr($class_names) . '">'; // link attributes $attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : ''; $attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : ''; $attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : ''; $attributes .= ! empty( $item->url ) ? ' href="' . (($item->url[0] == "#" && !is_front_page()) ? home_url() : '') . esc_attr($item->url) .'"' : ''; $attributes .= ' class="menu-link '.((strpos($item->url,'#') === false) ? '' : 'scroll').' ' . ( $depth > 0 ? 'sub-menu-link' : 'main-menu-link' ) . '"'; $html_output = ($use_desc) ? '
    '.wp_kses($item->description, allowed_tags()).'
    ' : ''; $item_output = (!$no_title) ? '' . apply_filters( 'the_title', $item->title, $item->ID ) . ''.$html_output : $html_output; // build html $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args ).(($is_mega_menu)?'
    ':''); } function end_el( &$output, $item, $depth = 0, $args = array() ) { $classes = empty( $item->classes ) ? array() : (array) $item->classes; $class_names = esc_attr( implode( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) ) ); $is_mega_menu = (strpos($class_names,'mega') !== false) ? true : false; $output .= (($is_mega_menu)?'
    ':'') . "
  • \n"; } }

Ich habe auch jquery Code, der das Dropdown-Menü hinzufügen wird, um auszuwählen, wie viele Spalten ich in Megamenu habe:

 jQuery(document).ready(function($) { "use strict"; var $depth_zero = $('#menu-to-edit').find('.menu-item-depth-0'); var $depth_one = $('#menu-to-edit').find('.menu-item-depth-1'); var i = 0; $depth_zero.find('.field-description').each(function(){ i++; $(this).before('

'); var classes = $(this).siblings('.field-css-classes').find('input').val(); var current_c; for (var c = 1; c = 0) { $(this).siblings('.field-additional').find('select').val(current_c); } } }); $depth_one.find('.field-description').each(function(){ i++; var use_desc_state = ($(this).siblings('.field-css-classes').find('input').val().indexOf('use_desc') >= 0) ? ' checked' : ''; var no_title_state = ($(this).siblings('.field-css-classes').find('input').val().indexOf('no_title') >= 0) ? ' checked' : ''; $(this).before('


'); }); $('.additional_input, .edit-menu-item-classes').change(function() { var $parent_item = $(this).closest('.menu-item'); define_classes($parent_item); }); function define_classes($item){ var $class_field = $item.find('.field-css-classes input'); var current_class_value = $class_field.val().replace('use_desc','').replace('no_title','').replace('mega1','').replace('mega2','').replace('mega3','').replace('mega4','').replace('mega5','').replace('mega6','').replace('mega7','').replace(' ',' '); var new_class_value = []; new_class_value.push(current_class_value.trim()); if($item.find('.add_mega').length > 0 && $item.find('.add_mega').val() !== ''){ new_class_value.push($item.find('.add_mega').val()); } if($item.find('.use_desc').length > 0 && $item.find('.use_desc').is(':checked')){ new_class_value.push('use_desc'); } if($item.find('.no_title').length > 0 && $item.find('.no_title').is(':checked')){ new_class_value.push('no_title'); } $class_field.val(new_class_value.join(' ').trim()); } });

Ich habe versucht, diesen Code hinzuzufügen, um mein Memgamenu zu erweitern, aber nichts passiert.

Wenn ich hier keine Sidebars anzeigen kann, wäre es dann möglich, einfach Shortcodes in mein Beschreibungsfeld einzufügen? Wie würde ich das tun?

Wenn ich den Shortcode in das Beschreibungsfeld lege, passiert nichts. Jede Hilfe ist erwünscht.

BEARBEITEN

Finde einen anderen Weg. Ich habe eine Metabox zur Menüs-Seite hinzugefügt, die alle meine Seitenleisten auflistet, und dann lege ich den Inhalt der Seitenleisten in das Auswahlfeld (Sie müssen die wp_kses() function im Beschreibungsfeld deaktivieren oder bearbeiten, so dass dies nicht geschieht Streifen alles). Die function sieht folgendermaßen aus:

  

<input type="submit" class="button-secondary submit-add-to-menu right" value="" name="add-post-type-menu-item" id="submit-posttype-sidebars">

<?php } } } $custom_nav = new sidebars_custom_menu; add_action('admin_init', array($custom_nav, 'add_nav_menu_meta_boxes'));

Originalcode von hier

Solutions Collecting From Web of "Hinzufügen von Seitenleisten zum Navigationsmenü?"

könnte es Ihnen bei Ihrer Anfrage helfen:

Im Grunde brauche ich eine Möglichkeit, Widgets im Menü anzuzeigen, ohne zusätzliche Plugins zu verwenden.

Platziere den Code in der functions.php deines Themes

 < ?php register_sidebar( array( 'name' => 'Page Menu', 'id' => 'page-menu', 'before_widget' => '', 'before_title' => false, 'after_title' => false ) ); add_filter( 'wp_page_menu', 'my_page_menu' ); function my_page_menu( $menu ) { dynamic_sidebar( 'page-menu' ); } ?> 

zum Referenz Platzieren von Widget zum Menü und

http://justintadlock.com/archives/2009/04/15/how-to-widgeize-your-page-menu-in-wordpress

Die Lösung, die ich wollte, sieht so aus:

 < ?php // Allow HTML descriptions in WordPress Menu remove_filter( 'nav_menu_description', 'strip_tags' ); function my_plugin_wp_setup_nav_menu_item( $menu_item ) { if ( isset( $menu_item->post_type ) && 'nav_menu_item' == $menu_item->post_type) { $menu_item->description = apply_filters( 'nav_menu_description', $menu_item->post_content ); } return $menu_item; } add_filter( 'wp_setup_nav_menu_item', 'my_plugin_wp_setup_nav_menu_item' ); // Menu class my_theme_walker_nav_menu extends Walker_Nav_Menu { public function display_element($el, &$children, $max_depth, $depth = 0, $args, &$output){ $id = $this->db_fields['id']; if(isset($children[$el->$id])){ $el->classes[] = 'has_children'; } parent::display_element($el, $children, $max_depth, $depth, $args, $output); } // add classes to ul sub-menus function start_lvl( &$output, $depth = 0, $args = array() ) { // depth dependent classes $indent = ( $depth > 0 ? str_repeat( "\t", $depth ) : '' ); // code indent $display_depth = ( $depth + 1); // because it counts the first submenu as 0 $classes = array( 'navi', ( $display_depth == 1 ? 'first' : '' ), ( $display_depth >= 2 ? 'navi' : '' ), 'menu-depth-' . $display_depth ); $class_names = implode( ' ', $classes ); // build html $output .= "\n" . $indent . '
    ' . "\n"; } // add main/sub classes to li's and links function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) { global $wp_query; $indent = ( $depth > 0 ? str_repeat( "\t", $depth ) : '' ); // code indent static $is_first; $is_first++; // depth dependent classes $depth_classes = array( ( $depth == 0 ? 'main-menu-item' : '' ), ( $depth >= 2 ? 'navi' : '' ), ( $is_first == 1 ? 'menu-first' : '' ), 'menu-item-depth-' . $depth ); $depth_class_names = esc_attr( implode( ' ', $depth_classes ) ); // passed classes $classes = empty( $item->classes ) ? array() : (array) $item->classes; $class_names = esc_attr( implode( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) ) ); $is_mega_menu = (strpos($class_names,'mega') !== false) ? true : false; $use_desc = (strpos($class_names,'use_desc') !== false) ? true : false; $is_sidebar = (strpos($class_names,'menu_sidebar') !== false) ? true : false; $no_title = (strpos($class_names,'no_title') !== false) ? true : false; if(!$is_mega_menu){ $class_names .= ' normal_menu_item'; } // build html $output .= $indent . '\n"; } } //Sidebars in Menu if ( !class_exists('sidebars_custom_menu')) { class sidebars_custom_menu { public function add_nav_menu_meta_boxes() { add_meta_box( 'sidebar_menu_add', esc_html__('Add Sidebar', 'theme'), array( $this, 'nav_menu_link'), 'nav-menus', 'side', 'low' ); } public function nav_menu_link() {?>

    < ?php esc_html_e('Select All', 'theme'); ?>

    < ?php } } } $custom_nav = new sidebars_custom_menu; add_action('admin_init', array($custom_nav, 'add_nav_menu_meta_boxes'));

Dies erstellt eine Liste von Seitenleisten, die Sie in das Menü menu_sidebar können, und sie haben eine class menu_sidebar , die Sie verwenden können, um Ihre Widgets zu menu_sidebar , wenn Sie möchten.

Hoffe das hilft jemandem der das selbe will.

 add_filter( 'wp_nav_menu_items', 'add_sidebar_output_to_menu998722', 10, 2 ); function add_sidebar_output_to_menu998722( $items, $args ) { if ($args->theme_location == 'nav-location') { $items .= dynamic_sidebar($sidebar['id']); } }