WPML
الحالة
محلولة
أُبلغ عنها لـ
WPML Multilingual CMS 3.8.3
تم حلها في
3.9.0

نظرة عامة على المشكلة

عندما يكون للغة رمز مكوّن من حرفين في الوسم ورمز أطول في اللغة المحلية الافتراضية، يُستخدم الأخير لعرض وسوم hreflang.

حل بديل مؤقت

سيتم توفير إصلاح في الإصدار الرئيسي التالي من WPML، حيث ستُستبدل كلمة «tag» بـ «hreflang» لتجنب الالتباس وسيُستخدم المنطق الصحيح.

وفي غضون ذلك، يمكنك اتباع الخطوات التالية لحل هذه المشكلة:


  1. أنشئ نسخة احتياطية لموقعك.

  2. ابحث عن الملف class-wpml-seo-headlangs.php وعدّله في المجلد ../sitepress-multilingual-cms/classes/seo/، حيث sitepress-multilingual-cms هو الدليل الذي ثُبّتت فيه WPML.

  3. في السطر 139 تقريباً، يجب أن تجد الكود التالي:
    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. استبدله بهذا الكود:
    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 '';
    }

جميع المشاكل المعروفة →