WPML
Trạng thái
Đã giải quyết
Được báo cáo cho
WPML Multilingual CMS 3.8.3
Đã giải quyết trong
3.9.0

Tổng quan về lỗi

Khi một ngôn ngữ có mã gồm hai chữ cái ở thẻ và một mã dài hơn ở ngôn ngữ địa phương mặc định, mã sau sẽ được sử dụng để tạo các thẻ hreflang.

Giải pháp tạm thời

Bản sửa lỗi sẽ được cung cấp trong phiên bản chính tiếp theo của WPML, trong đó từ “tag” sẽ được thay thế bằng “hreflang” để tránh nhầm lẫn và logic chính xác sẽ được áp dụng.

Trong lúc chờ đợi, bạn có thể thực hiện các bước sau để giải quyết vấn đề này:


  1. Tạo bản sao lưu cho trang web của bạn.

  2. Tìm và chỉnh sửa tệp class-wpml-seo-headlangs.php trong thư mục ../sitepress-multilingual-cms/classes/seo/, trong đó sitepress-multilingual-cms là thư mục cài đặt WPML.

  3. Tại khoảng dòng 139, bạn sẽ tìm thấy đoạn mã sau:
    private function get_hreflang_code( $lang ) {
    	$tag           = $lang['tag'];
    	$locale        = $lang['default_locale'];
    	$hreflang_code = $this->get_best_code( array( $tag, $locale ) );
    	$hreflang_code = str_replace( '_', '-', $hreflang_code );
    	$hreflang_code = strtolower( $hreflang_code );
    
    	if ( $this->is_valid_hreflang_code( $hreflang_code ) ) {
    		return trim( $hreflang_code );
    	}
    
    	return '';
    }


  4. Thay thế bằng đoạn mã này:
    private function get_hreflang_code( $lang ) {
    	$ordered_keys = array( 'tag', 'default_locale' );
    
    	$hreflang_code = '';
    	foreach ( $ordered_keys as $key ) {
    		if ( array_key_exists( $key, $lang ) && trim( $lang[ $key ] ) ) {
    			$hreflang_code = $lang[ $key ];
    			break;
    		}
    	}
    
    	$hreflang_code = strtolower( str_replace( '_', '-', $hreflang_code ) );
    
    	if ( $this->is_valid_hreflang_code( $hreflang_code ) ) {
    		return trim( $hreflang_code );
    	}
    
    	return '';
    }

Tất cả các lỗi đã ghi nhận →