web-dev-qa-db-fra.com

Ignorer le widget de menu personnalisé

Je voudrais remplacer certains styles de balisage et css (tels que <div class="soma_container"><ul class=""></ul></div>) sur un widget de menu personnalisé choisi. Comment je ferais ça? Devrait être accroché comme la navigation principale dans functions.php ou s'il y a un bon tutoriel à ce sujet serait vraiment apprécié

Je pense qu'une partie de ce que je peux faire sur la poition de widget init

  register_sidebar(array(
    'name'          => __('Sidebar Menu', 'roots'),
    'id'            => 'sidebar-primary',
    'before_widget' => '<section class="widget %1$s %2$s">',
    'after_widget'  => '</section>',
    'before_title'  => '<h3>',
    'after_title'   => '</h3>',
  ));

mais comment remplacer la liste css pour le menu personnalisé

2
fefe

OK allons y. J'ai étendu le widget de navigation par défaut pour vous. Ajoutez ceci à votre fichier de fonctions de thèmes. Après cela, accédez aux widgets de votre tableau de bord et vous verrez maintenant un widget appelé "Menu personnalisé Matt Royal". Utilisez celui-ci.

Dans le code ci-dessous, la classe div a été ajoutée comme vous l'avez spécifié et vous pouvez utiliser tous les arguments de la fonction wp_nav_menu ($ args). Vous pouvez trouver tous les arguments que vous pouvez lui passer sur le Codex WordPress: http://codex.wordpress.org/Function_Reference/wp_nav_menu

// MattRoyal Custom Navigation Menu widget class

     class Royal_Nav_Menu_Widget extends WP_Widget {

        function Royal_Nav_Menu_Widget() {
            $widget_ops = array( 'description' => __('Add a custom menu to your sidebar.') );
            parent::__construct( 'nav_menu', __('Matt Royal Custom Menu'), $widget_ops );
        }

        function widget($args, $instance) {
            // Get menu
            $nav_menu = ! empty( $instance['nav_menu'] ) ? wp_get_nav_menu_object( $instance['nav_menu'] ) : false;

            if ( !$nav_menu )
                return;

            /** This filter is documented in wp-includes/default-widgets.php */
            $instance['title'] = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base );

            echo $args['before_widget'];

            if ( !empty($instance['title']) )
                echo $args['before_title'] . $instance['title'] . $args['after_title'];

            wp_nav_menu( array( 'fallback_cb' => '', 'menu' => $nav_menu, 'container_class' => 'soma_container', 'menu_class' => 'some_list', ) );

            echo $args['after_widget'];
        }

        function update( $new_instance, $old_instance ) {
            $instance['title'] = strip_tags( stripslashes($new_instance['title']) );
            $instance['nav_menu'] = (int) $new_instance['nav_menu'];
            return $instance;
        }

        function form( $instance ) {
            $title = isset( $instance['title'] ) ? $instance['title'] : '';
            $nav_menu = isset( $instance['nav_menu'] ) ? $instance['nav_menu'] : '';

            // Get menus
            $menus = wp_get_nav_menus( array( 'orderby' => 'name' ) );

            // If no menus exists, direct the user to go and create some.
            if ( !$menus ) {
                echo '<p>'. sprintf( __('No menus have been created yet. <a href="%s">Create some</a>.'), admin_url('nav-menus.php') ) .'</p>';
                return;
            }
            ?>
            <p>
                <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:') ?></label>
                <input type="text" class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" value="<?php echo $title; ?>" />
            </p>
            <p>
                <label for="<?php echo $this->get_field_id('nav_menu'); ?>"><?php _e('Select Menu:'); ?></label>
                <select id="<?php echo $this->get_field_id('nav_menu'); ?>" name="<?php echo $this->get_field_name('nav_menu'); ?>">
                    <option value="0"><?php _e( '&mdash; Select &mdash;' ) ?></option>
            <?php
                foreach ( $menus as $menu ) {
                    echo '<option value="' . $menu->term_id . '"'
                        . selected( $nav_menu, $menu->term_id, false )
                        . '>'. esc_html( $menu->name ) . '</option>';
                }
            ?>
                </select>
            </p>
            <?php
        }
    }

    add_action('widgets_init', create_function('', 'return register_widget("Royal_Nav_Menu_Widget");'));
4
Matt Royal

Sans l'extension du widget par défaut et la création de votre propre widget personnalisé, je ne sais pas si vous pouvez le faire.

Voici un plugin qui permet une quantité importante de contrôle ici et devrait fonctionner pour ce que vous voulez faire.

0
Matt Royal