apply_filters( 'wpml_active_languages', mixed $empty_value, array|string $args )
- タイプ
- filter
- カテゴリー
- サイト全体の言語情報
- WPMLバージョン
- 3.2
説明
サイトで有効(アクティブ)になっている言語のリストをフィルタリングします。このフィルターは通常、カスタム言語スイッチャーを作成するために使用されます。
このフィルターは、グローバルな$wp_query (新しいタブで開く)オブジェクトがインスタンス化されている場合にのみ機能します。つまり、wpアクション (新しいタブで開く)が発生した後に呼び出す必要があります。
WPMLは、サイトの有効(アクティブ)な言語を、各言語に関する情報を含む配列として返します。以下の例はWPML 5.0サイトのものです。デフォルト言語は英語(アメリカ合衆国)で、ドイツ語は/de-de/で、アラビア語は/ar/で提供されています:
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 ) )
urlから読み取ってください。絶対にlanguage_codeから構築しないでください。上記のドイツ語のコードはdeで、アドレスは/de-de/です。同じステップで1つの言語に2つの国を追加するとWPMLはURLコードを修飾します。サイト所有者がこれを編集することも可能で、ドメインモードの場合、アドレスはサイト所有者が入力したドメインになります。WPML 5.0のキー
- language_codeは保存されているコードです。国情報を持つ言語は、コード内に国が含まれます(例:
en-usやde-at)。ドイツ語、スペイン語、フランス語、イタリア語、オランダ語は、本国用のプレーンなコードを保持します(de、es、fr、it、nl)。ポルトガル語と中国語は常に国情報を持ちます。アラビア語やその他の単一国の言語は国情報を持ちません。言語は作成時のコードを保持するため、アップグレードされたサイトでは、新規サイトがen-usを使用する場合でもenを使用することがあります。 - countryは言語の国コードです。国情報を持たない言語の場合は空になります。
- display_codeはWPMLがURLで使用するコードです。WPMLがコードを修飾した場合、またはサイト所有者が編集した場合、
language_codeとは異なります。独自のコードで同じマップを読み取るには、wpml_language_codes_mapフィルターを使用します。 - country_flag_urlは国旗のURLです。サイトが国旗の代わりに言語コードを表示する場合、これは空の文字列になるため、出力する前に値を確認してください。WPML独自の国旗は、国情報を持つ言語の場合は
res/flags/country/<country>.svg、持たない言語の場合はres/flags/language/<code>.svgになります。カスタム国旗はuploadsフォルダーから取得されます。パスを自分で構築することは絶対に避けてください:res/flags/sv.svgはスウェーデンの国旗で、res/flags/country/sv.svgはエルサルバドルの国旗です。
WPMLのアップグレードが完了していないサイトでは、countryがNULLになったり、display_codeが存在しない場合があります。これらを読み取る前にisset()を使用してください。
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を受け入れます。
- skip_missing(bool) 翻訳がない言語の扱い方。言語をスキップするには
使用例
以下の最初の例に示すように、フィルターの引数は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'] ) . '">';
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> ';
}
}
}
以下の次の例では、翻訳されていないコンテンツをサイト管理者に通知するためのコンタクトフォームを表示するカスタムページに、不足している言語をリダイレクトします。
また、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