web-dev-qa-db-ja.com

カスタムメニューウィジェットを上書きする

選択したカスタムメニューウィジェットのマークアップとCSS(<div class="soma_container"><ul class=""></ul></div>のような)スタイルをオーバーライドしたいと思います。どうすればいいの? functions.phpのメインナビゲーションとして夢中になっているか、これに関する良いチュートリアルがあれば本当にありがたいです。

私は私がウィジェットポーション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>',
  ));

しかし、カスタムメニューのリストCSSをどのように上書きするのでしょうか。

2
fefe

わかりました、ここに行きます。デフォルトのナビゲーションウィジェットを拡張しました。これをテーマ関数ファイルに追加してください。これをした後、あなたのダッシュボードのウィジェットに行きなさいそして今あなたは「マットロイヤルカスタムメニュー」と呼ばれるウィジェットを見るでしょう。これを使ってください。

以下のコードでは、divクラスが指定どおりに追加されており、wp_nav_menu($ args)関数で任意の引数を使用できます。あなたがそれに渡すことができるすべての引数をWordPress Codexで見つけることができます: 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

デフォルトウィジェットを拡張してそれから独自のカスタムウィジェットを作成しない限り、これが可能かどうかはわかりません。

ここに plugin があります。ここではかなりの量の制御をここで行うことができます。

0
Matt Royal