Hoewel WordPress sinds versie 3.0 over uitgebreide functionaliteit beschikt om navigatie menu’s te maken met wp_nav_menu(), werk ik soms liever met de al langer bestaande wp_list_pages() functie.
Het voordeel van de wp_list_pages()
functie is dat gebruikers worden gedwongen de pagina’s juist te ordenen in de WordPress admin omgeving. Hierdoor wordt het eenvoudiger om pagina’s te vinden en snel te zien of het een sub- of hoofdpagina betreft. Ook is de Menu’s functionateit standaard alleen beschikbaar voor Administrators en ik hoef je natuurlijk niet meer te vertellen dat je die rol niet moet gebruiken voor content editing, toch? ;)
Om het toch mogelijk te maken bepaalde pagina’s uit het navigatie menu te filteren, kun je de volgende code aan je functions.php
bestand toevoegen:
De bovenstaande code checkt alle berichten op de aanwezigheid van de meta key _smartmeta_navigation_hide
als de waarde van deze key true
is, wordt de pagina uit de navigatie gefilterd.
Om het eenvoudig te maken deze meta key waarde te selecteren heb ik deze meta box aan de pagina’s toegevoegd (code voorbeeld):
Voor het toevoegen van deze meta box gebruik ik de SmartMetaBox helper class van Nikolay Yordanov. Je hoeft natuurlijk niet per se deze helper te gebruiken voor het toevoegen van de meta box, maar ik vind dit alleen wat makkelijker werken.
Handige oplossing! Wij hebben een multilanguage site en daar is het ontzettend lastig om de navigatie consistent te houden. Met jouw oplossing is dat veel makkelijker dus we gaan er meteen mee aan de slag!! Ook fijn dat ze dan niet meer in de site navigatie links naar andere sites kunnen plaatsen want dat is onwijs slecht voor de SEO en usability.
Toevallig heb ik deze code geschreven voor een multilanguage site :) Want hoewel de WPML plugin de mogelijkheid biedt om menu’s te synchroniseren werkt dit ontzettend omslachtig en onbetrouwbaar.
Hoewel externe links in je site navigatie inderdaad een slecht idee zijn, is het wel jammer dat je met wp_list_pages niet eenvoudig een verwijzing van een hoofdpagina naar een child page kunt maken.