Egyszerű felépítésű, egyedi sablonnal rendelkező WordPress oldalak esetén teljesen felesleges bonyolult, többnyelvűsítést lehetővé tevő bővítményt használni, amikor ezt néhány sor kóddal is meg lehet oldani.
A megoldás lényege az oldalak egymás alá rendeltségében rejlik. Létrehozod a magyar nyelvű oldalakat, majd készítesz egy mondjuk angol nyelvű főoldalt. Ennek a slug-ját beállítod „en”-re, és minden angol nyelvű oldalnak ezt adod meg szülőként. Innentől kezdve a sablonban már csak azt kell megkérdezned, hogy az adott oldal szülőinek slugjai között ott van-e az „en”.
Csak hogy jobban érthető legyen, itt az oldalak fa-szerkezete:
- Főoldal
- Szolgáltatások
- Rólunk
- Kapcsolat
- Home (slug: en)
- Solutions
- About
- Contact
Az egyszerűség kedvéért erre készítünk egy, a functions.php-ben elhelyezhető is_english() funkciót, így a sablonban már a WordPress-ben megszokotthoz funkciókhoz hasonlóan használhatjuk:
function is_english($post) { $english = get_id_from_slug('en'); $ancestors = get_post_ancestors($post); if (in_array($english,$ancestors)) { return true; } else { return false; } } function get_id_from_slug($slug) { global $wpdb; $posts = $wpdb->prefix."posts"; $postid = $wpdb->get_var("SELECT id FROM $posts WHERE post_name LIKE '$slug' LIMIT 1"); if ($postid) {return $postid; } else {return FALSE;} }
Ezt a gyakorlatban így tudod használni mondjuk a header.php-ben, hogy a megfelelő nyelvű menü jelenjen meg:
<?php if (is_page('en') or is_english($post)) { wp_nav_menu(array('theme_location' => 'angolmenu')); } else { wp_nav_menu(array('theme_location' => 'magyarmenu')); } ?>
Az if-be azért kell még az is_page(‘en’) vizsgálata, mert az angol főoldal szülei között nyilván nincs ott saját maga, így az angol főoldalon az is_english hamisat ad vissza, és a magyar menü jelenne meg. Ezt ezzel ki lehet küszöbölni.
Egy fix címsor esetben így lehet alkalmazni:
<h1><?php if(is_page('en') or is_english($post)) { echo 'News'; } else { echo 'Hírek'; } ?></h1>
Ezzel a módszerrel akár egynél több plusz nyelvet is hozzá lehet adni a sablonhoz, de egy bizonyos szám fölött nyilván átláthatatlan lesz, ilyenkor pedig célszerű inkább más megoldás után nézni, vagy ebből csinálni egy jobbat.