Como cambiar clases css por defecto del menu de wordpress
Como ya sabemos cuando lo encontramos en el desarrollo de un theme de wordpress siempre lo encontramos con la necesidad de remplazar algunas clases que ya están preestablecida por defecto en nuestro theme. Hoy aprenderemos un sencillo pero efectivo método para cambiar las clases genéricas de nuestro menú de wordpress.
Antes de comenzar voy a poner una estructura html de un menú básico de wordpress.
1 2 3 4 5 | < nav class = "container" > < ul id = "primary-menu" class = "e" > < li id = "menu-item-64" class = "a b -type-custom -object-custom current- -home -64 elemento" > < a href = "#" >Blog</ a ></ li > </ ul ></ nav > |
Vemos en la estructura básica generada por la wp_nav_menu() . Si leemos la documentación oficial de developer.wordpress.org lo brinda a detalles una explicación del comportamiento de dicha función, con la cual lograremos cambiar las clases y id genéricos de la etiqueta nav y ul. Así que veamos como lograrlo
Primero deberemos conocer cual es el identificado de nuestro menú al cual queremos realizar los cambios para eso solo deberemos ir a nuestro function.php de nuestro theme y localizar la función register_nav_menus() y copiar el identificado de nuestro menú que queremos seleccionar
Una vez realizado dicho proceso ingresaremos al archivo header.php y realizaremos una llamada a nuestras querida funcion ya mencionada wp_nav_menu() y le pasaremos un array() el cual lo permitirar realizar los cambios en cuestion.
<?php
wp_nav_menu( array(
'theme_location' => 'menu-1', //Selecionamos menu
'menu_id' => 'primary-menu', //Modificamos ID
'container' => 'nav', //Indicamos el contenedor
'container_class' => 'container', //Modificamos clases de la etiqueta nav
'menu_class' => 'e' //Clase de la etiqueta ul
) );
?>
Genial ya sabemos como modificar las clases nav y ul , pero como podemos hacer para cambiar o añadir clases en la etiqueta li. Para lograrlo deberemos nuevamente recurrir a una función de wordpress llamada nav_menu_css_class() basicamente lo permitira añadrir o filtrar los prefijos de nuestra etiqueta li.<li clases="menu-item menu-item-type-post_type menu-item-object-page menu-item-65"></li>
<!--EJEMPLO-->
<li clases="class_nueva prefijo-item-type-post_type prefijo-item-object-page prefijo-item-65"></li>
Primero deberemos ingresar a function.php de nuestro tema y declara un filtro de wordpress de la siguiente manera.add_filter('funcion_de_wordpress','cambiar_class');
function cambiar_class(){
//codigo de nuestro programa xD
}
Ahora solo deberemos crear nuestro aplicativo que lo permita remplazar la clases del elemento li haciendo uso de la función nav_menu_css_class().add_filter('nav_menu_css_class', 'menu_classes',1,3);
function menu_classes($classes, $item, $args){
//$classes por defecto seleciona a el elemento li
//$item es el devuelve el elemento selecionado por defecto
//$args es un array el cual usamos para llamar a los valores y lo utilizamos para condicionar el menu
//selecionamos el menu para que no afecte a otros menu
if ($args-&amp;amp;amp;gt;theme_location == 'menu-1') // como nombraste el menu
{
//esblecemos la clase
$classes[] = 'elemento';
}
//devolvemos el valor
return $classes;
}
Ejemplo con múltiple clases.
function preg_replace_codesblue( $classes, $item ) {
//print_r($classes);
//cargo en el array los textos a sustituir
$exp_regular = array();
$exp_regular[0] = '/pure-menu-item/';
$exp_regular[1] = '/pure-menu-link/';
$exp_regular[2] = '/menu-item/';
$exp_regular[3] = '/menu-item-type-post_type/';
$exp_regular[4] = '/menu-item-object-page/';
//cargo en el array los textos que pondremos en la sustitucion
$cadena_nueva = array();
$cadena_nueva[0] = 'a';
$cadena_nueva[1] = 'b';
$cadena_nueva[2] = '';
$cadena_nueva[3] = '';
$cadena_nueva[4] = '';
//saco el resultado por pantalla
$x = preg_replace($exp_regular, $cadena_nueva,$classes);
//devolvemos el valor
return $x ;
}
add_filter( 'nav_menu_css_class', 'preg_replace_codesblue', 10, 2 );
Un momento mientras cargamos los comentarios
{{item.date}}
{{item.image}}
{{subitem.date}}
{{subitem.image}}