¿Cómo eliminar la clase current_page_parent del blog cuando usamos un Custom Post Type (CPT)?

Seguro que nos ha pasado en más de una ocasión y es frustrante averiguar de donde viene el error. Creamos un custom post type (CPT) o tipo de contenido personalizado con archivos en nuestra instalación WordPress.

Supongamos que tenemos los siguientes datos:

  • Tipo de archivo personalizado (CPT) llamado libros.
  • Un blog normal con entradas.
  • El típico menú de WordPress con Inicio / Libros / Blog / Contacto.

Creamos un libro. Al publicarlo y navegar al mismo veremos que en el menú principal la palabra Blog se ilumina (Figura 1). Parece estar seleccionada a pesar de que estamos viendo la página de Libros. Eso es porque se le ha asociado la clase current_page_parent.

Solución

Podemos usar el filtro nav_menu_css_class que se utiliza para agregar o eliminar clases de los elementos del menú. Tendremos que filtrar el elemento de menú que deseamos corregir (el item Blog) y además, indicar cuando deseamos aplicar las nuevas clases. Esto último lo haremos por medio de etiquetas condicionales que nos proporciona WordPress.

Una vez realizado, devolveremos las mismas clases que tiene el objeto, pero sin la clase current_page_parent que es la que le da los estilos de seleccionado al blog cuando en realidad no lo esta.

Para quitar la clase current_page_parent del menú usaremos array_diff de PHP.

Debajo la solución, que permite eliminar la clase current_page_parent del menú blog cuando estamos visitando el custom post type Libros, comentada con las indicaciones anteriores:

// Esta función debe ir dentro del archivo functions.php del tema
function km_quitar_clase_del_blog( $classes, $item ) {
	
	// Aquí comprobamos si estamos viendo los archivos de nuestro CPT libros y si el menú tiene como título Blog
    if( ( is_post_type_archive( 'libros' ) || is_singular( 'libros' ) ) && $item->title == 'Blog' ) {

    	// Aquí eliminamos del array $classes original la clase current_page_parent
        $classes = array_diff( $classes, array( 'current_page_parent' ) );
    }

    // Devolvemos el resultado
    return $classes;
}
add_filter( 'nav_menu_css_class', 'km_quitar_clase_del_blog', 10, 2 );

Tener archivos significa que tiene una página como la página de blog o la página de categorías/tags en WordPress (para más información revisad nuestro tutorial sobre plantillas en WordPress). Puedes aprender todo sobre CPT en nuestro curso WordPress CPT.

 

Menu

Close offcanvas menu Close