Tovább a tartalomhoz

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.

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:

  1. Hozz létre néhány bejegyzést és taxonómiát.
  2. Küldd el őket fordításra.
  3. Ellenőrizd, hogy a frontenden lefordítva jelennek meg.

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_options táblában tárolt szövegek: regisztráld őket a wpml-config.xml fá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:

  1. A WPML → Theme and plugins localization oldalon olvasd be a témádat vagy bővítményedet.
  2. Hozz létre egy oldalt a szövegekkel.
  3. Nézd meg, megjelennek-e a sztringek a WPML → String Translation oldalon.
  4. 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:

  1. Hozz létre egy oldalt az összes egyedi widgettel.
  2. Küldd fordításra, és nézd meg, megjelennek-e a widgetek szövegei az Advanced Translation Editorban.
  3. Ellenőrizd a fordításokat a frontenden.
  4. 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 posts
while (have_posts()): the_post();
$post = get_post( apply_filters( 'wpml_object_id', $post->ID, 'slide' ) );

Próba:

  1. Hozd létre a bejegyzést vagy sablont egy szöveges sztringgel.
  2. Állítsd be a funkciót úgy, hogy ezt használja.
  3. Fordítsd le a bejegyzést, és adj a sztringnek más értéket.
  4. Ellenőrizd, hogy a funkció a frontenden a lefordított azonosítót tölti be.

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.

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;
}

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.

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 slides
foreach( $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 posts
while (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 translations
do_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:

Tiszteletben tartjuk a magánszférádat

Sütiket használunk a böngészési élmény javítására és a forgalom elemzésére. Az analitika csak akkor indul, ha engeded. Adatvédelmi irányelvek, Sütitájékoztató.

Sütibeállítások