WordPress oldal többnyelvűsítése bővítmény nélkül

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.

Tetszett? Oszd meg másokkal is!

A szerző: Szijártó József

2010. óta WordPress fejlesztő. Rengeteg egyedi WordPress fejlesztést készített már. Vállalkozó, oktató, van két kutyája, szereti az elektronikus zenét és egy kis OCD-től is "szenved".

Szijártó József összes bejegyzésének megtekintése →

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük