WordPress: filtrare le voci dei menu di navigazione

Eliminare una voce dai menu di WordPress è un'operazione distruttiva. Infatti la voce eliminata viene completamente rimossa e non è più associata al menu in questione. In realtà esiste una soluzione più intelligente che consiste nel rimuovere dall'output HTML la voce scelta senza eliminarla.

Possiamo utilizzare il seguente codice:


function excludeMenuItems( $items, $menu, $args ) {
	foreach ( $items as $key => $item ) {
        	$id = get_post_meta( $item->ID, '_menu_item_object_id', true );
        	if($id == 134) {
        		unset($items[$key]);
        	}
    }
    return $items;
}

add_filter( 'wp_get_nav_menu_items', 'excludeMenuItems', null, 3 );

L'hook usato ha lo scopo di intercettare la generazione della marcatura del menu prima che questa abbia luogo. In questo stadio le voci del menu non sono altro che oggetti i quali possiedono delle proprietà a noi utili. Nel codice d'esempio abbiamo estratto l'ID di una voce (pagina, post o altro) e abbiamo effettuato un semplice test. In caso di risultato positivo, l'oggetto corrispondente alla voce del menu viene eliminato dall'array. Di conseguenza il menu verrà mostrato senza quella particolare voce.