Как создать мультиязычный сайт через мультисайт на wordpress
Если у вас есть задача создать мультиязычный сайт на wordpress, но плагины не хотят работать с некоторыми функциями вашей темы (например меню или общие опции сайта через поля ACF) или вы не хотите использовать платный плагин, то вам может помочь мультисайт. Это встроенная функция самого wordpress. Но при этом все же придется поставить пару плагинов. Если вы используете мультисайт для разделения сайта по регионам (одной страны) то эти плагины могут не понадобиться. Плюсы и минусы мультисайта:
Минусы:
- Может работать не со всеми темами
- Может работать не со всеми плагинами
- Довольно много гибких настроек описанных ниже, которые надо делать в каждой админке подсайта (оно же и плюс, но если языков больше трех-четырех, то следует задуматься о платном плагине WPML, т к редактировать все довольно обьемно)
- Для мультиязычности нужно как минимум 3 плагина дополнительно (и возможно 4й для объединения файлов)
Плюсы:
- Работает для регионального разделения или разделения блога внутри сайта
- Бесплатно, как альтернатива плагину WPML
- Если не работают иные плагины мультиязычности с вашей темой, то мультисайт скорее всего сработает
- Очень гибкие настройки плагинов и тем в каждой админке подсайта
- Полная кастомизация контента на разных версиях сайта.
- Можно разделять как на поддомены так и на подкаталоги (рекомендую все же на подкаталоги, проще и удобнее, но не для всех)
- Можно делать разные доступы и пользователей для каждого сайта
Если вы не хотите приобретать платные плагин WPML, который работает наверное всегда, то можно попробовать использовать мультисайт для мультиязычности. Будет немного громоздко но зато будет работать. Также можно применять его для разделения сайта по региональности на поддомены или подкаталоги.
Установка мультисайта
Перед началом установки сделайте бэкап всего сайта и отдельно файлы wp-config.php и .htaccess
Чтобы установить мультисайт нужно добавить в файл wp-config.php в самом низу файла строку
/* Multisite */
define( ‘WP_ALLOW_MULTISITE’, true );
(*проверьте верхние кавычки, чтобы были написаны, как во всем остальном файле)
Далее заходим в админке: инструменты / установка сети
Выбираем как разделять версии сайтов, через подкаталоги (например site.com/ru) или через поддомены (например ru.site.com и в этом случае может понадобится дополнительная настройка хостинга или вашего сервера, чтобы поддомен заработал)
И далее добавляем дополнительный код в файл wp-config.php и в .htaccess по инструкции.
После этого попробуйте создать новый подсайт по следующему пункту (MultiSite Clone Duplicator), зайти на его главную страницу и админку. Если все ок – то все хорошо. Если нет – то нужно попробовать другие варианты кода в .htaccess.
Если при входе на страницу или админку дополнительного сайта выдает ошибку 500 или err_too_many_redirects то нужно заменить предлагаемый вордпрессом код в файле .htaccess на этот:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ – [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L] RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L] RewriteRule . index.php [L]
Если после создания подсайта при переходе в админку или на страницу пишет ошибку 404, то прописываем этот код:
(бывает и такое, что если прописать сразу эту версию – то возникает ошибка сервера, как один из способов решения – прописать сначала код, который предлагает вордпресс, сделать хотя бы одну копию сайта или создать нуля, и далее заменить стандартный код на код ниже)
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ – [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ – [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*.php)$ $2 [L]
RewriteRule . index.php [L]
После этого наша админка меняется на админку мультисайта.
Далее нам все же понадобится целых три плагина:
- MultilingualPress установка и связка языковых версий
- Multisite Language Switcher для установки переключателя языков
- MultiSite Clone Duplicator для копирования настроенной версии сайта
Чтобы не настраивать все по 10 раз, можно сначала настроить одну главную языковую версию полностью по инструкциям ниже, а потом скопировать настроенную версию в новую и немного отредактировать. Чтобы скопировать сайт со всеми настройками в новую версию используем плагин MultiSite Clone Duplicator. Чтобы установить плагины заходим именно в родительскую админку и заходим в размел плагины, и устанавливаем их для всей сети сайтов.
MultiSite Clone Duplicator как настроить плагин
В функциях управления сетью на панеле настройки с появляется кнопка дублировать сайт. С помощью нее можно скопировать уже существующий сайт со всеми настройками в новый подсайт. Поэтому перед копированием необходимо максимально полностью настроить все возможные плагины и подготовить статьи, иначе потом это придется снова делать на каждом подсайте. Более у данного плагина нет функций.
Поскольку мы используем мультисайт именно для языковых версий, то нам понадобятся еще два плагина. Для установки и связки языковых версий страниц и блога и для переключения языков
- MultilingualPress установка и связка языковых версий
- Multisite Language Switcher для установки переключателя языков
MultilingualPress как настроить плагин
Чтобы установить единый язык для всей админки – нужно настроить его в разделе пользователи для вашего профиля. Заходим в раздел пользователи / профиль и выбираем в своем профиле нужный язык админки. Это надо сделать в каждой версии сайта. Теперь во всех языковых версиях язык админки будет единый, в данном случае русский.
Далее устанавливаем плагин MultilingualPress. После установки нам нужно в каждой версии сайта в админ панеле в разделе настройки установить язык сайта
Заходим в настройки / общие и на каждом подсайте ставим используемый язык сайта. В этом случае меняется язык сайта, в том числе язык админки. Чтобы не оказаться в админке на незнакомом языке, мы в прошлом шаге выставляем язык админки в профиле.
В режиме управления сетью можно включить автоматический перевод по языку браузера в настройках плагина
Можно установить и другие нужные настройки. Например, полезной будет функция “Альтернативный заголовок для языка”. Используя ее, вы можете задать удобное для вас отображаемое название языковой версии сайта в самой админке. Ниже можно активировать режим сопоставления переводов для записей вукомерс или произвольных полей.
А чтобы сделать кастомный переключатель языков и сопоставить переводы нам понадобится еще один плагин.
Multisite Language Switcher как настроить плагин
Ставим плагин, после чего у нас появляется новый раздел в настройках каждого сайта который в каждом сайте нужно настроить. В этом один из минусов мультисайта для многоязычности, т к придется это делать для каждой версии, но при этом в плагине можно переключаться на нужную страницу языка в один клик прямо под заголовком.
- Здесь мы можем задать:
- сам язык блога то есть сайта в целом
- как отображать переключатель (с флагом или в виде названия или оба варианта)
- Задать фото флага
- Задать кастомное название языка
- И еще несколько не особо понятных и не всем нужных (лично для меня) настроек.
Сам переключатель можно вывести шорткодами
[sc_msls_widget]
[sc_msls]
или в разделе виджетов (внешний вид / виджеты)
Есть несколько моментов в настройках
Когда задаем картинку флага, не нужно указывать полный путь. Нужно указать имя картинки в формате страны, например en.png и указать путь к ней например в ваших медиафайлах вордпресса. Имя картинки можно посмотреть в файлах плагина либо в коде сайта, посмотрев элемент переключателя.
Например:
https://site.com/wp-content/uploads/2021/02
Если пытаться стилизовать сам виджет, то поедет вся верстка. Поэтому если хотите стилизовать ссылку задайте, то задайте стиль ссылок для родительского блока в котором находится шорткод.
Если хотите сделать список языков в столбик, а не в строку. то в настройках каждого языка добавьте в строках Текст/HTML перед и после элемента тег <br> , тогда ваша строка просто переносится вниз и элементы будут в столбик. Если редактировать флекс класса – ломается верстка.
Если хотите задать класс элементу флага, то можно в дублирующемся разделе Текст/HTML задать класс таким образом
И сам текст возле флага можно задать в строке описание (description)
В итоге мы получаем переключатель с кастомными флагами и/или названием примерно такого вида. Вот примеры (Стиль ссылки с флагом на первом фото я не отредактировал, поэтому ссылка подчернута):
После того как все это настроили, можно скопировать сайт, для создания новой языковой версии через MultiSite Clone Duplicator и после копирования в настройках сайта сопоставляем сайты и все готово!
Как это работает теперь:
(показываю на примере классического редактора, на гутенберге не пробовал)
Во всех страницах и записях блога (и товарах, если вы их активировали) Появляется вот такой пункт на панеле
Здесь нужно сопоставить текущую страницу с ее переводом. Просто в выпадающем списке нужно выбрать название страницы с переводом При этом у переведенных страниц лучше делать такой же слаг (чтобы не путать себя при администрировании сайта)
например:
Если страница основного языка
site.com/sample-page
то адрес страницы перевода
site.com/en/sample-page/
Тогда будет легче ориентироваться в переводах. И далее можете переключаться относительно быстро между переводами прямо в списке страниц по клику на карандашик. Если отображается плюсик, значит перевод не задан.
Все манипуляции выше делаются для правильного ранжирования ваших переводов в поиске и в браузере, а также для переключения языков по переключателю и автоматически по языку браузера.
Если переводы сопоставлены, то в этом случае кнопки переключения языков переключают текущую страницу на указанную страницу перевода для этой страницы. Если страница перевода не задана в админке, то будет перебрасывать на главную страницу нажатой языковой версии
Если вы изменяли адрес входа в админку через плагины безопасности, то при копировании сайта отключите плагин или верните стандартный адрес. После чего успешно войдите в новую копию сайта, и включайте плагин или новый адрес входа обратно. Иначе вы не сможете войти в админку.
Общие файлы для мультисайта
Одним из главных недостатков, является разделение медиафайлов для мультисайта. Как их объединить, пока не понятно. Официальные плагины в данный момент не поддерживаются вордпрессом, а кастомные решение найденные в интернете тоже давно не обновлялись и работать не хотят. Если вы смогли решить данную проблему, можете поделиться своим решением в комментариях.
Не работает или не сохраняются зоны доставки мультисайт woocommerce
В этом случае нужно перезапустить плагин woocommerce в общей админке multisite и отдельно в админке, где возникает этот баг. И после все заработает.
С MultiSite Clone Duplicator вышли проблемы, вылетала 500 ошибка при копировании, в случае удачного копирования не работал Elementor. Все решил с помощью другого плагина NS Site Cloner