Adicione links de nível superior a superior de um menu wordpress chamado “main”

Eu quero adicionar uma extensão para os links de nível superior de um menu wordpress chamado “main”.

A saída html desejada (classs wordpress removidas para um visual claro) ficaria assim:

      

Eu achei esse filtro wordpress há algum tempo, quando o Google (o excesso de vazamento de pilha provavelmente não pode lembrar onde) que acrescenta o tamanho bem, mas o adiciona a todos os menus do meu tema.

 add_filter( 'wp_nav_menu_objects', function( $items ) { foreach ( $items as $item ) { if (!$item->menu_item_parent) { $item->title = '' . $item->title . ''; } } return $items; }); 

Q1. Existe uma maneira de adicionar este filtro apenas ao menu chamado main?

Q2. Esse é o melhor filtro / maneira de conseguir isso?

Obrigado por qualquer ajuda.

Solutions Collecting From Web of "Adicione links de nível superior a superior de um menu wordpress chamado “main”"

$args , o segundo parâmetro passado para wp_nav_menu_objects pode ser usado para verificar qual menu está sendo processado. Isso nos permitirá segmentar apenas o menu desejado.

No código abaixo, verificamos se a lingueta do menu é main e, em caso afirmativo, envolva os itens do menu de nível superior nas tags de extensão.

 /** * Filters the sorted list of menu item objects before generating the menu's HTML. * * @param array $sorted_menu_items The menu items, sorted by each menu item's menu order. * @param stdClass $args An object containing wp_nav_menu() arguments. */ add_filter( 'wp_nav_menu_objects', 'wpse_wp_nav_menu_objects', 10, 2 ); function wpse_wp_nav_menu_objects( $sorted_menu_items, $args ) { // Only modify the "main" menu. if ( ! isset( $args->menu->slug ) || 'main' !== $args->menu->slug ) { return $sorted_menu_items; } // Loop over the menu items wrapping only top level items in span tags. foreach ( $sorted_menu_items as $item ) { if ( ! $item->menu_item_parent ) { $item->title = '' . $item->title . ''; } } return $sorted_menu_items; } 

O filtro acima funcionará tecnicamente para todos os menus, mas com nosso check-in, isso afetará apenas o menu desejado.

Seja ou não wp_nav_menu_objects é o melhor filtro para debate, mas acho que é um bom ajuste para resolver o problema em questão. É certamente melhor do que usar um dos filtros posteriores, como wp_nav_menu_items , wp_nav_menu_{$menu->slug}_items , ou wp_nav_menu que exigiria a análise do HTML do menu.