WPML

Làm theo hướng dẫn từng bước của chúng tôi để làm cho plugin và giao diện của bạn tương thích với WPML.

Hướng dẫn này dành cho các nhà phát triển giao diện và plugin đã tham gia chương trình tương thích của chúng tôi – Go Global. Nếu bạn chưa tham gia, vui lòng gửi đơn đăng ký của bạn trước khi làm theo hướng dẫn này.

Cách trở nên tương thích với WPML

1. Tạo tệp cấu hình ngôn ngữ

Tệp cấu hình ngôn ngữ cho WPML biết văn bản nào cần dịch (và văn bản nào không) trong plugin hoặc giao diện của bạn. Điều này bao gồm các văn bản trong loại nội dung tùy chỉnh, phân loại, trường, trang quản trị, widget, v.v.

Nếu bạn đã biết cách tạo tệp cấu hình ngôn ngữ, hãy làm theo các hướng dẫn bên dưới để kiểm tra thiết lập của bạn. Nếu không, hãy xem hướng dẫn cấu hình ngôn ngữ của chúng tôi để tìm hiểu cách tạo một tệp.

Kiểm tra thiết lập
1. Tạo một vài bài viết và phân loại
2. Gửi chúng để dịch
3. Xác minh chúng xuất hiện dưới dạng đã dịch trên giao diện người dùng

2. Chuẩn bị chuỗi để dịch

Chuỗi là bất kỳ văn bản nào xuất hiện trên trang web và không thuộc các bài viết, trang hoặc phân loại. Để cho phép WPML dịch các chuỗi trong plugin hoặc giao diện của bạn, hãy làm theo các hướng dẫn bên dưới cho từng trường hợp sử dụng.

Khi bạn cấu hình các chuỗi của mình, hãy sử dụng plugin Multilingual Tools để xác minh chuỗi nào có thể dịch và chuỗi nào cần cấu hình thêm.

Chuỗi được mã hóa cứng

Các chuỗi được mã hóa cứng cần được đăng ký với các hàm gettext. Tìm hiểu thêm về cách sử dụng gettext và chuẩn bị mã của bạn.

Chuỗi trong wp_options

Nếu plugin hoặc giao diện của bạn sử dụng các chuỗi từ bảng wp_options , hãy đăng ký chúng trong tệp wpml-config.xml.

Nếu các khóa tùy chọn của bạn không cố định và giao diện của bạn sử dụng một mảng các mục có thể tăng lên theo dữ liệu nhập của người dùng, hãy đăng ký các mục này một cách linh hoạt. Bạn có thể sử dụng các hàm API của WPML để làm việc này.

Chuỗi động

Nếu không có phương pháp nào trước đây áp dụng cho các chuỗi của bạn, hãy làm theo các hướng dẫn sau để chuẩn bị chuỗi để dịch:

Kiểm tra thiết lập
1. Quét plugin / giao diện của bạn để tìm chuỗi trong WPML Bản địa hóa giao diện và plugin 
2. Tạo một trang có chứa chuỗi
3. Kiểm tra xem các chuỗi có xuất hiện trong Dịch chuỗi hay không
4. Dịch một vài chuỗi và xác minh chúng xuất hiện dưới dạng đã dịch trên giao diện người dùng

3. Đăng ký các widget và khối tùy chỉnh để dịch

Nếu giao diện hoặc plugin của bạn bao gồm các widget tùy chỉnh cho các trình tạo trang, như Elementor, bạn cần đăng ký chúng để dịch.

Xem các hướng dẫn sau để tìm hiểu thêm về cách đăng ký nội dung của trình tạo trang:

Kiểm tra thiết lập
1. Tạo một trang với tất cả các widget tùy chỉnh của bạn
2. Gửi trang để dịch và xác minh các văn bản của widget xuất hiện trong Trình biên tập dịch thuật nâng cao
3. Kiểm tra xem các bản dịch có hiển thị trên giao diện người dùng không
4. Lặp lại các bước để kiểm tra các cài đặt widget khác nhau

4. Tự động lấy ID từ các ngôn ngữ khác nhau

Nếu giao diện hoặc plugin của bạn có các tính năng hoặc tùy chọn tải các ID bài viết khác nhau trong mỗi ngôn ngữ, hãy sử dụng bộ lọc wpml_object_id để tự động lấy ID bài viết đã dịch.

Ví dụ: hãy xem xét một thanh trượt với các slide ở các ngôn ngữ khác nhau, mỗi slide có một ID duy nhất. Để tự động tải đúng ID slide trong mỗi ngôn ngữ, chúng ta có thể sử dụng bộ lọc wpml_object_id :

// Loop posts
while (have_posts()): the_post();
$post = get_post( apply_filters( 'wpml_object_id', $post->ID, 'slide' ) );

Kiểm tra thiết lập
1. Tạo bài viết / template liên quan, v.v. và thêm một chuỗi văn bản
2. Cài đặt tính năng của bạn để sử dụng bài viết đó
3. Dịch bài viết và đặt một giá trị khác trong chuỗi văn bản
4. Kiểm tra xem tính năng có đang tải ID đã dịch trên giao diện người dùng không

5. Trở nên tương thích với WooCommerce

WPML có thể dịch nội dung WooCommerce bằng tiện ích bổ sung WPML Multilingual & Multicurrency for WooCommerce của nó. Nếu giao diện hoặc plugin của bạn chứa các phần tử WooCommerce, hãy làm theo hướng dẫn tương thích WPML Multilingual & Multicurrency for WooCommerce của chúng tôi để làm cho nó tương thích với WPML.

6. Hiển thị hoặc ẩn bộ chuyển đổi ngôn ngữ của trang quản trị

Theo mặc định, WPML thêm một bộ chuyển đổi ngôn ngữ vào thanh quản trị WordPress. Bộ chuyển đổi này hiển thị cho người dùng đã đăng nhập, trên cả giao diện người dùng và trang quản trị.

Bộ chuyển đổi ngôn ngữ ở thanh quản trị trên cùng
Bộ chuyển đổi ngôn ngữ ở thanh quản trị trên cùng

Trong một số trường hợp, bạn có thể muốn ẩn bộ chuyển đổi ngôn ngữ trên các trang nhạy cảm, như khu vực cài đặt của bạn. Để thực hiện việc này, hãy thêm mã sau vào tệp functions.php của bạn:

//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;
}

Làm cho các tính năng đặc biệt tương thích

Nếu giao diện hoặc plugin của bạn bao gồm các tính năng đặc biệt (như sử dụng các bảng tùy chỉnh), bạn sẽ cần sử dụng mã tùy chỉnh để làm cho chúng tương thích với WPML.

Xem tài nguyên dành cho nhà phát triển của chúng tôi để biết thông tin về phát triển tùy chỉnh.

Các vấn đề thường gặp & giải pháp

Giải pháp:

$label = esc_html( apply_filters('wpml_translate_single_string', $this->checkout_item->name, 'wpsc', '$this->checkout_item->name .'_checkout_form_label'' ) );

Giải pháp:

Nếu bạn sử dụng wp_query($args) hoặc get_posts($args), bạn cần thêm “suppress_filters=0” vào các đối số.

Giải pháp:

// 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] );
	}
}

Giải pháp:

// Loop posts
while (have_posts()): the_post();
$post = get_post( apply_filters( 'wpml_object_id', $post->ID, 'slide' ) );

Giải pháp:

// 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);

Giải pháp:

$taxonomy_id = apply_filters( 'wpml_object_id', $taxonomy_id, 'my_custom_taxonomy' );

Giải pháp:

Khi xây dựng các URL AJAX tùy chỉnh, hãy sử dụng hook wpml_current_language và thêm ngôn ngữ hiện tại làm tham số cho các URL AJAX.

$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'
}

Khi xử lý các yêu cầu AJAX tại tệp handle-ajax.php, trước khi tạo đầu ra nội dung, hãy sử dụng hook wpml_switch_language để chuyển đổi ngôn ngữ nội dung.

if ( isset( $_GET[ 'wpml_lang' ] ) ) {
    do_action( 'wpml_switch_language',  $_GET[ 'wpml_lang' ] ); // switch the content language
}

// Run other content queries. 

Giải pháp:

Việc sử dụng đối số “id” cho tham số “field” hoạt động đối với ngôn ngữ mặc định nhưng nó không hoạt động đối với ngôn ngữ thứ hai. Sau đây là một ví dụ về truy vấn không chính xác:

$args = array(
    'post_type' => 'post',
    'tax_query' => array(
        array(
            'taxonomy' => 'people',
            'field'    => 'id',
            'terms'    => 'bob',
        ),
    ),
);
$query = new WP_Query( $args );

Các nhà phát triển nên sửa tham số “field”.

'field'    => 'id',

thành:

'field'    => 'term_id',

Tham khảo: https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters. Không có giá trị “id” cho tham số “field”. Giá trị mặc định của nó là “term_id”.

Được viết bởi Amir · Cập nhật lần cuối vào 6 tháng 5 năm 2026