我想将包含页面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类。我甚至找不到任何关于它是否对我正在尝试的事情是必要的。如果是,我将如何设置?
最合适的回答,由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;