WPML
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
  )
)

المفاتيح في WPML 5.0

  • language_code هو الرمز المُخزّن. اللغة التي تحمل بلداً تحتوي على البلد في الرمز، على سبيل المثال en-us أو de-at. تحتفظ الألمانية، والإسبانية، والفرنسية، والإيطالية، والهولندية بالرمز المُجرد لبلدها الأصلي (de، es، fr، it، nl). تحمل البرتغالية والصينية بلداً دائماً. ولا تحمل العربية واللغات الأخرى ذات البلد الواحد أي بلد. تحتفظ اللغة بالرمز الذي أُنشئت به، لذلك يمكن لموقع تمت ترقيته استخدام en حيث يستخدم موقع جديد en-us.
  • country هو رمز البلد للغة. ويكون فارغاً للغة ليس لها بلد.
  • display_code هو الرمز الذي يستخدمه WPML في عناوين URL. ويختلف عن language_code عندما يُؤهل WPML الرمز، أو عندما يُعدّله مالك الموقع. لقراءة الخريطة نفسها في الكود الخاص بك، استخدم المرشِّح wpml_language_codes_map.
  • country_flag_url هو عنوان URL للعلم. ويكون سلسلة نصية فارغة عندما يعرض الموقع رمز اللغة بدلاً من العلم، لذا اختبر القيمة قبل طباعتها. أعلام WPML الخاصة هي res/flags/country/<country>.svg للغة مع بلد، و res/flags/language/<code>.svg للغة بدون بلد. يأتي العلم المخصص من مجلد المرفقات. لا تبنِ المسار بنفسك أبداً: res/flags/sv.svg هو علم السويد، و res/flags/country/sv.svg هو علم السلفادور.

في الموقع الذي لم ينتهِ من ترقية WPML، يمكن أن يكون country هو NULL ويمكن أن يكون display_code غائباً. استخدم isset() قبل قراءتها.

يوفر المرشِّح wpml_active_languages طريقة للقيام بأشياء مثل إعادة ترتيب مصفوفة اللغات. أو شيء أكثر تعقيداً، مثل إعادة توجيه اللغات المفقودة إلى عنوان url مخصص.

الوسائط

$empty_value
(مختلط) (مطلوب) هذه عادةً هي القيمة التي سيعدّلها المرشِّح. نحن لا نرشّح أي شيء هنا، لذا اضبط هذه القيمة على NULL. هذا لكي تتلقى دالة المرشِّح قائمة الوسائط الكاملة فعلياً
$args
(مصفوفة|سلسلة نصية) (اختياري) وسائط لترشيح مخرجات اللغة
  • skip_missing(منطقي) كيفية التعامل مع اللغات التي لا تحتوي على ترجمات. 1 لتخطي اللغة أو 0 للربط بالصفحة الرئيسية للغة للترجمات المفقودة.
  • link_empty_to(سلسلة نصية) يعمل بالاقتران مع skip_missing = 0 ويتيح استخدام روابط مخصصة للغات التي لا تحتوي على ترجمات للعنصر الحالي. يمكن استخدام {%lang} كعنصر نائب لرمز اللغة. فارغ افتراضياً.
  • orderby(سلسلة نصية) يقبل id|code|name. القيمة الافتراضية هي custom. يمكن تعريف الترتيب المخصص في لوحة تحكم WordPress ضمن WPML » إعدادات » مبدلات اللغة » خيارات مبدل اللغة
  • order(سلسلة نصية) يقبل asc|desc

مثال على الاستخدام

تذكّر تجاوز أي مخرجات. راجع الصفحة حول تعقيم/تجاوز البيانات (يفتح في علامة تبويب جديدة) لمعرفة المزيد عن أفضل الممارسات.

يمكن تمرير وسائط المرشِّح إليه على شكل سلسلة نصية كما هو موضح في المثال الأول أدناه. ويمكن أيضاً تمريرها على شكل مصفوفة كما ترى في المثال الثاني لاحقاً.

في المثال أدناه، نعرض مبدل لغة يحتوي على أعلام فقط. ومع ذلك، هناك اختلاف بسيط عن مبدل اللغة الذي يحتوي على أعلام فقط والذي يمكنك تكوينه من «إعدادات لغة 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> ';
        }
    }
}

في المثال التالي الذي تراه أدناه، نعيد توجيه اللغات المفقودة إلى صفحة مخصصة حيث نعرض نموذج اتصال للأشخاص لإبلاغ مسؤول الموقع عن المحتوى غير المترجم.
نقوم أيضاً بتكبير الحرف الأول من اسم اللغة للغة النشطة، أي اللغة التي نعرضها حالياً، باستخدام دالة strtoupper في PHP.
مثال ثانٍ
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

جميع خطاطيف معلومات اللغة على مستوى الموقع البالغ عددها 30