Главная / Ведение блога / Как сделать мультиязычный сайт на WordPress

Как сделать мультиязычный сайт на WordPress

Как сделать переключатель языков на сайте WordPressДобрый день, уважаемые читатели! Давненько я Вас не радовал новыми авторскими постами — все время уходит на спецкурс и на подготовку к будущей школе для блоггеров. Но зато есть в загашнике полезный материал о том, как легко можно сделать свой блог мультиязычным. Предоставил его постоянный читатель моих «записок» Виктор Хильчук, автор блога «Типичный украинский блоггер», известный в своих кругах под ником MrVigner. Предоставляю ему слово!

[contents h2 h3]

Здравствуйте, уважаемые читатели блога «Записки seo-специалиста»!

Визитка блога Виктора ХильчукаВ этой статье речь пойдет о том, как сделать мультиязычный сайт на WordPress без использования плагинов. На эту тему в интернете есть довольно много материалов, но их качество и полнота раскрития темы оставляет желать лучшего. Пора это исправить!

Преимущества и недостатки данного метода

Из личного опыта скажу, что недостаток только один — несколько админок. А вот приемуществ организации мультиязычности методом без плагинов куча и самое гланое из них — полноценность. Уверен вы не раз встречали мультиязычные сайты и наверное замечали, что всегда есть недочет в виде неполной локализации. То есть, когда вы переключаете язык, к примеру, с русского на украинский, наблюдаете такую картину: текст статьи на украинском, а элементы меню — на русском.

Некоторые плагины для создания мультиязычного сайта на Вордпресс позволяют путем манипуляций с кодом темы делать меню на разных языках, но это и не очень удобно, и не решает проблем с переводом плагинов. К примеру, если у вас установлен плагин для вывода схожих публикаций в конце статьи, или форма подписки организована через плагин. Представленный ниже метод позволяет избежать всех этих проблем и сделать полноценную seo-оптимизацию всех языковых версий.

Как сделать мультиязычный сайт на WordPress

При организации мультиязычности данным методом можно выбрать два пути:

  • новая языковая версия на поддомене;
  • новая языковая версия в подпапке.

В первом случае адрес будет в формате http://en.site.com, а во втором — http://site.com/en. Я делал по второму примеру, чтобы одним сайтом считалось. Но у меня две версии — русская и украинская, а вот в случае с английской может лучше и на поддомене. В общем, выбор за вами. Теперь к делу.

Шаг 1 — установка двух и более Вордпрессов

В первом шаге ничего сложного нет. В зависимости от выбранного варианта, создаем поддомен или папку в корне сайта и ставим туда WordPress. Уверен с установкой справится каждый, подробные инструкции тут не нужны. Единственное что стоит отметить — если устанавливаете движок в папку, то необходимо подкорректировать файл .htaccess, а именно:

[wfbox type=»default»]<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /en/
RewriteRule ^index\.php$ — [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /en/index.php [L]
</IfModule>[/wfbox]

Разница между стандартным и представленным выше файлом  .htaccess всего в двух строчках — третьей и предпоследней, где добавлено /en (имя вашей папки, в которой находится Вордпресс). Если этих исправлений не сделать, установленный сайт в папке не будет корректно работать.

Шаг 2 — создание «переключателя» языков

Это пожалуй именно тот шаг, которого не хватает в инструкциях по созданию мультиязычного сайта путем установки нескольких движков. Не знаю, использовал ли еще кто-нибудь такой способ создания переключателя, но я по этому поводу в свое время ничего не нашел и пришлось изобретать метод самому.

Итак, делать все будем путем использования дополнительных полей. Для удобства создадим специальную функцию, выводящую «окошко» для вписывания адреса другой языковой версии записи. Переключение языка в категориях реализуем благодаря другому коду. Поехали!

Открываем файл functions.php вашего шаблона (темы) и дописываем в конце следующий код:

[wfbox type=»default»]<? // Активация блока дополнительных данных (my_extra_fields)
add_action(‘admin_init’, ‘my_extra_fields’, 1);
function my_extra_fields() {
add_meta_box( ‘extra_fields’, ‘Дополнительные данные’, ‘extra_fields_box_func’, ‘post’, ‘normal’, ‘high’ );
}
function extra_fields_box_func( $post ){
?>
<p><label style=»font-weight:bold; width:145px; display: block; float: left;»>Англ. версия (url):</label><input type=»text» name=»extra[enurl]» value=»<?php echo get_post_meta($post->ID, ‘enurl’, 1); ?>» style=»width:555px;» /></p>
<input type=»hidden» name=»extra_fields_nonce» value=»<?php echo wp_create_nonce(__FILE__); ?>» />
<?php
}
// включаем обновление полей при сохранении
add_action(‘save_post’, ‘my_extra_fields_update’, 0);
/* Сохраняем данные, при сохранении поста */
function my_extra_fields_update( $post_id ){
if ( !wp_verify_nonce($_POST[‘extra_fields_nonce’], __FILE__) ) return false; // проверка
if ( defined(‘DOING_AUTOSAVE’) && DOING_AUTOSAVE ) return false; // если это автосохранение
if ( !current_user_can(‘edit_post’, $post_id) ) return false; // если юзер не имеет право редактировать запись
if( !isset($_POST[‘extra’]) ) return false;
// Все ОК! Теперь, нужно сохранить/удалить данные
$_POST[‘extra’] = array_map(‘trim’, $_POST[‘extra’]);
foreach( $_POST[‘extra’] as $key=>$value ){
if( empty($value) )
continue delete_post_meta($post_id, $key); // удаляем поле если значение пустое
update_post_meta($post_id, $key, $value); // add_post_meta() работает автоматически
}
return $post_id;
}
//Создаём функйию подключения стилей thickbox
function upload_styles() {
wp_enqueue_style(‘thickbox’);
}
add_action(‘admin_print_scripts’, ‘upload_scripts’); //Регистрируем скрипты в админке
add_action(‘admin_print_styles’, ‘upload_styles’); //Регестрируем стили в админке
?>[/wfbox]

После сохранения файла  functions.php можно посмотреть результат работы данной функции. Заходим в админку и переходим на страницу добавления новой записи (поста, статьи). После поля формы ввода текста статьи вы увидите форму «дополнительных данных». Правда, у вас будет только одно поле, а у меня, как видите, еще и «Похожие записи» сделаны через дополнительные поля (да, заполнять приходится вручную, но зато можно указывать разные анкоры).

Результат работы изменений functions.php в админке WordPress для получения мультиязычности

В поле «Укр. Версия (url)», а после вставки кода из примера, текст будет «Англ. Версия (url)», указываем адрес переведенной на другой язык статьи. Например, если другая версия установлена в папке /en/ на основном домене, то адрес статьи можно указать без домена — /en/adres-perevedennoj-stati/. Такой формат позволит избежать лишних проблем при смене домена. В случае установленной на поддомен другой языковой версии, указываем полный адрес переведенной статьи — http://en.site.com/adres-perevedennoj-stati/.

Итак, адреса статей для переключателя мы уже можем ввести, теперь создадим сам переключатель и вставим его в нужном месте нашего шаблона. Он у меня находится в шапке, поэтому переведенный ниже код вставлен в header.php :

[wfbox type=»default»]<?php if (is_single()) { ?>
<a href=»<?echo get_post_meta($post->ID, ‘enurl’, true);?>»>English</a>
<?php } elseif (is_front_page()) { ?>
<a href=»/»>English</a>
<?php } elseif (in_category(‘2’)) { ?> // 2 — id категории, меняем на свой
<a href=»/category/adres-kategorii-2″>English</a> //адрес категории другой версии
<?php } elseif (in_category(‘3’)) { ?> //3 — id категории, меняем на свой
<a href=»/category/adres-kategorii-3/»>English</a>
<?php } else { ?>
<?php } ?>[/wfbox]

Код позволяет отображать переключатель языка на страницах записей, на главной и в категориях. Чтобы сделать последнее, необходимо заменить  id и адреса категорий на свои. По аналогии можно добавлять еще категории.

Пример варианта с переключателем языка

[wfbox type=»attention»]

Небольшое пояснение по комментариям вышепоказанного кода:

  • «2» — id категории в текущей языковой версии сайта, а «адрес категории» — адрес аналогичной категории в другой языковой версии. В общем, тут все понятно.

[/wfbox]

В принципе, мультиязычность вашего сайта готова — вы имеете две версии веб-ресурса с переключателей языков между ними. Только не забудьте все тоже самое проделать в шаблоне дизайна другой языковой версии, чтобы переключатель был «взаимным» (id и адреса категорий тоже поменять, поскольку они не будут идентичными).

Шаг 3 — уведомление поисковых систем о другой версии сайта

И хотя посетители сайта уже будут видеть, что ваш сайт доступен и на другом языке, поисковые системы еще не в курсе. Поэтому им очень важно сообщить о другой языковой версии. Почему? К примеру, в случае поддомена получается, что с каждой страницы вашего сайта есть сквозная ссылка на другой сайт. Лучше, чтобы Гугл и Яндекс знали, что это «переключатель языков».

Сообщить им об этом очень просто, достаточно вставить в header.php мужду строчками <head> и </head> следующий код:

[wfbox type=»default»]<?php if (is_single()) { ?>
<link rel=»alternate» hreflang=»en» href=»http://site.com<?echo get_post_meta($post->ID, ‘enurl’, true);?>»>
<?php } elseif (is_front_page()) { ?>
<link rel=»alternate» hreflang=»en» href=»http://site.com/»>
<?php } elseif (in_category(‘2’)) { ?> // 2 — id категории, меняем на свой
<link rel=»alternate» hreflang=»en» href=»/category/adres-kategorii-2/»> //адрес категории другой версии
<?php } elseif (in_category(‘3’)) { ?> //3 — id категории, меняем на свой
<link rel=»alternate» hreflang=»en» href=»/category/adres-kategorii-3/»> //адрес категории
<?php } else { ?>
<?php } ?>[/wfbox]

Код аналогичный тому, что мы использовали для переключателя версий. Заменяем/дополняем все данные на свой лад. И не забываем значение атрибута hreflang менять на необходимое. То есть, если адрес на английскую версию страницы, то hreflang=»en», если на украинскую — hreflang=»uk» и так далее. Подробнее об атрибуте  hreflang можно почитать тут.

Подведем итоги

Путем установки двух движков WordPress и добавления нескольких строчек кода можно создать полноценный мультиязычный сайт. Главное достоинство такого варианта — полная локализация обеих версий (плюс отдельно можно прописывать мета-теги и т. д., чего не сделаешь плагином). Кроме того, таким образом можно сделать и три, и более языковых версия — но это уже на любителя себя помучать. 🙂

Надеюсь, что материал моей статьи пригодится вам, поскольку мне год назад именно такой инструкции не хватало. Если остались вопросы — спрашивайте в комментариях, постараюсь ответить.

С уважением, Виктор Хильчук (MrVigner)

Автор: Максим Довженко

Максим Довженко
Seo-специалист, веб-аналитик, блоггер. Совладелец кулинарного портала и видеоканала "Твой Поваренок". Специалист по работе с информацией, руководитель с 15-ти летним стажем. = Счастливый отец дочки Валерии. = :)

Check Also

Как написать цепляющее вступление для блога

Добрый день, уважаемый читатель! Давно не затрагивали мы тему написания блоггерских постов, их правильного написания …

36 комментариев

  1. Аватар

    Отличная инструкция! Только немного недопонял. Если у меня уже есть полноценный сайт и я решил сделать его мультиязычным по инструкции. Все записи веб-страниц переведутся автоматически?

    • Аватар

      Если бы =) Автоматический перевод возможен только плагинами, но делается он гугл транслейтом или подобной системой. Сами понимаете, какое будет качество такого перевода.
      В данном случае необходимо самому переводить все статьи. Но зато и перевод будет нормальный, и оптимизацию можно сделать.

  2. Аватар

    Добрый день, Максим. Побывала на сайте Виктора, но я не поняла, как он переведется на русский , пришлось воспользоваться функцией браузера.

    • Аватар

      Здравствуйте, Лидия. Мой личный блог не мультиязычный. Чтобы посмотреть пример описанного метода — перейдите по ссылке имени в данном ответе. На том сайте вверху справа будет переключатель.

  3. Аватар

    Привет, Максим! Очень полезная инфа! Эти нюансы знают далеко не все блогеры. Благодарствую!)

  4. Аватар

    Раньше по данной теме заметок еще не встречал. Если в будущем нужно будет провернуть подобный финт с мультиязыками, буду знать, где почитать.
    С другой стороны, сейчас в браузерах переводчики есть и с любого языка идет перевод, хотя и довольно корявый))

    • Аватар

      В моем случае мультизычность делалась не для удобства пользователей или престижности, а для привлечения трафика. И это неплохой способ увеличить посещаемость, ведь когда планируешь новый сайт и уже собрал СЯ, то почему бы не перевести ключевики на другой язык (которым владеешь) и не оценить их потенциал? К примеру у меня благодаря созданию украинской версии посещаемость на 15% больше, чем была бы только с одной русской.
      Если мультиязычность планировать еще до создания сайта, то на дополнительную языковую версию много времени не тратится — перевод статей можно делать прагмой (если с русского на украинский и наоборот, то качество приемлемое), после чего надо всего лишь подправить ошибки перевода и ключевики правильно вписать. Конечно, если переводить уже существующий сайт на котором не одна сотня статей — это уже очень много работы 🙂

      • Аватар

        Ясно, Виктор, про мультиязычность нужно думать с самого начала строительства сайта. Перевести и менять ключевики на старом сайте довольно трудоёмкость, кстати, я также живу в Украине и на русском языке трафик нормальный, хотя с России больше, но там же и аудитория побольше))

        • Аватар

          Все верно, иначе просто терпения не хватит все сразу переводить))
          \\Да, трафика больше всего с России, примерно 65% (и он «дороже стоит»). Еще 25% Украина. Выходит что с нашей страны из 25% трафика 15% украиноязычная аудитория и 10% русскоязычная 🙂

  5. Аватар

    Спасибо за полезную инфу)

  6. Аватар

    Мне бы хотелось знать еще один важный момент, а именно информацию о карте сайта. Если второй сайт в поддиректории, то robots.txt должен быть в корне. А как тогда быть с картой сайта? С поддиректории писать прямо в корень или в роботс прописывать пути в папку? Как правильно?

    Спасибо

  7. Аватар

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

  8. Аватар

    Я ради эксперимент пробовал поставить просто переводчик, но толку с него мало. Судя по вебвизору, люди на него просто не обращают внимание.

    • Paladin

      Привет, Андрей! Им похоже, просто не удобно им пользоваться (кто-то не видит, кто-то думает, что время будет лишнее на перевод потрачено). Народу проще опять в поиск сбегать, чтобы поискать мультиязычный вариант, чем что-то тыкать на сайте.

    • Аватар

      Тоже ради интереса исследовал, очень редко кто меняет язык. В прочем это вполне логично, ведь у меня весь трафик поисковый, а если посетитель пришел на русскоязычную версию, значит он искал информацию на русском языке (тогда зачем ему менять).
      Дополнительные языковые версии стоить делать ради дополнительного трафика, а переключатель между ними — для своего удобства в первую очередь 🙂

  9. Аватар
    Андрей

    Здравствуйте.
    Хочу на вордпресс сделать доску объявлений, не нашел ни одной темы, чтобы можно было настроить поддомены для регионов. (чтобы присвоить в яндексе регион). Вот нашел доску объявлений http://biglus.com/, подскажите какая тема или плагин тут используется, нужно именно, чтобы поддомены работали как в примере. Я находил плагин для создания поддоменов, но там только для рубрик, тоесть из подрубрик создаются поддомены.

  10. Аватар

    У меня почему то после вставки предложенного кода в файл функций темы слетает админка и выдает ошибку 500…

    • Аватар

      Да, у некоторых после вставки бывают ошибки. На данный момент было выявлены такие причины:
      — неправильная вставка (в некоторых темах в конце файла функций нету ?> и если не добавить перед вставкой кода, может появится белый экран.
      — старая версия php на сервере тоже вызывала ошибки в работе.
      — еще что-то было, но уже не помню.
      На страницах данной темы http://webmasters.ru/forum/f160/informacionnyi-sdl-na-wordpress-s-nulya-maksimal%60naya-seo-optimizaciya-v-top-bez-vneshnego-prodvizheniya-69336/ писал решение, полистайте. (Там тема хоть и другая, но тот же код используется).

      • Аватар

        Код не работает, выдает белый экран. Дело точно не в неправильной вставке или старой версии php.

        Лог ошибок выдает:
        PHP Parse error: syntax error, unexpected ‘dannye\xe2\x80\x99’ (T_STRING)

        В этой строке:
        add_meta_box( ‘extra_fields’, ‘Дополнительные данные’, ‘extra_fields_box_func’, ‘post’, ‘normal’, ‘high’ );

  11. Аватар
    Ксения

    А чем не устроило такое решение как WordPress multisite + Multisite language switcher?

    • Аватар

      Здравствуйте Ксения. Наверное устроило бы, но на момент когда передо мной ставилась задача создать мультиязычный сайт, я еще не знал про мультисайт 🙂 В сети тогда тоже нигде не упоминалась возможно создания мультиязычности таким образом — обсуждалось всего два варианта (плагинами и путем установки двух движков).

  12. Аватар

    Привет. Спасибо, хорошая инструкция! Добавлю в копилку знаний. Обрати внимание на форму комментов, есть баги с тайтлами полей (у меня Хром если что).

  13. Аватар
    Alina Mironova

    Здравствуйте! MultilingualPress – это бесплатный плагин, доступный на WordPress.org (доступна также премиум версия). Этот плагин объединен с режимом Multisite для WordPress, а с помощью настраиваемого виджета соединяет несколько сайтов на разных языках для работы с мультиязычным сайтом WordPress.

  14. Аватар

    Доброго времени суток. Спасибо за полезную статью. Помогите с вопросом пожалуйста. У меня есть основной сайт. Я хочу сделать второй язык на поддомене, типа en/сайт.ру. Это даст мне 2 админки, и возможность продвигать записи по 2-м языкам. Дело в том, что сайт на поддомене не будет полной копией главного. То есть на втором сайте рубрик и записей будет намного меньше. То есть, переключатель языка не будет перенаправлять посетителя на ту же статью на другом языке. По сути 2 сайта на двух языках, только дизайн тот же. Вопрос: при таком раскладе, верно ли я решил создать второй язык на поддомене? Заранее спасибо.

    • Paladin

      Привет! Поддомен ради второго языка? На мой взгляд все делается на основном. Ведь информация на нем такая же, хоть и записей будет меньше. Проще указывать, что статья имеет перевод на второй язык.

  15. Аватар

    У меня еще один вопрос. Все таки решил сделать сайт с помощью Multisite. Основной сайт уже наполнен записями и плагинами. Для того что бы подключить Multisite, мне нужно отключить все плагины, а потом включить. Вопрос такой: если я отключу все плагины основного сайта, то при включении, настройки плагинов обнуляться или нет? Есть жизненноважные плагины Redirect, плагин Custom Permalinks, Remove Category URL. Они все настроены, боюсь, что все настройки пропадут. Так ли это? Прошу ответить.

  16. Аватар

    У меня появилась такая проблема. Когда нахожусь в подпапке и кликаю по логтипу сайта в шапке, то меня перебрасывает на основной сайт. Код в файле .htaccess изменил как указано в статье, вместо en прописал свою папку. Кто знает, как решить проблему?

  17. Аватар

    У кого то вообще получилось? После вставки кода выдает ошибка синтаксиса. Тестил на денвере. Если надо починить код, то прошу автора разобраться и дать читателям рабочий вариант данной темы. Заранее спасибо.

  18. Аватар
    MagazinSite.ru

    А если оттолкнуться от англоязычного отдельного сайта, на который и установить плагин перелинковок или прямых ссылок на русскоязычный сайт, получится два отдельных продукта, возможно что даже перелинковка и не нужна, английская версия должна переводится уже на все остальные языки, с помощью онлайн переводчиковых плагинов?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *