Добавление класса идентификатора страницы в пункты меню навигации
Я хотел бы добавить классы, содержащие идентификационные номера страниц, в пункты <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 answers
Мы можем добавить пользовательские классы навигационного меню через nav_menu_css_class
фильтр.
Пример:
Следующее должно добавить класс 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
должен дать нам соответствующий идентификатор страницы/публикации.
Мы можем видеть, что этот атрибут происходит от 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;