获取导航菜单项自定义字段值

时间:2016-07-06 21:48:19

标签: wordpress

我的导航菜单有一个自定义助行器,我想在其中获取菜单项自定义字段值以进一步自定义我的菜单项。这是我的代码..

我的菜单项自定义字段为menu-item-mymenucolor

我希望在$menu_color中得到它的价值(目前我变得空白了!)

wp_nav_menu( array(
    'menu'   => 'primary',
    'walker' => new WPDocs_Walker_Nav_Menu()
    )
);

// Custom Nav Menu walker class.
class WPDocs_Walker_Nav_Menu extends Walker_Nav_Menu {

function start_lvl( &$output, $depth = 0, $args = array() ) {

    // Depth-dependent classes.
    $indent = ( $depth > 0  ? str_repeat( "\t", $depth ) : '' ); // code indent
    $display_depth = ( $depth + 1); // because it counts the first submenu as 0

    // Custom nav menu item custom field value i want to get in the $classes.
    $menu_color = '"style="background-color: '.get_post_meta($item->ID, 'menu-item-mymenucolor', true).';';

    // Combine values of classes.
    $classes = array(
        'dropdown-menu',
        ( $display_depth % 2  ? 'menu-odd' : 'menu-even' ),
        ( $display_depth >=2 ? 'sub-sub-menu' : '' ),
        'menu-depth-' . $display_depth,
        ''. $menu_color
    );

    $class_names = implode( ' ', $classes );

    // Build HTML for output.
    $output .=  ($depth == 0) ? "\n" . $indent . '<ul class="' . $class_names . '">' . "\n" . "\n <div class=\"megamenu-content\">\n"  . "\n<div class=\"row\">\n" : "\n<ul class=\"elementy-ul\">\n";
    }

// Start the element output codes from here.....

}

实际上,通过插入$ woocommerce全局变量,我可以很容易地在$menu_color位置获得Woocommerce的价值,那么与全局变量有什么关系吗?在这里看看,

 global $woocommerce;

    // get cart quantity
    $cart_qty = $woocommerce->cart->get_cart_contents_count();
    $classes = array(
        'dropdown-menu',
        ( $display_depth % 2  ? 'menu-odd' : 'menu-even' ),
        ( $display_depth >=2 ? 'sub-sub-menu' : '' ),
        'menu-depth-' . $display_depth,
        ''. $cart_qty
    );

然而,更容易获得此walker部分的start元素中的菜单项自定义字段值,我将发布代码的一个重要部分以使其变短。我希望你明白它应该在哪里......

$item_output .= '<a'. $attributes .' style="background-color: '.get_post_meta($item->ID, 'menu-item-mymenucolor', true).';">';
$item_output .= '</a>';

我已经尝试了几乎所有的可能性来获得价值但是现在没有任何可行的方法。我知道这绝对会像魅力一样,但我想我在这里缺少一些重要的东西。

那么,有什么办法可以实现吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要使用$item->object_id代替$item->ID,一切都会正常。

也许这是一个迟到的答案,但由于直到现在都没有人回答我认为回答它是一个好主意,也许它也会帮助其他人。