Reparar error menú seleccionado

Destacar el menú current_page_parent correcto

Trasteando con la construcción de mi primer tema desde cero, me he encontrado que, a la hora de resaltar cual es el menú padre de la entrada que estás seleccionando, WordPress selecciona siempre el apartado de Blog, aunque estés visualizando una entrada de un Custom Post Type.

Después de mucho investigar y consultar muchas páginas, he encontrado esta función que lo soluciona aunque tiene ya más de siete años de su publicación.

Solo tienes que adaptarla a tus circunstancias específicas y sustituir en el case el tipo que necesitas ( En este caso he puesto mi CPT referido al Portfolio, que cuando seleccionaba un detalle, cargaba el fichero single-portfolio.php, pero le asignaba la clase current_page_parent al <li> Blog, en lugar del de Portfolio. 

Código para reparar el error current_page_parent

// As of WP 3.1.1 addition of classes for css styling to parents of custom post types doesn't exist.
// We want the correct classes added to the correct custom post type parent in the wp-nav-menu for css styling and highlighting, so we're modifying each individually...
// The id of each link is required for each one you want to modify
// Place this in your WordPress functions.php file

function remove_parent_classes($class)
{
  // check for current page classes, return false if they exist.
	return ($class == 'current_page_item' || $class == 'current_page_parent' || $class == 'current_page_ancestor' || $class == 'current-menu-item') ? false : true;
}

function add_class_to_wp_nav_menu($classes)
{
	switch (get_post_type()) {
		case 'portfolio': //Poner aquí el tipo de CPT al que quieres ponerle la clase
     		// we're viewing a custom post type, so remove the 'current_page_xxx and current-menu-item' from all menu items.
			$classes = array_filter($classes, "remove_parent_classes");

     		// add the current page class to a specific menu item (replace ###).
			if (in_array('menu-item-3008', $classes)) { //cambiar el nº del menu-item-xxxx por el tuyo correcto
				$classes[] = 'current_page_parent';
			}
			break;

		case 'still':
     		// we're viewing a custom post type, so remove the 'current_page_xxx and current-menu-item' from all menu items.
			$classes = array_filter($classes, "remove_parent_classes");

     		// add the current page class to a specific menu item (replace ###).
			if (in_array('menu-item-348', $classes)) {
				$classes[] = 'current_page_parent';
			}
			break;

      // add more cases if necessary and/or a default
	}
	return $classes;
}
add_filter('nav_menu_css_class', 'add_class_to_wp_nav_menu');

[mas-comentados-interior]

¿Por qué Blog se convierte en current_page_parent con el Tipo de publicación personalizada?

Aquí puedes consultar la fuente del post.

Aunque ha pasado mucho tiempo no he encontrado ninguna otra forma de hacerlo.


¡Suscríbete a nuestra newsletter!

suscríbete