Aquí está mi versión optimizada/extendida de las soluciones sugeridas anteriormente, que es casi totalmente automática. No se necesitan más atributos adicionales de CSS o menú.
Esta versión obtiene dinámicamente una lista de tipos de publicaciones personalizadas y, si el tipo de publicación actual es un tipo de publicación personalizado, elimina la clase 'current_page_parent' de todos los elementos del menú.
Además, comprueba cada elemento del menú para ver si es para una página con una plantilla de página como "página- {custom_post_type_slug} .php", y si es así, agregará la clase 'current_page_parent'.
La prioridad del filtro es 1, como algunos temas, reemplaza el actual_page_parent/etc. clases con una clase como 'activo' (por ejemplo, 'roots' lo hace), por lo que este filtro debe ejecutarse primero.
Por último, utiliza 3 variables estáticas ya que esta función se llama repetidamente y estas (obviamente) permanecen iguales en todas las llamadas.
function theme_current_type_nav_class($css_class, $item) {
static $custom_post_types, $post_type, $filter_func;
if (empty($custom_post_types))
$custom_post_types = get_post_types(array('_builtin' => false));
if (empty($post_type))
$post_type = get_post_type();
if ('page' == $item->object && in_array($post_type, $custom_post_types)) {
if (empty($filter_func))
$filter_func = create_function('$el', 'return ($el != "current_page_parent");');
$css_class = array_filter($css_class, $filter_func);
$template = get_page_template_slug($item->object_id);
if (!empty($template) && preg_match("/^page(-[^-]+)*-$post_type/", $template) === 1)
array_push($css_class, 'current_page_parent');
}
return $css_class;
}
add_filter('nav_menu_css_class', 'theme_current_type_nav_class', 1, 2);
PS. Solo para señalar una deficiencia en todas las soluciones que no son CSS que he visto hasta ahora, incluida la mía: Algo que no se tiene en cuenta es resaltar el elemento de menú padre/ancestro de un elemento que se vincula a una página que muestra publicaciones de la corriente tipo de publicación personalizada. Considere una costumbre tipo de mensaje "producto" y un menú como:
Home Company News Contact
|
\--About Us
\--Products
"productos" es una página con una plantilla "página-product.php" y muestra una visión general de los mensajes de tipo 'producto'. Se destaca debido a la solución publicada. Sin embargo, 'Compañía' como su padre/ancestro también debe ser resaltada, pero no lo es. Algo para tener en cuenta.
+1 Excelente hallazgo, me alegra escuchar que está en trac – TheDeadMedic
Lo he hecho con CSS y clases corporales por ahora. Gracias por la función sin embargo. – Craig
+1 gran pequeño fragmento aquí, me salvó un montón :) – Xavier