2016-05-30 5 views
0

Я пытаюсь показать субтитры для своих мобильных пунктов меню.Wordpress - Показать субтитры в мобильное меню из пользовательского поля

Для этого я создал пользовательское поле для отображения page_subheading для каждой страницы.

Я могу получить значение этого настраиваемого поля, используя pageId. Но я не могу добавить этот подзаголовок в меню.

Я попытался следующий код,

wp_nav_menu(array(
     'theme_location' => 'mobile_menu_alt', 
     'menu_class'  => 'dropdown-menu', 
     'fallback_cb' => false, 
     'link_after'  => '</span><div class="subheading">'.$subheading.'</a></div>', 
    )); 

Здесь я называю мое меню и добавить подзаголовок после ссылки меню. Но я не могу дать его динамически. Есть ли способ дать значение $subheading динамически.

ответ

0

Попробуйте добавить это к вашему functions.php

class Walker_Nav_Menu_subheading extends Walker { 
/** 
* What the class handles. 
* 
* @see Walker::$tree_type 
* @since 3.0.0 
* @var string 
*/ 
public $tree_type = array('post_type', 'taxonomy', 'custom'); 

/** 
* Database fields to use. 
* 
* @see Walker::$db_fields 
* @since 3.0.0 
* @todo Decouple this. 
* @var array 
*/ 
public $db_fields = array('parent' => 'menu_item_parent', 'id' => 'db_id'); 

/** 
* Starts the list before the elements are added. 
* 
* @see Walker::start_lvl() 
* 
* @since 3.0.0 
* 
* @param string $output Passed by reference. Used to append additional content. 
* @param int $depth Depth of menu item. Used for padding. 
* @param array $args An array of arguments. @see wp_nav_menu() 
*/ 
public function start_lvl(&$output, $depth = 0, $args = array()) { 
    $indent = str_repeat("\t", $depth); 
    $output .= "\n$indent<ul class=\"sub-menu\">\n"; 
} 

/** 
* Ends the list of after the elements are added. 
* 
* @see Walker::end_lvl() 
* 
* @since 3.0.0 
* 
* @param string $output Passed by reference. Used to append additional content. 
* @param int $depth Depth of menu item. Used for padding. 
* @param array $args An array of arguments. @see wp_nav_menu() 
*/ 
public function end_lvl(&$output, $depth = 0, $args = array()) { 
    $indent = str_repeat("\t", $depth); 
    $output .= "$indent</ul>\n"; 
} 

/** 
* Start the element output. 
* 
* @see Walker::start_el() 
* 
* @since 3.0.0 
* @since 4.4.0 'nav_menu_item_args' filter was added. 
* 
* @param string $output Passed by reference. Used to append additional content. 
* @param object $item Menu item data object. 
* @param int $depth Depth of menu item. Used for padding. 
* @param array $args An array of arguments. @see wp_nav_menu() 
* @param int $id  Current item ID. 
*/ 
public function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) { 
    $indent = ($depth) ? str_repeat("\t", $depth) : ''; 

    $classes = empty($item->classes) ? array() : (array) $item->classes; 
    $classes[] = 'menu-item-' . $item->ID; 

    /** 
    * Filter the arguments for a single nav menu item. 
    * 
    * @since 4.4.0 
    * 
    * @param array $args An array of arguments. 
    * @param object $item Menu item data object. 
    * @param int $depth Depth of menu item. Used for padding. 
    */ 
    $args = apply_filters('nav_menu_item_args', $args, $item, $depth); 

    /** 
    * Filter the CSS class(es) applied to a menu item's list item element. 
    * 
    * @since 3.0.0 
    * @since 4.1.0 The `$depth` parameter was added. 
    * 
    * @param array $classes The CSS classes that are applied to the menu item's `<li>` element. 
    * @param object $item The current menu item. 
    * @param array $args An array of {@see wp_nav_menu()} arguments. 
    * @param int $depth Depth of menu item. Used for padding. 
    */ 
    $class_names = join(' ', apply_filters('nav_menu_css_class', array_filter($classes), $item, $args, $depth)); 
    $class_names = $class_names ? ' class="' . esc_attr($class_names) . '"' : ''; 

    /** 
    * Filter the ID applied to a menu item's list item element. 
    * 
    * @since 3.0.1 
    * @since 4.1.0 The `$depth` parameter was added. 
    * 
    * @param string $menu_id The ID that is applied to the menu item's `<li>` element. 
    * @param object $item The current menu item. 
    * @param array $args An array of {@see wp_nav_menu()} arguments. 
    * @param int $depth Depth of menu item. Used for padding. 
    */ 
    $id = apply_filters('nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args, $depth); 
    $id = $id ? ' id="' . esc_attr($id) . '"' : ''; 

    $output .= $indent . '<li' . $id . $class_names .'>'; 

    $atts = array(); 
    $atts['title'] = ! empty($item->attr_title) ? $item->attr_title : ''; 
    $atts['target'] = ! empty($item->target)  ? $item->target  : ''; 
    $atts['rel'] = ! empty($item->xfn)  ? $item->xfn  : ''; 
    $atts['href'] = ! empty($item->url)  ? $item->url  : ''; 

    /** 
    * Filter the HTML attributes applied to a menu item's anchor element. 
    * 
    * @since 3.6.0 
    * @since 4.1.0 The `$depth` parameter was added. 
    * 
    * @param array $atts { 
    *  The HTML attributes applied to the menu item's `<a>` element, empty strings are ignored. 
    * 
    *  @type string $title Title attribute. 
    *  @type string $target Target attribute. 
    *  @type string $rel The rel attribute. 
    *  @type string $href The href attribute. 
    * } 
    * @param object $item The current menu item. 
    * @param array $args An array of {@see wp_nav_menu()} arguments. 
    * @param int $depth Depth of menu item. Used for padding. 
    */ 
    $atts = apply_filters('nav_menu_link_attributes', $atts, $item, $args, $depth); 

    $attributes = ''; 
    foreach ($atts as $attr => $value) { 
     if (! empty($value)) { 
      $value = ('href' === $attr) ? esc_url($value) : esc_attr($value); 
      $attributes .= ' ' . $attr . '="' . $value . '"'; 
     } 
    } 

    /** This filter is documented in wp-includes/post-template.php */ 
    $title = apply_filters('the_title', $item->title, $item->ID); 

    /** 
    * Filter a menu item's title. 
    * 
    * @since 4.4.0 
    * 
    * @param string $title The menu item's title. 
    * @param object $item The current menu item. 
    * @param array $args An array of {@see wp_nav_menu()} arguments. 
    * @param int $depth Depth of menu item. Used for padding. 
    */ 
    $title = apply_filters('nav_menu_item_title', $title, $item, $args, $depth); 

      $subheading = get_post_meta($item->ID, 'subheading', true); 

    $item_output = $args->before; 
    $item_output .= '<a'. $attributes .'>'; 
    $item_output .= $args->link_before . $title . "<span 'subheading'>" . $subheading . "</span>"; 
    $item_output .= '</a>'; 
    $item_output .= $args->after; 

    /** 
    * Filter a menu item's starting output. 
    * 
    * The menu item's starting output only includes `$args->before`, the opening `<a>`, 
    * the menu item's title, the closing `</a>`, and `$args->after`. Currently, there is 
    * no filter for modifying the opening and closing `<li>` for a menu item. 
    * 
    * @since 3.0.0 
    * 
    * @param string $item_output The menu item's starting HTML output. 
    * @param object $item  Menu item data object. 
    * @param int $depth  Depth of menu item. Used for padding. 
    * @param array $args  An array of {@see wp_nav_menu()} arguments. 
    */ 
    $output .= apply_filters('walker_nav_menu_start_el', $item_output, $item, $depth, $args); 
} 

/** 
* Ends the element output, if needed. 
* 
* @see Walker::end_el() 
* 
* @since 3.0.0 
* 
* @param string $output Passed by reference. Used to append additional content. 
* @param object $item Page data object. Not used. 
* @param int $depth Depth of page. Not Used. 
* @param array $args An array of arguments. @see wp_nav_menu() 
*/ 
public function end_el(&$output, $item, $depth = 0, $args = array()) { 
    $output .= "</li>\n"; 
} 

} // Walker_Nav_Menu_subheading 

и это в ваш файл темы, такие как heading.php

wp_nav_menu(array(
    'theme_location' => 'mobile_menu_alt', 
    'menu_class'  => 'dropdown-menu', 
    'fallback_cb' => false, 
    'walker'   => new Walker_Nav_Menu_subheading() 
)); 

Это зависит от вас, используя имя post_meta из «подзаголовок» ....

Все, что я сделал, это сделать копию стандартного wordPress и изменить, как работает бит после бит.

эти линии

$subheading = get_post_meta($item->ID, 'subheading', true); 

$item_output = $args->before; 
$item_output .= '<a'. $attributes .'>'; 
$item_output .= $args->link_before . $title . "<span 'subheading'>" . $subheading . "</span>"; 
+0

моя проблема заключается в том, что мне нужно $ значение Подрубрика динамически на основе пользовательского поля – Jobz

+0

Затем вам нужно использовать меню ходок вашего собственного творения, чтобы читать идентификатор, получить пост мета и добавить текст подзаголовка. –

+0

@jobz Возможно, вы не увидели изменения в редактировании полного ответа. –

Смежные вопросы