正在获取WordPress菜单中的子菜单项的父对象ID

时间:2018-02-27 作者:tylorreimer

我正在为客户端构建一个菜单,它从顶级菜单项的页面中获取自定义字段数据并添加data-color 指向该菜单项。我的那部分没问题。

我现在的问题是data-color 从顶级菜单项到子菜单项。由于子菜单项不一定是顶级页面的子帖子/页面,因此我无法使用$item->post_parent.

在我下一步的行动中,我在这一点上有点卡住了。这是目前为止的代码块。

function data_attribs_menu( $atts, $item, $args ) {
    // check if ACF exists
    if( class_exists(\'acf\') ) {     
        $page_section = get_field( \'page_section\', $item->object_id );
        $parent_page_section = get_field( \'page_section\', $item->post_parent );

        if( $args->theme_location == \'header-menu\' ) {
            if( $item->menu_item_parent == 0 ) {
                $atts[\'data-color\'] = $page_section;
            } else {
                $atts[\'data-color\'] = $parent_page_section;
            }
        }
    }
    return $atts;
}
add_filter(\'nav_menu_link_attributes\', \'data_attribs_menu\', 10, 3);
有没有办法抓住父母的object_id 对于子菜单项?

下面是菜单当前交互方式的视频。Current Menu Interaction without Sub Menus Working

1 个回复
SO网友:mmm

我在评论中犯了两个错误
请尝试此代码

function data_attribs_menu( $atts, $item, $args ) {
    // check if ACF exists
    if( class_exists(\'acf\') ) {     

        $page_section = get_field( \'page_section\', $item->object_id );

        if( $args->theme_location == \'header-menu\' ) {
            if( $item->menu_item_parent == 0 ) {
                $atts[\'data-color\'] = $page_section;
            } else {
                $parentItem = get_post($item->menu_item_parent);
                $parent_page_section = get_field( \'page_section\', $parentItem->_menu_item_object_id);

                $atts[\'data-color\'] = $parent_page_section;
            }
        }

    }

    return $atts;
}
add_filter(\'nav_menu_link_attributes\', \'data_attribs_menu\', 10, 3);
此代码仅在有两级菜单时有效,根据问题中的示例,它是您所需要的。

结束

相关推荐

Add Protocol to Custom Menus

我一直在使用tel: 自定义菜单中的链接与响应性设计相结合,为我的智能手机主题添加了“立即呼叫”按钮。它一直运行良好。一位客户刚刚要求我也添加一个“发送文本”按钮。我想我会用sms: 它似乎有可接受的设备支持。然而,当我保存菜单时,WordPress将其从URL中删除。经过研究,我得出结论,这与esc_url() 和/或wp_kses() (参见Trac ticket #18268). 我编造了以下代码,试图自己添加SMS协议并将其放入函数中。php:<?php function add_n