wordpress-wp_nav_menu-dont-show-categories

wp_nav_menu no funciona en categorías y tags de wordpress

Seguimos programando para esta fantástica plataforma, o simplemente instalamos un template y todo funciona perfectamente, pero al tiempo nos percatamos de que hemos ido haciendo cambios, instalando plugins, cambiando configuraciones y de repente nos fijamos en que no funciona wp_nav_menu en las categorías de wordpress.

Este problema puede venir a partir de multitud de cosas, pero lo que es casi seguro es que no querremos empezar a deshabilitar plugins o realizar modificaciones en el código a ciegas, además de perder infinidad de tiempo intentando averiguar por qué se da este problema.

Aquí vamos a presentar una solución bastante sencilla (que puede ser solución permanente o simplemente temporal para no perder los menús en las categorías), pero eso queda a criterio de cada uno.

Como arreglar wp_nav_menu que no funciona en las categorías y tags

Si este es tu problema el primer punto será localizar el menú que desaparece en el código fuente, por norma general en el header.php de nuestro theme tendremos que buscar wp_nav_menu() y seguramente veremos que ese es exactamente el sitio donde se genera nuestro menú. Nuestra solución pasa por incluir un pequeño trozo de código delante y detrás de donde mostramos la función, por tanto si en un primer momento tenemos algo similar a esto:

<?php wp_nav_menu( $args ); ?>

Con estos pequeños trozos de código (que pondremos en todos los wp nav menu que tengamos en el template) podremos engañar a wordpress para que lo muestre quedando así:

<?php 
$wp_query_old = $wp_query;
if(is_category() || is_tag()){ 
    $wp_query = NULL;
    $wp_query = new WP_Query(array('post_type' => 'post','page'));
}
wp_nav_menu( $args ); 
$wp_query = $wp_query_old;
?>

Esta porción de código lo que hará será lo siguiente:

  • $wp_query_old = $wp_query; : recogerá la función de la query que hay en este momento (con la que mantendremos todas las funcionalidades tras mostrar el menú)
  • if(is_category() || is_tag()){: esta parte indica que se ejecutará solamente si es una página de categoría o una página de tags.
  • $wp_query = NULL; : nos aseguramos de eliminar el valor de wp_query para que únicamente quede el que queremos usar.
  • $wp_query = new WP_Query(array(‘post_type’ => ‘post’,’page’)); : engañaremos al menú indicando en wp_query que estamos en una página o post, en lugar de una categoría. De esta forma le obligamos a mostrar el menú.
  • $wp_query = $wp_query_old; : por último y muy importante, restauramos la variable wp_query a su valor anterior al que le hemos dado para que el resto de la página siga funcionando con normalidad, sino nos encontraremos con que todas las páginas de categorías y tags son iguales y nos muestran los últimos posts.
Léete también  Como sincronizar la hora de Wordpress con el reloj atómico [Linux]

Parece difícil pero es bastante simple, en esencia lo que hacemos es decirle al sistema que estamos en un post o página, ya que en ellos sí que somos capaces de ver el menú, y luego le volvemos a indicar los valores reales para que todo funcione correctamente.

Como es algo que hay que redefinir y luego restaurar es de suma importancia hacerlo en todos los menús que tengamos y queramos que aparezcan también en estas páginas, ya que si intentásemos englobarlos todos con un if posiblemente el código intermedio no funcionase correctamente.


AYUDANOS a poder seguir dando respuestas. Te podemos echar una mano y tú también a nosotros, símplemente dale a me gusta.