WPML фрагменты кода

Последнее обновление: 19 мая, 2021

wordpress, wpml

Определение языка страницы WPML

Определение текущего языка страницы:

<?php
global $sitepress;
$current_lang = $sitepress->get_current_language();
?>

Вывод контента в коде на определенном языке

Для вывода переводов контента в коде страницы потребуется установить плагин WPML Shortcodes (автор Mirco Babini):

<?php
wpml_e__if_language( '', 'uk' );
wpml_e__if_language( '', 'ru' );
wpml_e__if_language( '', 'en' );
?>

Вывод переключателя языков

Этот код поможет получить перечень доступных на странице языков и их правильные называния:

<?php
if ( function_exists('icl_get_languages') ) {
  $languages = icl_get_languages('skip_missing=1&orderby=code&order=asc');
  foreach ( $languages as $language ) : 
  echo $language['native_name'].' ';
  endforeach;
}
?>

Пример вывода переключателя языков #1

<div class="">
    <?php
  if ( function_exists('icl_get_languages') ) {
        $languages = icl_get_languages('skip_missing=1&orderby=code&order=asc');
        $lang_active = '';
        $langs_other = '';
    foreach ( $languages as $language ) :
      /* Перебираем все языки, устанавливаем выводимое краткое название и класс. Класс нужен (к примеру) для случаев, когда мы добавляем иконку флага. */    
      switch ($language['native_name']) {
        case 'English':
          $lang_short = 'Eng';
          $lang_class = 'si_wpml_icon_eng';
          break;
        case 'Türkçe':
          $lang_short = 'Tur';
          $lang_class = 'si_wpml_icon_tur';
          break;
        case 'Русский':
          $lang_short = 'Ru';
          $lang_class = 'si_wpml_icon_rus';
          break;
      }
      
      /* Проверяем, активный ли текущий язык (активный язык не должен быть ссылкой) */
                if ( $language['active'] == '1' ) { // активный
                        $lang_active = '<div><i class="'.$lang_class.'">'.$lang_short.'</i></div>';
                    } else { // не активный
                        $langs_other .= '<a href="'.$language['url'].'"><i class="'.$lang_class.'">'.$lang_short.'</i></a>';
                    }
            endforeach;
    }
  
  /* Выводим полученную информацию */
  echo $lang_active;
  echo $langs_other;
    ?>
</div>

Пример вывода переключателя языков #2

<?php
if ( function_exists('icl_get_languages') ) {
    $languages = icl_get_languages('skip_missing=1&orderby=code&order=asc');
    foreach ( $languages as $language ) :
        switch ($language['native_name']) {
        case 'English':
            $lang_short = 'EN';
            break;
        case 'Ukrainian':
            $lang_short = 'UA';
            break;
        case 'Русский':
            $lang_short = 'RU';
            break;
        }
        //echo $language['native_name'];
        if ( $language['active'] == '1' ) { // активный
            echo '<div class="lang"><span>'.$lang_short.'</span></div>';
        } else {
            echo '<div class="lang"><a href="'.$language['url'].'">'.$lang_short.'</a></div>';
        }
    endforeach;
}

Отключаем подключение лишнего в WPML

Как в WPML отключить подключение css в виде генерации строки вида?

<link rel="stylesheet" id="wpml-legacy-horizontal-list-0-css"
href="http://sitename.domein/wp-content/plugins/sitepress-multilingual-cms/templates/language-switchers/legacy-list-horizontal/style.css?ver=1&quot;
type="text/css" media="all">

Открываем консоль WordPress, переходим в настройки плагина WPML. Как правило они находятся по адресу:

https://sitename.domein/wp-admin/admin.php?page=sitepress-multilingual-cms%2Fmenu%2Flanguages.php

После чего меняем окончание Flanguages.php на Ftroubleshooting.php.

Перед нами откроется консоль поиска/решения проблем, в которой мы жмем на кнопку «Очистить кэш WPML». У меня после этого проблема исчезла, никаких побочных эффектов выявлено не было. Но всё же рекомендую сделать перед правками бекап сайта.

 

wpml_e__if_language больше не работает как часть стандартного WPML-плагина. Вам нужно установить дополнительный плагин (название WPML Shortcodes, автор Mirco Babini), и после этого Вы сможете использовать этот запрос как раньше 🙂