2016-07-06 55 views
1

我有一個導航菜單的自定義步行者,其中我想要菜單項自定義字段值進一步自定義我的菜單項。這裏是我的代碼..獲取導航菜單項自定義字段值

我的菜單項自定義字段是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 
    ); 

然而,它更容易獲得這個步行者部分的開始元素中的菜單項自定義字段的值,我只會張貼代碼的重要組成部分,使之短。我希望你明白的地方一定是..

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

我已經試過幾乎所有的可能性,以獲取價值,但沒有人能工作,截至目前。我知道這絕對是一種魅力,但我認爲我錯過了一些重要的東西。

那麼,這有什麼辦法可以實現?

謝謝!

回答

1

你需要使用$item->object_id而不是$item->ID,一切都會正常工作。

也許這是一個遲到的答案,但由於沒有人回答,直到現在我認爲這是一個好主意來回答它,也許它也會幫助別人。