플러그인 및 테마를 WPML과 호환되도록 만드는 단계별 가이드를 따르세요.
이 가이드는 호환성 프로그램인 Go Global에 이미 가입한 테마 및 플러그인 개발자를 대상으로 합니다. 아직 가입하지 않았다면 이 가이드를 따르기 전에 신청서를 제출하세요.
WPML과 호환하는 방법
1. 언어 구성 파일 생성
언어 구성 파일은 플러그인이나 테마에서 번역할 텍스트(및 번역하지 않을 텍스트)를 WPML에 알려줍니다. 여기에는 사용자 정의 글 유형, 택소노미, 필드, 관리 화면, 위젯 등의 텍스트가 포함됩니다.
언어 구성 파일을 생성하는 방법을 이미 알고 있다면 아래 지침에 따라 설정을 테스트하세요. 그렇지 않은 경우 언어 구성 가이드를 참조하여 생성 방법을 알아보세요.
테스트 설정
1. 몇 개의 글 및 택소노미 생성
2. 번역을 위해 전송
3. 프런트엔드에 번역되어 나타나는지 확인
2. 번역할 문자열 준비
문자열은 사이트에 표시되지만 글, 페이지 또는 택소노미의 일부가 아닌 모든 텍스트입니다. WPML이 플러그인이나 테마의 문자열을 번역할 수 있도록 하려면 각 사용 사례에 대해 아래 지침을 따르세요.
문자열을 구성할 때 다국어 도구 플러그인을 사용하여 번역 가능한 문자열과 추가 구성이 필요한 문자열을 확인하세요.
하드코딩된 문자열
하드코딩된 문자열은 gettext 함수를 사용하여 등록해야 합니다. gettext 사용 및 코드 준비에 대해 자세히 알아보세요.
wp_options의 문자열
플러그인이나 테마가 wp_options 테이블의 문자열을 사용하는 경우 wpml-config.xml 파일에 등록하세요.
옵션 키가 고정되어 있지 않고 테마가 사용자 입력에 따라 증가할 수 있는 항목 배열을 사용하는 경우 이러한 항목을 동적으로 등록하세요. WPML의 API 함수를 사용하여 이 작업을 수행할 수 있습니다.
동적 문자열
이전 방법 중 어느 것도 문자열에 적용되지 않는 경우 다음 가이드에 따라 번역할 문자열을 준비하세요.
테스트 설정
1. WPML → 테마 및 플러그인 현지화에서 플러그인/테마의 문자열 스캔
2. 문자열이 있는 페이지 생성
3. 문자열 번역에 문자열이 나타나는지 확인
4. 몇 개의 문자열을 번역하고 프런트엔드에 번역되어 나타나는지 확인
3. 번역할 사용자 정의 위젯 및 블록 등록
테마나 플러그인에 Elementor와 같은 페이지 빌더용 사용자 정의 위젯이 포함되어 있는 경우 번역을 위해 등록해야 합니다.
페이지 빌더 콘텐츠 등록에 대한 자세한 내용은 다음 가이드를 참조하세요.
테스트 설정
1. 모든 사용자 정의 위젯이 있는 페이지 생성
2. 페이지를 번역으로 전송하고 위젯 텍스트가 고급 번역 에디터에 나타나는지 확인
3. 프런트엔드에 번역이 표시되는지 확인
4. 단계를 반복하여 다른 위젯 설정 테스트
4. 다른 언어에서 자동으로 ID 가져오기
테마나 플러그인에 각 언어에서 다른 글 ID를 로드하는 기능이나 옵션이 있는 경우 wpml_object_id 필터를 사용하여 번역된 글 ID를 자동으로 가져오세요.
예를 들어, 각기 고유한 ID를 가진 다른 언어의 슬라이드가 있는 슬라이더를 생각해 보세요. 각 언어에서 올바른 슬라이드 ID를 자동으로 로드하려면 wpml_object_id 필터를 사용할 수 있습니다.
// Loop posts while (have_posts()): the_post(); $post = get_post( apply_filters( 'wpml_object_id', $post->ID, 'slide' ) );
테스트 설정
1. 관련 글/템플릿 등을 생성하고 텍스트 문자열 추가
2. 해당 글을 사용하도록 기능 설정
3. 글을 번역하고 텍스트 문자열에 다른 값 설정
4. 기능이 프런트엔드에서 번역된 ID를 로드하는지 확인
5. WooCommerce와 호환하기
WPML은 WPML Multilingual & Multicurrency for WooCommerce 애드온을 사용하여 WooCommerce 콘텐츠를 번역할 수 있습니다. 테마나 플러그인에 WooCommerce 요소가 포함되어 있는 경우 WPML Multilingual & Multicurrency for WooCommerce 호환성 가이드를 따라 WPML과 호환되도록 만드세요.
6. 관리 화면 언어 전환기 표시 또는 숨기기
기본적으로 WPML은 WordPress 관리 화면 표시줄에 언어 전환기를 추가합니다. 이 전환기는 프런트엔드와 백엔드 모두에서 로그인한 사용자에게 표시됩니다.

경우에 따라 설정 영역과 같은 민감한 페이지에서 언어 전환기를 숨기고 싶을 수 있습니다. 이렇게 하려면 functions.php 파일에 다음 코드를 추가하세요.
//Make sure to rename the function before adding to your plugin
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;
}
특수 기능 호환하기
테마나 플러그인에 특수 기능(예: 사용자 정의 테이블 사용)이 포함된 경우 사용자 정의 코드를 사용하여 WPML과 호환되도록 해야 합니다.
사용자 정의 개발에 대한 정보는 개발자 리소스를 참조하세요.
일반적인 문제 및 해결 방법
해결 방법:
$label = esc_html( apply_filters('wpml_translate_single_string', $this->checkout_item->name, 'wpsc', '$this->checkout_item->name .'_checkout_form_label'' ) );
wp_query($args) 또는 get_posts($args)가 현재 언어에 대한 올바른 글 ID를 필터링하지 않음 +
해결 방법:
wp_query($args) 또는 get_posts($args)를 사용하는 경우 인수에 “suppress_filters=0”을 추가해야 합니다.
모든 슬라이드가 하나의 언어로 표시됨 +
해결 방법:
// 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] );
}
}
보조 언어에서 슬라이드 ID가 다름 +
해결 방법:
// Loop posts while (have_posts()): the_post(); $post = get_post( apply_filters( 'wpml_object_id', $post->ID, 'slide' ) );
슬라이더가 사용자 정의 관리 화면 페이지를 사용하며 사용자 정의 필드 값을 번역에 등록해야 함 +
해결 방법:
// 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);
보조 언어에서 사용자 정의 택소노미 ID가 다름 +
해결 방법:
$taxonomy_id = apply_filters( 'wpml_object_id', $taxonomy_id, 'my_custom_taxonomy' );
사용자 정의(비표준 WordPress) AJAX 요청이 항상 기본 언어 콘텐츠를 반환함 +
해결 방법:
사용자 정의 AJAX URL을 빌드할 때 wpml_current_language 훅을 사용하고 현재 언어를 AJAX URL의 매개변수로 추가하세요.
$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'
}
handle-ajax.php 파일에서 AJAX 요청을 처리할 때 콘텐츠 출력을 생성하기 전에 wpml_switch_language 훅을 사용하여 콘텐츠 언어를 전환하세요. 완료되면 언어 범위를 닫습니다. WPML 5.0부터 언어 전환이 중첩되므로 모든 전환에는 자체 복원이 필요합니다.
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 );
}
}
WP_Query $args[ ‘tax_query’ ][ ‘field’ ] 인수에서 “id” 값의 잘못된 사용 +
해결 방법:
“field” 매개변수에 “id” 인수를 사용하면 기본 언어에서는 작동하지만 보조 언어에서는 작동하지 않습니다. 다음은 잘못된 쿼리의 예입니다.
$args = array(
'post_type' => 'post',
'tax_query' => array(
array(
'taxonomy' => 'people',
'field' => 'id',
'terms' => 'bob',
),
),
);
$query = new WP_Query( $args );
개발자는 “field” 매개변수를 수정해야 합니다.
'field' => 'id',
다음으로 수정:
'field' => 'term_id',
참조: https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters. “field” 매개변수에는 “id” 값이 없습니다. 기본값은 “term_id”입니다.