wp_nav_menu mostrar example container code array wordpress wordpress-theming

wordpress - mostrar - wp_nav_menu example



eliminar li class & id para elementos de menú y lista de páginas (7)

Ejemplo de salida de clase de CSS predeterminada de WordPress:

<li id="menu-item-55" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-55"> <li class="page_item page-item-37">

El elemento de la lista de menú y páginas viene con varias class e id propias.

¿Cómo eliminarlos en el archivo functions.php para el menú y para la lista de páginas?


Aquí hay una solución que se me ocurrió. Elimina todas las identificaciones y clases del wp_nav_menu, pero le permite crear su propia lista "aprobada" de clases y / o id. También cambia el extenso "elemento del menú actual" a "activo". Si prefiere mantener los estilos CSS de WordPress predeterminados, simplemente elimine esa sección del código. En aras de mantener esta publicación mínima, aquí están los enlaces a la pastebin con el código:
http://pastebin.com/W16cxDfY - para su archivo functions.php
http://pastebin.com/CGx4aprf - para su plantilla, donde quiera que vaya el menú


Debería poder eliminarlos enganchando un par de filtros y devolviendo matrices o cadenas vacías en lugar de nuevas clases o ID:

add_filter(''nav_menu_css_class'', ''my_css_attributes_filter'', 100, 1); add_filter(''nav_menu_item_id'', ''my_css_attributes_filter'', 100, 1); add_filter(''page_css_class'', ''my_css_attributes_filter'', 100, 1); function my_css_attributes_filter($var) { return is_array($var) ? array() : ''''; }

Si quisiera mantener clases particulares, podría hacer algo como esto:

function my_css_attributes_filter($var) { return is_array($var) ? array_intersect($var, array(''current-menu-item'')) : ''''; }


Mi solución:

$defaults = array( ''theme_location'' => '''', ''menu'' => '''', ''container'' => '''', ''container_class'' => '''', ''container_id'' => '''', ''menu_class'' => '''', ''menu_id'' => '''', ''echo'' => false, // param important ''fallback_cb'' => ''wp_page_menu'', ''before'' => '''', ''after'' => '''', ''link_before'' => '''', ''link_after'' => '''', ''items_wrap'' => '''', ''depth'' => -1, ''walker'' => '''' ); ob_start(); echo preg_replace( ''#<li[^>]+>#'', ''<li>'', wp_nav_menu( $defaults ) ); $mainNav = ob_get_clean(); // In the page : echo $mainNav;


Si solo desea eliminar todas las listas de clases y los id, agréguelos a functions.php

add_filter(''nav_menu_item_id'', ''filter_menu_id''); add_filter( ''nav_menu_css_class'', ''filter_menu_li'' ); function filter_menu_li(){ return array(''''); } function filter_menu_id(){ return; }


Una adición a la respuesta de Richard: tenemos que limpiar las clases vacías que quedaron atrás:

//Strip Empty Classes add_filter (''wp_nav_menu'',''strip_empty_classes''); function strip_empty_classes($menu) { $menu = preg_replace(''/ class=(["/'])(?!active).*?/1/'','''',$menu); return $menu; }


esto es una adición a la respuesta de Richard.

en caso de que quiera cambiar la clase del elemento del menú actual por otra cosa.

add_filter(''nav_menu_css_class'', ''my_css_attributes_filter'', 100, 1); add_filter(''nav_menu_item_id'', ''my_css_attributes_filter'', 100, 1); function my_css_attributes_filter($var) { if(is_array($var)){ $varci= array_intersect($var, array(''current-menu-item'')); $cmeni = array(''current-menu-item''); $selava = array(''selectedmenu''); $selavaend = array(); $selavaend = str_replace($cmeni, $selava, $varci); } else{ $selavaend= ''''; } return $selavaend; }


simplemente add_filter(''nav_menu_item_id'', ''__return_false''); para el id del elemento de menú