Inlog en Uitlog in menu

Doel

We voegen een inlog/uitlog ‘schakelaar’ toe aan het menu, die alleen voor het eigen IP adres actief is.

Aanleiding/overwegingen

Ik heb een website zonder publieke gebruikers die inloggen. Om de inhoud aan te passen moet ik zelf regelmatig schakelen. Het is dan niet heel comfortabel om telkens handmatig naar de inlogpagina te moeten gaan. Daarom wil ik een inlog/uitlog schakelaar toevoegen aan het menu. Maar alleen voor persoonlijk gebruik.

Voorbereiding

Ik ga er vanuit dat er al gewerkt wordt met een Child thema. Dat is het handigst en veiligst indien aanpassingen aan de standaard functionaliteit worden gemaakt. De aanpassing hieronder voegen we toe aan het nieuw te maken of bestaande functions.php in het child thema.

Uitvoering

  • Open functions.php en voeg onderstaande code toe.
  • Wijzig daarbij het vermelde IP adres 111.222.333.444 en voer hier het eigen IP adres in.
  • Sla het bestand op en ready is case.
//---------------------------------------------------------
// Jan Peppink - https://ict.peppink.nl
// Add login - logout at the end of menu items
// Condition: Only when I open website from my private IP adress
add_filter('wp_nav_menu_items', 'add_login_logout_to_menu', 10, 2);
function add_login_logout_to_menu($items, $args) {
	if ( $_SERVER['REMOTE_ADDR'] ==  '111.222.333.444' ) {
		ob_start();
		wp_loginout('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
		$newmenulink = ob_get_contents();
		ob_end_clean();
		$items .=  '<li class="menu-item">'. $newmenulink .'</li>';
	}
		return $items;
}

Toelichting bij de regels

  • 5: add_filter is een functie om een functie toe te voegen aan bestaande items. Het resultaat van de functie add_login_logout_to_menu, die in regel 6 start wordt, wordt toegevoegd aan de menu items.
  • 6: De bestaande menu items worden aan de functie doorgegeven.
  • 7: We checken het Remote IP adres dat de server heeft waargenomen. en vergelijken dat met IP adres 111.222.333.444. Als het niet overeenkomt, dan gaan we verder in regel 14 en geven de menu items weer ongewijzigd terug. Pas het IP adres aan en vul het IP adres waarop je wilt checken hier in.
  • 8: Als het IP adres overeenkomt gaan we wat doen.
    ob_start(), ob_get_contents() en ob_end_clean() zijn functies die we hier in samenhang gebruiken. ob_start slaat het navolgende op in buffer dat normaal gesproken in de output zou komen. ob_get_contents() haalt deze inhoud op (en slaat de inhoud op in variabele). ob_end_clean stop het bewaren in de buffer en geeft die weer vrij.
  • 9: De functie wp_loginout geeft een link waarmee de gebruiker inlogt of uitlogd (afhankelijk van huidige staat) en waarbij de bestemmingspagina kan worden opgegeven. Een zogenaamde redirect. HTTP_HOST en REQUEST_URI geven het pad naar de huidige pagina., zodat we na in~ of uitloggen op dezelfde pagina blijven en niet naar de hoofdpagina worden geleid.
  • 10: De verkregen link halen we uit de buffer en bewaren we in de variabele $newmenulink om later in regel 12 toe te passen.
  • 11: ob_end_clean stopt het bewaren van output in de buffer en leegt die.
  • 12: Vervolgens passen we de CSS code voor menu-item toe op de newmenulink en voegen het geheel toe aan de bestaande $items array, waardoor deze aan het eind komt.
  • 14: Het resultaat (menu met afhankelijk van IP adres wel of niet toegevoegde login~ of loguit menu-item) wordt vervolgens door de functie weer teruggegeven.

Resultaat

Voorbeeld van het aangepaste menu

Tips

  • Verwijder regel 7 en 13 om het menu item zonder IP adres controle altijd toe te voegen.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Deze site gebruikt Akismet om spam te verminderen. Meer informatie over hoe uw reactiegegevens worden verwerkt.