WPML
apply_filters( 'wpml_active_languages', mixed $empty_value, array|string $args )
タイプ
filter
WPMLバージョン
3.2

説明

サイトで有効化されている(アクティブな)言語のリストをフィルタリングします。このフィルターは通常、カスタム言語スイッチャーを作成するために使用されます。

このフィルターは、グローバル$wp_queryオブジェクトがインスタンス化されている場合にのみ機能します。つまり、wpアクションが実行された後に呼び出す必要があります。

WPMLは、サイトのアクティブな(有効化されている)言語を、言語ごとの関連情報を含む配列として返します。たとえば、英語、フランス語、イタリア語で稼働しているWordPressサイトの場合、フックは以下を返します。

Array

(

 [en] => Array

  (

   [id] => 1

   [active] => 1

   [default_locale] => en_US

   [native_name] => English

   [missing] => 0

   [translated_name] => English

   [language_code] => en

   [country_flag_url] => http://yourdomain/wpmlpath/res/flags/en.png

   [url] => http://yourdomain/about

  )



 [fr] => Array

  (

   [id] => 4

   [active] => 0

   [default_locale] => fr_FR

   [native_name] => Français

   [missing] => 0

   [translated_name] => French

   [language_code] => fr

   [country_flag_url] => http://yourdomain/wpmlpath/res/flags/fr.png

   [url] => http://yourdomain/fr/a-propos

  )



 [it] => Array

  (

   [id] => 27

   [active] => 0

   [default_locale] => it_IT

   [native_name] => Italiano

   [missing] => 0

   [translated_name] => Italian

   [language_code] => it

   [country_flag_url] => http://yourdomain/wpmlpath/res/flags/it.png

   [url] => http://yourdomain/it/circa

  )

)

wpml_active_languagesフィルターは、言語配列を並べ替えるなどの処理を行う方法を提供します。あるいは、存在しない言語をカスタムURLにリダイレクトするといった、さらに複雑な処理も可能です。

引数

$empty_value
(mixed) (必須) 通常、これはフィルターが変更する値です。ここでは何もフィルタリングしないため、NULLに設定します。これは、フィルター関数が完全な引数リストを実際に受け取るためです。
$args
(array|string) (オプション) 言語の出力をフィルタリングするための引数
  • skip_missing(bool) 翻訳がない言語の扱い方。言語をスキップするには1、翻訳がない場合にその言語のホームページにリンクするには0を指定します。
  • link_empty_to(string) skip_missing = 0と組み合わせて機能し、現在の要素に対する翻訳がない言語にカスタムリンクを使用できるようにします。言語コードのプレースホルダーとして{%lang}を使用できます。デフォルトでは空です。
  • orderby(string) id|code|nameを受け入れます。デフォルトはcustomです。カスタム順序は、WordPress管理画面のWPML » 言語 » 言語スイッチャーのオプションで定義できます。
  • order(string) asc|descを受け入れます。

使用例

出力は必ずエスケープしてください。ベストプラクティスの詳細については、データのサニタイズ/エスケープに関するページを参照してください。

以下の最初の例に示すように、フィルターの引数はstringとして渡すことができます。また、さらに下の2番目の例で確認できるように、arrayとして渡すこともできます。

以下の例では、国旗のみの言語スイッチャーを表示します。ただし、管理画面の「WPML言語設定」から設定できる国旗のみの言語スイッチャーとは少し異なります。

違いは、現在の言語がアンカータグで囲まれないことです。ページの代替言語のみにリンクが設定されます。ご覧ください。

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'] ) . '">';
            echo '<img src="' . esc_url ( $l['country_flag_url'] ) . '" height="12" alt="' . esc_attr( $l['language_code'] ) . '" width="18" />';
            if ( !$l['active'] ) echo '</a> ';
        }
    }
}

以下の次の例では、翻訳されていないコンテンツをサイト管理者に通知するためのコンタクトフォームを表示するカスタムページに、不足している言語をリダイレクトします。
また、PHPのstrtoupper関数を使用して、アクティブな言語(現在表示している言語)の言語名を大文字にします。
2番目の例
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

すべてのサイト全体の言語情報フック(29件) →