Freebies
Előfordul, mikor szükség lehet saját készítésű kijelentkezési scriptre. Például amiatt, mivel a wp-admin könyvtár jelszóval védve van a webszerver beállításaiban. Ilyen helyzetbe botlottam a megacp.com tárhelyével kapcsolatban. A szolgáltató az ügyfelei védelmére kettős szintű bejelentkezést állított be. A tárhelyén elhelyezett Wordpress oldalak adminisztrálásához a webszerver kér egy bejelentkezési nevet és jelszót (melyet a felugró ablak tartalmaz). Ennek megadása után jelenik meg a saját bejelentkező felület. Ez alapvetően nem okoz gondot egy átlagos weboldal készítésénél. Viszont egy olyan oldalon, ahol a felhasználóknak be és ki kell jelentkezniük valamilyen okból (például webáruház), a kettős szintű bejelentkezés zavaró lehet. Eddigi tapasztalataim alapján a legtöbb bővítmény, mely tartalmaz bejelentkezési felületet (például WooCommerce), gond nélkül kezeli a bejelentkezést. Sajnos a kijelentkezésnél már a Wordpress saját kijelentkezési eljárását hívják meg, így a kettős szintű hitelesítés miatt felugrik az említett szerver oldali jelszókérő ablak. Ennek elkerülésére saját kijelentkezési folyamatot kell készíteni.
Gyors utána olvasás eredménye a következő kódsor lett:
<?php
require( dirname(__FILE__) . '/wp-load.php' );
wp_logout();
wp_redirect( 'http://' . $_SERVER['HTTP_HOST'] );
exit;
?>
Elég egyszerű és rövid lett az eljárás. Ezt a pár sort gyorsan el is magyarázom. A require utasítással egy meglévő php fájlt hívtam meg, hogy a Wordpress függvényei betöltődjenek. A wp_logout függvény, mint a neve is mutatja, a kijelentkeztetést végzi el. Ezek után szükségünk van egy weblap címre, amire átirányítjuk a felhasználót. Mivel nem akartam túlbonyolítani, így a wp_redirect függvénynek megadtam, hogy a kezdőlapra irányítsa a munkafolyamatot. Annak érdekében, hogy ezt bárki tudja használni, nem fixen megadott oldalt írtam a függvény után, hanem egy ismert standard eljárással megadtam a weboldal kezdőlapját.
Ez eddig nagyon szép, de hogyan tudjuk ezt használni?
Mivel mostanában a WooCoomerce bővítménnyel sokat foglalkozok, így ennek a bővítménynek a fiókkezelő részén keresztül mutatom be a kijelentkezési eljárás módosítását. Először is lássuk az eredeti kódrészt, melyet módosítani kell.
<?php
printf(
__( 'Hello <strong>%1$s</strong> (not %1$s? <a href="%2$s">Sign out</a>).', 'woocommerce' ) . ' ',
$current_user->display_name,
wc_get_endpoint_url( 'customer-logout', '', wc_get_page_permalink( 'myaccount' ) )
);
printf( __( 'From your account dashboard you can view your recent orders, manage your shipping and billing addresses and <a href="%s">edit your password and account details</a>.', 'woocommerce' ),
wc_customer_edit_account_url()
);
?>
Bár sokak számára Kínainak is tűnhet, de nem olyan bonyolult az értelmezés. A printf utasítás megjelenítendő szöveget küld a böngészőnek. Jól látszik, hogy angol nyelvű lesz ez a szöveg. Ezt kicsit átírom, mivel a nyelvi fájlban ez a rész nem szerepel. Két váltózót használ, az egyik a név megjelenítésére, a másik a teljes link átadására szolgál. Korábbi bejegyzésemben a display_name helyett a user_nicename használatára tértem át, így itt is ezt fogom használni. Kis módosítás után ilyen lesz a kódrész:
<?php
printf(
__( 'Üdvözöllek <strong>%1$s</strong>! (<a href="%2$s/logout.php">Ha szeretnél kijelentkezni kattints ide.</a>).', 'woocommerce' ) . ' ',
$current_user->user_nicename,
site_url()
);
printf( __( 'From your account dashboard you can view your recent orders, manage your shipping and billing addresses and <a href="%s">edit your password and account details</a>.', 'woocommerce' ),
wc_customer_edit_account_url()
);
?>
Mint látható, a második váltózó jelentősen egyszerűbb lett. A site_url függvény tökéletesen visszaadja a kezdőoldal címét, melyhez csak hozzá kell tűzni a logout.php-t. Ezzel el is készült a módosítás, amivel már a saját kijelentkezési eljárásunk tökéletesen működik.