apply_filters( 'wpml_active_languages', mixed $empty_value, array|string $args )
- 유형
- filter
- 카테고리
- 사이트 전체 언어 정보
- WPML 버전
- 3.2
설명
사이트에 활성화된(사용 중인) 언어 목록을 필터링합니다. 이 필터는 주로 사용자 정의 언어 전환기를 만드는 데 사용됩니다.
이 필터는 전역 $wp_query 객체가 인스턴스화된 경우에만 작동할 수 있습니다. 즉, wp action이 발생한 후에 호출되어야 합니다.
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/입니다. 한 단계에서 한 언어의 두 국가를 추가할 때 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으로 전달할 수 있습니다. 또한 아래의 두 번째 예에서 볼 수 있듯이 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 함수를 사용하여 활성 언어, 즉 현재 보고 있는 언어 이름의 첫 글자를 대문자로 표시합니다.
두 번째 예
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