¿Cómo eliminar UL en wp_nav_menu?
Busqué en este sitio y encontré muchas respuestas para esta pregunta. La mayoría de ellas no funcionan en mi tema.
Aquí hay una solución que encontré y funciona según mis necesidades.
function wp_nav_menu_no_ul()
{
$options = array(
'echo' => false,
'container' => false,
'theme_location' => 'primary'
);
$menu = wp_nav_menu($options);
echo preg_replace(array(
'#^<ul[^>]*>#',
'#</ul>$#'
), '', $menu);
}
Este código eliminará el ul
al principio y al final de wp_nav_menu()
. Así que en mi tema solo escribo
<ul class="primary-nav">
<?php wp_nav_menu_no_ul(); ?>
</ul>
Pero el problema surge nuevamente cuando no agrego o activo ningún menú a través del admin. http://domain.com/wp-admin/nav-menus.php
Pregunta:
¿Cómo elimino el <div><ul>**</ul></div>
independientemente de si el menú está activo o no? Háganmelo saber
¡Finalmente lo logré! :) functions.php
function wp_nav_menu_no_ul()
{
$options = array(
'echo' => false,
'container' => false,
'theme_location' => 'primary',
'fallback_cb'=> 'default_page_menu'
);
$menu = wp_nav_menu($options);
echo preg_replace(array(
'#^<ul[^>]*>#',
'#</ul>$#'
), '', $menu);
}
function default_page_menu() {
wp_list_pages('title_li=');
}
header.php
<ul class="primary-nav">
<?php wp_nav_menu_no_ul(); ?>
</ul>
Esta es la respuesta correcta. Las otras respuestas que sugieren hacer un buscar y reemplazar programático para eliminar <ul>
después de que ya ha sido añadido son simplemente hacerlo al revés

'container' => false
si también quieres eliminar el <div>
que lo envuelve.

La función wp_nav_menu toma un argumento llamado fallback_cb que es el nombre de la función a ejecutar si el menú no existe. Así que cambia tu código a algo como esto:
function wp_nav_menu_no_ul()
{
$options = array(
'echo' => false,
'container' => false,
'theme_location' => 'primary',
'fallback_cb'=> 'fall_back_menu'
);
$menu = wp_nav_menu($options);
echo preg_replace(array(
'#^<ul[^>]*>#',
'#</ul>$#'
), '', $menu);
}
function fall_back_menu(){
return;
}
Incluso puedes eliminar el contenedor del menú y hacer otras cosas con algunos argumentos adicionales enviados a la función wp_nav_menu
Espero que esto ayude.

@בניית אתרים - Gracias por tu explicación. Pero me estoy confundiendo aquí. Según la nota en nav-menu-template.php
fallback_cb - Si el menú no existe, se ejecutará una función de callback. Por defecto es 'wp_page_menu'. Establecer a false para no tener alternativa
¿Qué debería reemplazar para hacer que wp_nav_menu_no_ul()
funcione si establezco false en fallback_cb
? Porque actualmente devuelve en blanco.

Ahora lo entendí :) Muchas gracias בניית אתרים. Por cierto, ¿cómo pronuncio tu apodo? El mío es ja ja

Me he preguntado lo mismo, asumo que es hebreo, ¿cuál sería una traducción precisa? Por curiosidad.. :)

:) sí, es hebreo y es un apodo que elegí hace tiempo que, si se traduce correctamente, significa algo como "diseño web".

El siguiente código debería hacerlo simplemente.
<?php
$my_menu = array(
'menu' => 'main-menu', // Nombre del menú
'container' => '', // Sin contenedor
'items_wrap' => '%3$s' // Solo muestra los items del menú
);
wp_nav_menu( $my_menu ); // Mostrar el menú
?>
Consulta este enlace para la función wp_nav_menu http://codex.wordpress.org/Function_Reference/wp_nav_menu

Si deseas imprimir solo etiquetas <a>
, puedes hacerlo de esta manera:
$primaryMenu = array(
'theme_location' => 'primary',
'menu' => '',
'container' => '',
'container_class' => false,
'container_id' => '',
'menu_class' => 'menu',
'menu_id' => 'primary-menu',
'echo' => false,
'fallback_cb' => 'wp_page_menu',
'before' => '',
'after' => '',
'link_before' => '',
'link_after' => '',
'depth' => 0,
'walker' => ''
);
echo strip_tags( wp_nav_menu( $primaryMenu ), '<a>' );

Sé que esta respuesta no es completamente para esta pregunta, pero hay muchas personas que quieren saber cómo eliminar las etiquetas ul y li en WordPress y agregar otra etiqueta en WordPress.
Por ejemplo, antes de aplicar mi código, WordPress genera este tipo de salida en el menú:
<ul class="*****"><li>abc</li></ul>
Pero si alguien quiere cambiar ul por div y li por una etiqueta a, entonces debería usar el siguiente código:
<?php
$menuParameters = array(
'menu' => 'primary_menu',
'link_before' => '<span>',
'link_after' => '</span>',
'before' => '<div class="tp-primary-header mui-top-home">',
'after' => '</div>',
'container' => false,
'echo' => false,
'depth' => 0,
);
echo strip_tags(wp_nav_menu($menuParameters), '<a><span><div>');
?>
Esto genera una salida en el siguiente formato:
<div class="tp-primary-header mui-top-home"><a href="#"><span>ABC</span></a></div>
<div class="tp-primary-header mui-top-home"><a href="#"><span>def</span></a></div>
<div class="tp-primary-header mui-top-home"><a href="#"><span>XYZ</span></a></div>

<?php
$params = array(
'theme_location' => 'ubicacion_menu', // Localización del tema
'container' => false, // Sin contenedor
'echo' => false, // No imprimir directamente
'items_wrap' => '%3$s', // Envoltorio personalizado para los items
);
echo strip_tags(wp_nav_menu($params), '<a>'); // Mostrar menú conservando solo etiquetas <a>
?>
