Вопрос или проблема
Я видел похожие вопросы, но они, кажется, не совсем подходят к моей проблеме.
У меня есть тип записи, называемый продукт, и у меня есть 2 таксономии: product_cat и location.
Мне нужны архивные страницы, которые объединяют обе эти таксономии, которые будут структурированы так: /product/product_cat/location
Я знаю, что это можно сделать с помощью перезаписей URL, но я не могу понять, как заставить это работать.
Обновление
Я достиг этого в некоторой степени, используя
add_rewrite_rule( '^art-classes/([^/]*)/([^/]*)/?',
'index.php?product_cat=$matches[1]&location=$matches[2]',
'top' );
Но теперь моя страница отдельного продукта не загружается. Она просто загружает все еще архивную страницу. Что-то не так с моим регулярным выражением?
function custom_rewrite_rules() {
add_rewrite_rule( '^art-classes/([^/]*)/([^/]*)/?$',
'index.php?product_cat=$matches[1]&location=$matches[2]',
'top' );
}
add_action('init', 'custom_rewrite_rules');
$ в конце исправил ситуацию. Не знаю почему.
Ответ или решение
Если вы хотите настроить структуру постоянных ссылок для страницы архива, комбинируя несколько таксономий, это может быть достигнуто с помощью функции add_rewrite_rule
в WordPress. У вас есть пользовательский тип поста — product и две таксономии — product_cat и location, и ваша задача заключается в создании структуры ссылок вида /product/product_cat/location. Давайте разберемся, как можно этого достичь, избегая при этом ошибок.
Первоначальные шаги:
-
Подключитесь к хуку
init
: Это позволяет вам добавлять пользовательские правила для перезаписи URL, как только WordPress запускается. -
Создайте функцию для правил перезаписи: Поскольку вы хотите создать структуру, которая будет учитывать обе таксономии, вам нужно использовать регулярные выражения.
Реализация:
Код для правок правил:
function custom_rewrite_rules() {
add_rewrite_rule('^product/([^/]*)/([^/]*)/?$', 'index.php?product_cat=$matches[1]&location=$matches[2]', 'top');
}
add_action('init', 'custom_rewrite_rules');
Важные моменты:
-
Регулярное выражение:
^product/([^/]*)/([^/]*)/?$
: Это правило учитывает вариант URL, оканчивающийся на/
, и ловит две отдельные части URL, которые соотносятся с таксономиями product_cat и location.
-
Использование
$
в конце регулярного выражения: Это символ обозначает конец строки в регулярном выражении. Без него могут возникнуть ситуации, когда ваш URL будет совпадать с другими неправильными URL, что приводит к загрузке неверных страниц (например, страницы архива вместо страницы поста).
Решение проблем с загрузкой страницы продукта:
Почему ваша страница продукта не загружается?
После добавления правила перезаписи ваша одностраничная страницу продукта может перестать отображаться правильно. Это происходит из-за конфликта с правилами маршрутизации. Чтобы исправить это, убедитесь, что добавленное правило перезаписи будет выше в приоритете чем стандартные правила.
Дополнительные рекомендации:
-
Точность: Убедитесь, что параметры URL передаются правильно и соответствуют тем переменным, которые вы используете в WordPress-запросе.
-
Очистка структуры ссылок: После изменения правил перезаписи важно сбросить постоянные ссылки в админке WordPress, переходя к
Settings -> Permalinks
и просто сохраняя их, чтобы обновить правила маршрутизации. -
Оптимизация: Проверьте другие загруженные плагины и правила перезаписи, чтобы избежать конфликтов.
Надеюсь, эта информация поможет вам успешно настроить постоянные ссылки для архива и избежать проблем с перезаписями в WordPress.