自定义菜单小部件

时间:2014-07-10 作者:Nsokyi

是否可以自定义自定义菜单小部件?我真正想做的就是更改文本中的“选择类别”。

谢谢

1 个回复
最合适的回答,由SO网友:Matt Royal 整理而成

这里我为您复制了WordPress核心中使用的类,然后更新了类名,Updated_WP_Nav_Menu_Widget 它正在扩展并使用widgets_init() 注册widgit的操作。

/**
 * Navigation Menu widget class
 *
 * @since 3.0.0
 */
 class Updated_WP_Nav_Menu_Widget extends WP_Widget {

    function __construct() {
        $widget_ops = array( \'description\' => __(\'Add a custom menu to your sidebar TEST.\') );
        parent::__construct( \'nav_menu\', __(\'Custom Menu TEST\'), $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 ) );

        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("Updated_WP_Nav_Menu_Widget");\'));

结束

相关推荐

How to add taxonomy in menus?

书籍(自定义帖子类型)小说(税)科学(税)历史(税)--书籍体裁(税务)小说(术语)科学(学期)历史(学期)以下哪一项是做这件事的“好方法”?对于前一个(这是我目前在管理菜单中的功能,我为每个功能都提供了“register\\u taxonomy”功能),我无法选择要在菜单中显示的“Tax”。而对于后者,我可以将它们添加到菜单中,只需要一个“register\\u taxonomy”函数。