WPML-kompatibilis téma vagy bővítmény készítése
Lépésről lépésre: konfigurációs fájl, sztringek, widgetek, azonosítók, WooCommerce, és a leggyakoribb hibák megoldása.
Ez a fejezet téma- és bővítményfejlesztőknek szól. Végigvezet azon, mit kell megtenned, hogy a termékedet a WPML hibátlanul le tudja fordítani. Minden lépéshez tartozik egy rövid próba, amellyel ellenőrizheted az eredményt.
1. Nyelvi konfigurációs fájl
Szekció neve “1. Nyelvi konfigurációs fájl”A nyelvi konfigurációs fájl (wpml-config.xml) megmondja a WPML-nek, mit kell fordítani a témádban vagy bővítményedben: egyedi tartalomtípusokat, taxonómiákat, mezőket, admin szövegeket, widgeteket. A fájl felépítését a Nyelvi konfigurációs fájl fejezet írja le.
Próba:
- Hozz létre néhány bejegyzést és taxonómiát.
- Küldd el őket fordításra.
- Ellenőrizd, hogy a frontenden lefordítva jelennek meg.
2. Sztringek előkészítése
Szekció neve “2. Sztringek előkészítése”A sztring minden olyan szöveg az oldalon, amely nem bejegyzés, oldal vagy taxonómia része. Hogy a WPML le tudja fordítani, esetenként így készítsd elő:
- Kódba írt szövegek: gettext függvénybe kell csomagolni őket, lásd a Gettext használata fejezetet.
- A
wp_optionstáblában tárolt szövegek: regisztráld őket awpml-config.xmlfájlban. Ha a kulcsok nem fixek, például a téma olyan tömböt használ, amely a felhasználói bevitellel nő, dinamikusan, a WPML API függvényeivel regisztráld a bejegyzéseket. - Dinamikus szövegek: felhasználói bevitel, egyedi adatbázistáblákban tárolt tartalom, vagy sztringcsomagokba rendezett szövegek. Ezekhez a WPML sztringregisztrációs és sztringcsomag-függvényeit használd.
A sztringek ellenőrzéséhez használhatod a Multilingual Tools bővítményt, amely megmutatja, mely sztringek fordíthatók, és melyek igényelnek további beállítást. Ezt a bővítményt csak tesztoldalon használd.
Próba:
- A WPML → Theme and plugins localization oldalon olvasd be a témádat vagy bővítményedet.
- Hozz létre egy oldalt a szövegekkel.
- Nézd meg, megjelennek-e a sztringek a WPML → String Translation oldalon.
- Fordíts le néhányat, és ellenőrizd a frontenden.
3. Egyedi widgetek és blokkok regisztrálása
Szekció neve “3. Egyedi widgetek és blokkok regisztrálása”Ha a termékedben oldalépítőhöz (például Elementorhoz) való egyedi widgetek vannak, regisztrálnod kell őket a fordításhoz. A módját az Oldalépítő-widgetek regisztrálása és a Gutenberg-blokkok fordíthatóvá tétele fejezet mutatja.
Próba:
- Hozz létre egy oldalt az összes egyedi widgettel.
- Küldd fordításra, és nézd meg, megjelennek-e a widgetek szövegei az Advanced Translation Editorban.
- Ellenőrizd a fordításokat a frontenden.
- Ismételd meg más widgetbeállításokkal.
4. Azonosítók lekérése a másik nyelven
Szekció neve “4. Azonosítók lekérése a másik nyelven”Ha a funkciód nyelvenként más bejegyzés-azonosítót tölt be (például egy csúszka minden nyelven más diákkal), a wpml_object_id szűrővel kérd le a lefordított bejegyzés azonosítóját:
// Loop postswhile (have_posts()): the_post();$post = get_post( apply_filters( 'wpml_object_id', $post->ID, 'slide' ) );Próba:
- Hozd létre a bejegyzést vagy sablont egy szöveges sztringgel.
- Állítsd be a funkciót úgy, hogy ezt használja.
- Fordítsd le a bejegyzést, és adj a sztringnek más értéket.
- Ellenőrizd, hogy a funkció a frontenden a lefordított azonosítót tölti be.
5. WooCommerce-kompatibilitás
Szekció neve “5. WooCommerce-kompatibilitás”A WooCommerce tartalmát a WPML Multilingual & Multicurrency for WooCommerce kiegészítő fordítja. Ha a témád vagy bővítményed WooCommerce-elemeket tartalmaz, igazítsd a WooCommerce-es kompatibilitási útmutatóhoz is.
6. Az admin nyelvváltó elrejtése
Szekció neve “6. Az admin nyelvváltó elrejtése”A WPML alapból nyelvváltót tesz a WordPress admin sávjába, és ez a bejelentkezett felhasználóknak a frontenden és a háttérben is látszik. Érzékeny oldalakon, például a saját beállítóoldaladon érdemes elrejteni. Tedd a functions.php fájlba (a függvény nevét cseréld a sajátodra):
add_filter( 'wpml_show_admin_language_switcher', 'compsupp_disable_wpml_admin_lang_switcher' );
function compsupp_disable_wpml_admin_lang_switcher( $state ) { global $pagenow;
// Add the admin pages that we need to hide the language switcher $admin_pages_to_hide_ls = array( 'admin-page-slug', 'another-admin-page-slug', 'one-more-admin-page-slug' );
// We can also have a filter here in case we need to add/remove pages later $admin_pages_to_hide_ls = apply_filters( 'compsupp_filter_disable_wpml_lang_switcher_in_admin', $admin_pages_to_hide_ls);
if ( $pagenow == 'admin.php' && isset( $_GET['page'] ) && in_array( $_GET['page'], $admin_pages_to_hide_ls) ) { $state = false; } return $state;}Különleges funkciók
Szekció neve “Különleges funkciók”Ha a termékedben különleges funkciók vannak, például egyedi adatbázistáblák, azokat saját kóddal kell a WPML-hez igazítani.
Gyakori problémák és megoldásuk
Szekció neve “Gyakori problémák és megoldásuk”Az űrlapcímkék nem fordíthatók, mert az adatbázisból jönnek. Kérd le a fordítást a wpml_translate_single_string szűrővel:
$label = esc_html( apply_filters('wpml_translate_single_string', $this->checkout_item->name, 'wpsc', '$this->checkout_item->name .'_checkout_form_label'' ) );A wp_query($args) vagy get_posts($args) nem a jelenlegi nyelv bejegyzéseit adja vissza. Add hozzá az argumentumokhoz a suppress_filters=0 értéket.
Egy csúszkában minden dia egy nyelven jelenik meg. Távolítsd el a más nyelvű diákat:
// Unset not translated slidesforeach( $slides as $k => $slide ) { $check = apply_filters( 'wpml_post_language_details', NULL, $slide->ID ) $slide_language_code = substr( $check['locale'], 0, 2 );
if( $check['different_language'] ) { unset( $slides[$k] ); }}A dia azonosítója a második nyelven más. Használd a wpml_object_id szűrőt:
// Loop postswhile (have_posts()): the_post();$post = get_post( apply_filters( 'wpml_object_id', $post->ID, 'slide' ) );A csúszka saját admin oldalt használ, és az egyedi mezők értékeit be kell regisztrálni a fordításhoz. Regisztráld az értéket sztringként:
// Adding a new slide code$slide_id = $this->slide->ID;$url = $fields['url'];
// Register slide URL to translationsdo_action( 'wpml_register_single_string', 'Slider', 'Slide_ID_' . $this->slide->ID, $url);
$this->add_or_update_or_delete_meta($this->slide->ID, 'url', $url);Az egyedi taxonómia azonosítója a második nyelven más.
$taxonomy_id = apply_filters( 'wpml_object_id', $taxonomy_id, 'my_custom_taxonomy' );Az egyedi (nem szabványos WordPress) AJAX-kérések mindig az alapértelmezett nyelv tartalmát adják. Az AJAX-cím összeállításakor add át az aktuális nyelvet paraméterként a wpml_current_language szűrővel:
$ajax_url = 'http://my-site.com/wp-content/plugins/my-plugin/handle-ajax.php';$my_current_lang = apply_filters( 'wpml_current_language', NULL );if ( $my_current_lang ) { $ajax_url = add_query_arg( 'wpml_lang', $my_current_lang, $ajax_url ); // $ajax_url will be something like 'http://my-site.com/wp-content/plugins/my-plugin/handle-ajax.php?wpml_lang=es'}A handle-ajax.php fájlban, a tartalom előállítása előtt válts nyelvet a wpml_switch_language művelettel, és a végén zárd le a nyelvi hatókört. A WPML 5.0 óta a nyelvváltások egymásba ágyazódnak, ezért minden váltáshoz saját visszaállítás kell:
if ( ! empty( $_GET[ 'wpml_lang' ] ) ) { // Opens a language scope. Only a non-empty language code switches the language. do_action( 'wpml_switch_language', sanitize_text_field( $_GET[ 'wpml_lang' ] ) );
try { // Run other content queries. } finally { // Closes the scope that the call above opened. do_action( 'wpml_switch_language', null ); }}Hibás id érték a WP_Query tax_query field paraméterében. Az id érték az alapértelmezett nyelven működik, a másodlagoson nem. Hibás lekérdezés:
$args = array( 'post_type' => 'post', 'tax_query' => array( array( 'taxonomy' => 'people', 'field' => 'id', 'terms' => 'bob', ), ),);$query = new WP_Query( $args );A field értékét javítsd term_id-re. A field paraméternek nincs id értéke, az alapértelmezett a term_id.
Készült: