2013-08-06 2 views
1

두 개의 열이있는 사용자 정의 메뉴 위젯을 만들려고합니다 (예 : 두 개의 다른 메뉴를 선택하여 하나의 메뉴 안에 나란히 표시되도록 할 수 있습니다. 사이드 바 위젯).WordPress 사용자 정의 메뉴 위젯 ==> 2 열로 변경

2 열 텍스트 위젯을 만드는 방법에 대해 tutorial이 발견되었지만 사용자 메뉴 위젯 기능을 편집하여 추가 메뉴를 구현하는 방법을 알아낼 수 없습니다 - 추가 메뉴 변수를 만들려는 시도 (예 : , "$ menus1"및 "$ menus2")는 WordPress를 중단합니다 ("예기치 않은 T 문자열"오류).

"$ instance"배열에 'nav_menu'라는 미리 정의 된 키가 있거나이 키와 'form'함수에 의해 생성 된 값입니까? 후자의 경우 'nav_menu1'및 'nav_menu2'키를 정의 할 수 있습니까 (이전에 시도했지만 '예기치 않은 T 문자열'오류가 발생 했습니까?).

도움을 주시면 감사하겠습니다.

<?php 
/** 
* Custom Menu widget copied from default WP Widget Class and adjusted for 2-columns 
*/ 

class SO_ABC_Tag_List_Widget_2col extends WP_Widget { 

    function __construct() { 
     $widget_ops = array('description' => __('By adding this widget you can select your alphabetical tags menu to display on your website.')); 
     parent::__construct('so_abc_tags_2col', __('SO ABC Tag List 2 col'), $widget_ops); 
    } 

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

     if (!$nav_menu) 
      return; 

     $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'] . '<i class="icon-tags"></i> ' . $instance['title'] . $args['after_title']; 

<div style="float: left; width: 45%"> 
     wp_nav_menu(array('fallback_cb' => '', 'menu' => $nav_menu1)); 
</div> 

<div style="float: left; width: 45%"></div>  
     wp_nav_menu(array('fallback_cb' => '', 'menu' => $nav_menu2)); 
</div> 
     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']; 
     $instance['nav_menu'] = (int) $new_instance['nav_menu']; 
     return $instance; 
    } 

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

     // Get menus 
     $menus1 = get_terms('nav_menu', array('hide_empty' => false)); 
     $menus1 = get_terms('nav_menu', array('hide_empty' => false)); 

     // If no menus exists, direct the user to go and create some. 
     if ((!$menus1 ) AND (!menus2)) { 
      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'); ?>"> 
     <?php 
      foreach ($menus1 as $menu1) { 
       echo '<option value="' . $menu1->term_id . '"' 
        . selected($nav_menu, $menu1->term_id, false) 
        . '>'. $menu1->name . '</option>'; 
      } 
     ?> 
      </select> 
     </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'); ?>"> 
     <?php 
      foreach ($menus2 as $menu2) { 
       echo '<option value="' . $menu2->term_id . '"' 
        . selected($nav_menu, $menu2->term_id, false) 
        . '>'. $menu2->name . '</option>'; 
      } 
     ?> 
      </select> 
     </p> 
     <?php 
    } 
} 

답변

0

당신이 HTML과 PHP 코드 확실히 에러

if (!empty($instance['title'])) 
     echo $args['before_title'] . '<i class="icon-tags"></i> ' . $instance['title'] . $args['after_title']; 
wp_nav_menu (배열 ('fallback_cb'=> ','메뉴 '=> $ nav_menu1))를 야기하는 혼합;
wp_nav_menu(array('fallback_cb' => '', 'menu' => $nav_menu2)); 

는 [ 'after_widget'] $ 인수 메아리; }

처음에는 여전히 작동하지 않는지 확인합니다.
또한 모든 참조를 menu1에서 menu2로 변경하지 않았습니다. 그리고 네, 당신은 $ 인스턴스와 아마도 get_terms에 대한 키를 변경해야합니다 - 플러스 theres 일부 필드 ID 물건 thats 중복 기능.

그러나 나는 당신이 달성하고 싶은 것이 확실하지 않습니다. 하나의 위젯에 2 개의 다른 메뉴를 출력하려고합니다. 내 제안은 동일한 영역에 두 개의 메뉴 위젯을 넣은 다음 CSS를 사용하여 나란히 표시되도록하는 것입니다.