非常简单。。。使用自定义Walker。。。您所需要做的就是将某个常量附加到id元素。。。例如实际的帖子或页面id。。。在菜单项->对象id中。。。我真的不明白你为什么这么做。。。通过对CSS的粗略了解,您可以轻松地利用级联来处理子项。。。所有菜单项都已分配了css类@看见the Codex
$args = array (
\'theme_location\' => \'primary\',
\'menu\' => \'Menu Name\',
\'container\' => \'div\',
\'container_class\' => \'nav\',
\'container_id\' => FALSE,
\'menu_class\' => FALSE,
\'menu_id\' => FALSE,
\'echo\' => TRUE,
\'fallback_cb\' => \'wp_page_menu\',
\'before\' => FALSE,
\'after\' => FALSE,
\'link_before\' => FALSE,
\'link_after\' => FALSE,
\'items_wrap\' => "\\n\\t" . \'<ul>%3$s</ul>\' . "\\n",
\'depth\' => 0,
\'walker\' => new ID_Walker()
);
wp_nav_menu( $args );
class ID_Walker extends Walker_Nav_Menu {
function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
global $wp_query;
$indent = ( $depth ) ? str_repeat( "\\t", $depth ) : \'\';
$class_names = $value = \'\';
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
$classes[] = \'menu-item-\' . $item->ID;
$class_names = join( \' \', apply_filters( \'nav_menu_css_class\', array_filter( $classes ), $item, $args ) );
$class_names = $class_names ? \' class="\' . esc_attr( $class_names ) . \'"\' : \'\';
$id = apply_filters( \'nav_menu_item_id\', \'menu-item-\'. $item->ID, $item, $args );
/**
* Add the object id as a reference
* This will tie your menu_item id ref to your post page or cpt
*/
$oid = esc_attr( $item->object_id );
/**
* Append the object id to the element id
*/
$id = $id ? \' id="\' . esc_attr( $id ) . \'-\' . $oid . \'"\' : \'\';
$output .= $indent . \'<li\' . $id . $value . $class_names .\'>\';
$attributes = ! empty( $item->attr_title ) ? \' title="\' . esc_attr( $item->attr_title ) .\'"\' : \'\';
$attributes .= ! empty( $item->target ) ? \' target="\' . esc_attr( $item->target ) .\'"\' : \'\';
$attributes .= ! empty( $item->xfn ) ? \' rel="\' . esc_attr( $item->xfn ) .\'"\' : \'\';
$attributes .= ! empty( $item->url ) ? \' href="\' . esc_attr( $item->url ) .\'"\' : \'\';
$item_output = $args->before;
$item_output .= \'<a\' . $attributes .\'>\';
$item_output .= $args->link_before . apply_filters( \'the_title\', $item->title, $item->ID ) . $args->link_after;
$item_output .= \'</a>\';
$item_output .= $args->after;
$output .= apply_filters( \'walker_nav_menu_start_el\', $item_output, $item, $depth, $args );
}
}