将页面ID类添加到导航菜单项

时间:2016-08-31 作者:Shoelaced

我想将包含页面id号的类添加到<li> “我的导航”菜单中的项目。类似的类由wp_page_menu() 但出于某种原因,它们不是由wp_nav_menu().

我想也许我可以使用“walker”功能(我现在才发现)向<li> 标记和使用get_post_meta( $item->ID, \'_menu_item_object_id\', true ); 我想弄到身份证号码,但我花了很长时间才弄明白怎么做。各种论坛上的每个人似乎都对如何使用walker类作为子菜单等有疑问,我已经尝试了搜索中的各种代码,但都不起作用。我只需要在每个<li> 标签

我当前的菜单代码是基本的:

function abdmenu_nav()
{
wp_nav_menu(
array(
    \'theme_location\'  => \'header-menu\',
    \'menu\'            => \'\',
    \'container\'       => \'div\',
    \'container_class\' => \'menu-{menu slug}-container\',
    \'container_id\'    => \'\',
    \'menu_class\'      => \'menu\',
    \'menu_id\'         => \'\',
    \'echo\'            => true,
    \'fallback_cb\'     => \'wp_page_menu\',
    \'before\'          => \'\',
    \'after\'           => \'\',
    \'link_before\'     => \'\',
    \'link_after\'      => \'\',
    \'items_wrap\'      => \'<ul>%3$s</ul>\',
    \'depth\'           => 0,
    \'walker\'          => \'\'
    )
);
}
我确信这比我现在做的要简单,但我以前从未处理过walker类。我甚至找不到任何关于它是否对我正在尝试的事情是必要的。如果是,我将如何设置?

1 个回复
最合适的回答,由SO网友:birgire 整理而成

我们可以通过nav_menu_css_class 滤器

Example:

下面应该添加CSS类wpse-object-id-{object_id}<li> 标签:

// Add filter
add_filter( \'nav_menu_css_class\', \'wpse_menu_item_id_class\', 10, 2 ); 

// Your navigational menu
wp_nav_menu( $args );

// Remove filter
remove_filter( \'nav_menu_css_class\', \'wpse_menu_item_id_class\', 10, 2 );
其中,我们将过滤器回调定义为:

/**
 * Custom Nav Menu Class For Page ID
 */
function wpse_menu_item_id_class( $classes, $item )
{
    if( isset( $item->object_id ) )
        $classes[] = sprintf( \'wpse-object-id-%d\', $item->object_id );

    return $classes;
}
这里是object_id 属性应该为我们提供相应的页面/帖子ID。

我们可以看到,该属性源于wp_setup_nav_menu_item() 核心功能:

$menu_item->object_id = ! isset( $menu_item->object_id ) 
    ? get_post_meta( $menu_item->ID, \'_menu_item_object_id\', true ) 
    : $menu_item->object_id;

相关推荐

WordPress中声明SplitMenuWalker::Walk($Elements,$max_Depth)时出现警告

我开始在WordPress网站上收到以下错误:警告:SplitMenuWalker::walk($elements,$max\\u depth)的声明应与/home/relati67/public\\u html/wp content/themes/mentis/inc/mega menu/split menu中的walk::walk($elements,$max\\u depth,$args)兼容。php第0行我不知道在这里该怎么办。我发现了一个具有类似内容的线程,但错误指向特定行(不是第0行),并且不