Вопрос или проблема
На установке мультисайта, которая использует плагин Polylang, я хочу добавить собственное правило перезаписи.
В настоящее время моя структура постоянных ссылок выглядит так:
http://host.com/sitename/language/pagename
Теперь я хочу добавить параметр запроса с названием country, как так:
http://host.com/sitename/country/language/pagename
Я пробовал следующее, но безуспешно:
function custom_rewrite_basic() {
add_rewrite_tag('%country%', '([^&]+)');
add_rewrite_rule('^([a-z]+)/?', 'index.php?country=$matches[1]', 'top');
}
add_action('init', 'custom_rewrite_basic');
Какие мысли?
— РЕДАКЦИЯ
Ближе, но все еще не там:
add_rewrite_tag('%country%', '([^&]+)');
add_rewrite_tag('%lang%', '([^&]+)');
add_rewrite_rule('^([^/]*)/([^/]*)/?','index.php?country=$matches[1]&lang=$matches[2]','top');
Проблема здесь в том, что:
- polylang распознает страну как язык, даже несмотря на то, что переменная запроса “lang” установлена правильно
- WP считает, что мы уже не на главной странице
Ваше правило не соответствует структуре URL, которую вы хотите. Правило в основном обрабатывает URL только с одной страной. Какое правильное правило? Вам нужно посмотреть на тот тип правил, которые генерирует плагин, и подражать им.
Ответ или решение
Создание пользовательских правил перезаписи URL для многоуровневой установки WordPress с использованием плагина Polylang может быть достаточно сложной задачей. В данном случае вы стремитесь изменить структуру URL, добавив элемент "country" в текущую конфигурацию. Давайте разберем шаги, необходимые для реализации вашего запроса.
1. Понимание текущей структуры URL
Ваша текущая структура URL выглядит следующим образом:
http://host.com/sitename/language/pagename
Вы хотите изменить это на:
http://host.com/sitename/country/language/pagename
2. Проблемы с правилами перезаписи
Судя по вашему описанию, вы сталкиваетесь с проблемой, когда Polylang распознает "country" как язык, несмотря на то, что переменная запроса "lang" задана правильно. Кроме того, WordPress не считает, что вы находитесь на главной странице.
3. Правильная реализация правил перезаписи
Чтобы добиться желаемого результата, необходимо скорректировать ваши правила перезаписи следующим образом:
function custom_rewrite_rules() {
// Добавляем новые тэги перезаписи
add_rewrite_tag('%country%', '([^&]+)/');
add_rewrite_tag('%lang%', '([^&]+)/');
// Определяем собственное правило перезаписи
add_rewrite_rule('^([^/]+)/([^/]+)/([^/]+)/?$', 'index.php?country=$matches[1]&lang=$matches[2]&pagename=$matches[3]', 'top');
}
add_action('init', 'custom_rewrite_rules');
4. Объяснение и деталей кода
-
add_rewrite_tag: Этот метод устанавливает новые переменные для считывания из URL. В данном случае добавляются тэги для "country" и "lang".
-
add_rewrite_rule: Это ключевая часть, где мы определяем, как будет обрабатываться ваш новый формат URL. Регулярное выражение
^([^/]+)/([^/]+)/([^/]+)/?$
означает, что мы ожидаем три сегмента, разделенных косыми чертами, и в конце может быть один или ноль символов/
. -
index.php?country=$matches[1]&lang=$matches[2]&pagename=$matches[3]: Здесь мы сопоставляем извлеченные значения с переменными для перенаправления на правильную страницу.
5. Удаление старых правил и обновление структур
После добавления кода не забудьте:
- Удалить кэш: Если у вас установлен какой-либо плагин кэширования, не забудьте его очистить.
- Перманентные ссылки: Перейдите в Админ-ку panel WordPress в раздел "Настройки" → "Постоянные ссылки" и просто нажмите "Сохранить изменения". Это обновит правила перезаписи.
6. Отладка и тестирование
Тестируйте различные URL-адреса, чтобы убедиться, что пользовательские правила работают должным образом. Если Polylang продолжает конфликтовать с вашим новым правилом, убедитесь, что у вас нет других плагинов или функций, которые могут перезаписывать такие же или схожие URL.
Заключение
Следуя приведенным выше шагам и рекомендациям, вы сможете правильно настроить пользовательские правила перезаписи для вашей многоуровневой установки WordPress с поддержкой многоязычности. Если проблема продолжает сохраняться, вы можете дополнительно просмотреть документацию по Polylang и WordPress Codex для более глубокой информации о механизмах перезаписи URL.