WPML
apply_filters( 'wpml_active_languages', mixed $empty_value, array|string $args )
Typ
filter
WPML-Version
3.2

Beschreibung

Filtert die Liste der für eine Website aktivierten (aktiven) Sprachen. Dieser Filter wird normalerweise verwendet, um benutzerdefinierte Sprachumschalter zu erstellen.

Dieser Filter kann nur funktionieren, wenn das globale $wp_query (wird in einem neuen Tab geöffnet)-Objekt instanziiert wurde. Das bedeutet, dass er aufgerufen werden sollte, nachdem die wp-Aktion (wird in einem neuen Tab geöffnet) ausgeführt wurde.

WPML gibt die aktiven (aktivierten) Sprachen einer Website als Array zurück, mit Informationen zu jeder Sprache. Das folgende Beispiel stammt von einer WPML 5.0-Website. Ihre Standardsprache ist Englisch (Vereinigte Staaten), Deutsch wird unter /de-de/ bereitgestellt und Arabisch wird unter /ar/ bereitgestellt:

Array
(
 [en-us] => Array
  (
   [id] => 1
   [active] => 1
   [default_locale] => en_US
   [native_name] => English (United States)
   [missing] => 0
   [translated_name] => English (United States)
   [language_code] => en-us
   [country] => US
   [display_code] => en-us
   [country_flag_url] => https://example.com/wp-content/plugins/sitepress-multilingual-cms/res/flags/country/us.svg
   [url] => https://example.com/about
  )

 [de] => Array
  (
   [id] => 3
   [active] => 0
   [default_locale] => de_DE
   [native_name] => Deutsch
   [missing] => 0
   [translated_name] => German
   [language_code] => de
   [country] => DE
   [display_code] => de-de
   [country_flag_url] => https://example.com/wp-content/plugins/sitepress-multilingual-cms/res/flags/country/de.svg
   [url] => https://example.com/de-de/ueber-uns
  )

 [ar] => Array
  (
   [id] => 30
   [active] => 0
   [default_locale] => ar
   [native_name] => العربية
   [missing] => 0
   [translated_name] => Arabic
   [language_code] => ar
   [country] => 
   [display_code] => ar
   [country_flag_url] => https://example.com/wp-content/plugins/sitepress-multilingual-cms/res/flags/language/ar.svg
   [url] => https://example.com/ar/about
  )
)

Die Keys in WPML 5.0

  • language_code ist der gespeicherte Code. Eine Sprache, die ein Land beinhaltet, hat das Land im Code, zum Beispiel en-us oder de-at. Deutsch, Spanisch, Französisch, Italienisch und Niederländisch behalten den einfachen Code für ihr Heimatland (de, es, fr, it, nl). Portugiesisch und Chinesisch beinhalten immer ein Land. Arabisch und andere Sprachen mit nur einem Land enthalten keines. Eine Sprache behält den Code, mit dem sie erstellt wurde, sodass eine aktualisierte Website en verwenden kann, wo eine neue Website en-us verwendet.
  • country ist der Ländercode der Sprache. Er ist leer bei einer Sprache ohne Land.
  • display_code ist der Code, den WPML in URLs verwendet. Er unterscheidet sich von language_code, wenn WPML den Code qualifiziert oder wenn der Website-Betreiber ihn bearbeitet. Um dieselbe Zuordnung in Ihrem eigenen Code auszulesen, verwenden Sie den Filter wpml_language_codes_map.
  • country_flag_url ist die URL der Flagge. Sie ist ein leerer String, wenn die Website den Sprachcode anstelle einer Flagge anzeigt. Testen Sie den Wert also, bevor Sie ihn ausgeben. Die eigenen Flaggen von WPML sind res/flags/country/<country>.svg für eine Sprache mit einem Land und res/flags/language/<code>.svg für eine Sprache ohne Land. Eine benutzerdefinierte Flagge stammt aus dem Uploads-Ordner. Erstellen Sie den Pfad niemals selbst: res/flags/sv.svg ist die Flagge von Schweden und res/flags/country/sv.svg ist die Flagge von El Salvador.

Auf einer Website, die das Upgrade von WPML nicht abgeschlossen hat, kann country NULL sein und display_code kann fehlen. Verwenden Sie isset(), bevor Sie sie auslesen.

Der Filter wpml_active_languages bietet eine Möglichkeit, Dinge wie das Neuordnen des Sprach-Arrays zu tun. Oder etwas Komplexeres, wie das Umleiten fehlender Sprachen auf eine benutzerdefinierte URL.

Argumente

$empty_value
(mixed) (Erforderlich) Dies ist normalerweise der Wert, den der Filter modifiziert. Wir filtern hier nichts, setzen Sie dies also auf NULL. Dies ist erforderlich, damit die Filterfunktion tatsächlich die vollständige Argumentenliste empfängt.
$args
(array|string) (Optional) Argumente zum Filtern der Sprachausgabe
  • skip_missing(bool) Wie Sprachen ohne Übersetzungen behandelt werden sollen. 1, um die Sprache zu überspringen, oder 0, um bei fehlenden Übersetzungen zur Startseite der Sprache zu verlinken.
  • link_empty_to(string) Funktioniert in Verbindung mit skip_missing = 0 und ermöglicht die Verwendung benutzerdefinierter Links für die Sprachen, die keine Übersetzungen für das aktuelle Element haben. {%lang} kann als Platzhalter für den Sprachcode verwendet werden. Standardmäßig leer.
  • orderby(string) Akzeptiert id|code|name. Standardmäßig auf custom gesetzt. Die benutzerdefinierte Reihenfolge kann im WordPress-Admin-Bereich unter WPML » Einstellungen » Sprachumschalter » Sprachumschalter-Optionen definiert werden.
  • order(string) Akzeptiert asc|desc.

Beispielhafte Verwendung

Denken Sie daran, jegliche Ausgabe zu escapen. Weitere Informationen zu Best Practices finden Sie auf der Seite über Datenbereinigung/Escaping (wird in einem neuen Tab geöffnet).

Die Argumente des Filters können ihm als String übergeben werden, wie im ersten Beispiel unten gezeigt. Sie können auch als Array übergeben werden, wie Sie im zweiten Beispiel weiter unten sehen können.

Im folgenden Beispiel zeigen wir einen Sprachumschalter an, der nur aus Flaggen besteht. Es gibt jedoch einen kleinen Unterschied zu dem reinen Flaggen-Sprachumschalter, den Sie in Ihren „WPML-Spracheinstellungen“ im Admin-Backend konfigurieren können.

Der Unterschied besteht hier darin, dass die aktuelle Sprache nicht in ein Anchor-Tag eingeschlossen wird. Nur die alternativen Sprachen der Seite erhalten einen Link. Sehen Sie selbst.

Beispiel
function my_flag_only_language_switcher() {
    $languages = apply_filters( 'wpml_active_languages', NULL, 'orderby=id&order=desc' );

    if ( !empty( $languages ) ) {
        foreach( $languages as $l ) {
            if ( !$l['active'] ) echo ' <a href="' . esc_url( $l['url'] ) . '">';
            if ( '' !== $l['country_flag_url'] ) {
                echo '<img src="' . esc_url( $l['country_flag_url'] ) . '" height="12" alt="' . esc_attr( $l['language_code'] ) . '" width="18" />';
            } else {
                echo esc_html( $l['language_code'] );
            }
            if ( !$l['active'] ) echo '</a> ';
        }
    }
}

Im nächsten Beispiel, das Sie unten sehen, leiten wir fehlende Sprachen auf eine benutzerdefinierte Seite um, auf der wir ein Kontaktformular anzeigen, damit Besucher den Website-Administrator über unübersetzte Inhalte informieren können.
Außerdem schreiben wir den Sprachnamen der aktiven Sprache, d. h. der Sprache, die wir gerade betrachten, mithilfe der PHP-Funktion strtoupper groß.
Ein zweites Beispiel
function my_custom_language_switcher() {
    $languages = apply_filters( 'wpml_active_languages', NULL, array( 'skip_missing' => 0, 'link_empty_to' => 'http://domain.com/missing-translation-contact-form' ) );

    if( !empty( $languages ) ) {
        foreach( $languages as $language ){
			$native_name = $language['active'] ? strtoupper( $language['native_name'] ) : $language['native_name'];

            if( !$language['active'] ) echo '<a href="' . esc_url( $language['url'] ) . '">';
            echo esc_html( $native_name ) . ' ';
            if( !$language['active'] ) echo '</a>';
        }
    }
}

wpml_decode_custom_field, wpml_footer_language_selector, wpml_add_language_form_field, wpml_ls_exclude_in_menu, wpml_is_rtl, wpml_alternate_hreflang, wpml_head_langs, wpml_must_translate_canonical_url, wpml_browser_redirect_language_params, wpml_encode_custom_field

Alle 30 Websiteübergreifende Sprachinformationen-Hooks