Пользовательский переключатель языков в MultilingualPress

Я сейчас работаю с плагином MultilingualPress и хочу поделиться сниппетом, который поможет вывести свой переключатель языков на сайте.

Для начала получим все переводы

<?php
function multilingualpress_get_translations()
{
  if (!is_plugin_active('multilingualpress/multilingualpress.php')) {
    return [];
  }

  $args = \Inpsyde\MultilingualPress\Framework\Api\TranslationSearchArgs::forContext(new \Inpsyde\MultilingualPress\Framework\WordPressContext())
    ->forSiteId(get_current_blog_id())
    ->includeBase();

  $translations = \Inpsyde\MultilingualPress\resolve(
    \Inpsyde\MultilingualPress\Framework\Api\Translations::class
  )->searchTranslations($args);

  return $translations;
}

Функция возвращает массив, с которым мы будем работать в цикле.

Теперь можем выводить

<?php
$translations = multilingualpress_get_translations();

foreach ($translations as $translation) {
    $language = $translation->language();
    $language_iso_name = esc_html($language->isoName());
    $language_locale = esc_attr($language->locale());
    $url = esc_url($translation->remoteUrl());
    $current_site_class = '';

    $source_site_id = (int)$translation->sourceSiteId();
    $target_site_id = (int)$translation->remoteSiteId();

    if ($source_site_id === $target_site_id) {
      $current_site_class = 'active';
    }

    echo "<a href=\"$url\" class=\"b-header__currency-type $current_site_class\" data-locale=\"$language_locale\">$language_iso_name</a>";
}

Стоит обратить внимание на то, как проверяется то, что выводимая ссылка на сайт является ссылкой текущего. Тут просто сравниваются идентификаторы сайтов.