У меня есть пользовательский тип записи "Articles-en", который имеет собственную таксономию "article_locales_en". Отдельные посты этого типа имеют структуру URL:
%article_locale%/en/article/%slug%
У меня есть явная проверка в моем шаблоне, чтобы убедиться, что передано значение% article_locale% для статьи. Если это так, визуализируйте страницу. Если это не так, отобразите 404. Это прекрасно работает, например, если у меня есть «test-article» с locales = ["uk", "us"], эти ссылки работают:
uk/en/article/test-article
us/en/article/test-article
... но это не так.
ca/en/article/test-article
au/en/article/test-article
Все эти термины управляются внутри CMS, моя команда SEO довольна. Я счастлив. Теперь они также хотят, чтобы в конкретном случае, чтобы имя «us / en / article /% article_name%» не требовало начального бита «us / en» в URL-адресе без реализации перенаправления 301 (чтобы они не теряли SEO) сок), эффективно делающий эту структуру ссылок:
us/en/article/%slug%
... эквивалентно:
article/%slug%
(чтобы было понятно, оба должны работать). Я пытался решить эту проблему с помощью add_rewrite_rule (), но я получаю запутанный результат. Add_rewrite_rule () я подключил к функции инициализации ...
//default us/en/article/%article_name% to article/%article_name%
add_rewrite_rule('^article/([^/]*)?',
'index.php?pagename=$matches[1]&article_locale=us&article_language=en&post_type=article-en',
'top');
... поднимается, когда я использую плагин monkeyman-rewrite-analyzer внутри админа со всеми желаемыми значениями (хорошо)
Вывод Monkeyman-rerwite-analyzer, показывающий мне правила, которым он соответствует, приоритет и которым он в конечном итоге соответствует
.. но когда я пытаюсь выполнить запрос в своем браузере, он всегда сначала пытается найти другое правило (которое не работает и, таким образом, получает 404):
Вывод отладочной панели
Что дает? Единственный приоритет, который я вижу в документах, - это установка атрибута top при определении правила перезаписи, что я и сделал («bottom» ничего не изменил). Правило перезаписи работает внутри администратора, но никогда не включается, и я исключил какие-либо вещи, связанные с кэшированием. Понятно, что регулярное выражение получает то, к чему я хочу, но это правило не применяется, когда я вызываю страницу напрямую. Я сбросил все свои постоянные ссылки много раз, поэтому я в тупике.