Многоязычные постоянные ссылки в qTranslate для WordPress
Я использую плагин qtranslate для моего сайта на WordPress, чтобы сделать его многоязычным.
Теперь у меня появилось требование:
Для английского языка URL должен выглядеть так: www.sitename.com/contact-en
Для французского языка URL должен выглядеть так: www.sitename.com/fr/contact-fr
Как этого добиться? (Используется плагин qTranslate)
Примечание: В URL не должно быть ID записи между языковыми метками
Согласно посту на https://wordpress.stackexchange.com/questions/24061/multilingual-permalinks-qtranslate я попробовал http://www.3dolab.net/en/qtranslateslug-plugin-widget, но возникают ошибки "страница не найдена". Похоже, что автор прекратил разработку этого плагина, как видно из 29-го комментария на той странице.

В настройках qTranslate в админ-панели откройте расширенные опции и выберите радиокнопку для использования языковых префиксов после имени домена. Предполагаю, что у вас в настройках языков плагина указан французский. После этого даты могут отображаться некорректно — используйте функцию date в PHP для исправления этого в настройках конкретного языка (редактирование языка). Например, j F. Пример можно увидеть на minexrussia.com/2011, где префикс ru используется таким же образом.
Чтобы избежать префикса en, выберите английский как язык по умолчанию и отметьте настройку в расширенных опциях, чтобы не показывать префикс для языка по умолчанию. Рекомендую удалить все остальные языки, кроме en и fr, в настройках плагина.

Имея плагин "qtranslateslug-plugin-widget" работающим в административной части для сохранения ЧПУ в таблице слагов, я добавил свой собственный код на стороне пользователя.
На странице wp-blog-header.php
я добавил свой код прямо перед подключением файла wp-load.php
. Я взял URL из $_SERVER['REQUEST_URI']
, и используя слаг и язык в нем, получил название записи и присвоил модифицированный URI $_SERVER['REQUEST_URI']
соответствующим образом.
Например:
До редактирования: $_SERVER['REQUEST_URI'] = '/fr/french-slug';
После редактирования: $_SERVER['REQUEST_URI'] = '/post-name';
Позвольте объяснить это более подробно
Присвоить
$_SERVER['REQUEST_URI']
переменнойПолучить слаг, разделив его по слешу (
/
)Проверить слаг в таблице слагов базы данных, которую использует плагин "qtranslateslug-plugin-widget", и получить оттуда ID записи
Теперь, используя ID записи, получить название записи из таблицы записей.
Собрать обратно, как показано в примере выше.
Присвоить обратно в
$_SERVER['REQUEST_URI']

Пожалуйста, ознакомьтесь с http://wordpress.org/plugins/qtranslate-slug/
Qtranslate - хороший плагин, но, к сожалению, на сегодняшний день устарел. Qtranslate Slug - это дополнение к QTranslate, которое добавляет поддержку перевода постоянных ссылок и исправляет некоторые недостатки QTranslate, начиная с WordPress 3.0.
