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

问题描述 投票:0回答:2

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

我的菜单项自定义字段是

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>';

我已经尝试了几乎所有可能的方法来获取该值,但到目前为止没有一个可行。我知道这绝对会像魅力一样发挥作用,但我认为我在这里错过了一些重要的东西。

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

谢谢!

wordpress
2个回答
3
投票

您需要使用

$item->object_id
而不是
$item->ID
,一切都会正常工作。

也许这是一个迟到的答案,但由于到目前为止还没有人回答,我认为回答它是个好主意,也许它也会对其他人有所帮助。


0
投票
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: $item->Description""';

    // 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.....

}
© www.soinside.com 2019 - 2024. All rights reserved.