Меня уже неоднократно спрашивали, как победить конфликт URL между страницами и архивами типов данных (post type) в Вордпресс. Решение есть, о нем сегодня и поговорим.
Чтобы было проще понять о чем речь, возьмем конкретный случай.
Допустим, имеется сайт на Вордпресс, размещенный по адресу domain.local. На сайте имеется некая страница Книги, URL которой выглядит таким образом:
- http://domain.test/books/
Теперь представим, что в какой-то момент времени на сайте появляется тип данных Книги, зарегистрированный как books. Неважно, последовательность появления может быть и другой. Смысл в том, что URL архива записей этого типа данных будет выглядеть так же как и ссылка на страницу о которой говорилось выше:
- http://domain.test/books/
Естественно, одинаковых URL у двух разных страниц быть не может в принципе. В таких случаях Вордпресс отдает приоритет архивам, т.е по этому адресу будет открываться архив типа данных Книги. В этом случае правильнее всего исключить совпадение имен, и лучше переименовать страницу или тип данных.
Но бывают такие ситуации, когда страницы уже давно в индексе, и их переименование может повлечь серьезные проблемы. То же самое касается и архивов записей. Ведь сложно не согласиться с тем, насколько правильна с точки зрения SEO такая структура URL. В нашем случае конечный URL всех книг будет иметь самую понятную и очевидную структуру из всех возможных:
- http://domain.test/books/book1.htm
- http://domain.test/books/book2.htm
Для таких тяжелых случае имеется небольшое решение, которое сохранит URL записей проблемного типа данных, а вместо URL его архива будет открываться одноименная страница. Код традиционно помещаем в файл функций активной темы.
add_filter('page_rewrite_rules', 'dnln_collect_page_rewrite_rules'); function dnln_collect_page_rewrite_rules($page_rewrite_rules) { $GLOBALS['dnln_page_rewrite_rules'] = $page_rewrite_rules; return array(); } add_filter('rewrite_rules_array', 'dnln_prepend_page_rewrite_rules'); function dnln_prepend_page_rewrite_rules($rewrite_rules) { return $GLOBALS['dnln_page_rewrite_rules'] + $rewrite_rules; }
В заключение
Нужно понимать, что это костыль. Лучше заранее продумывать имена для страниц, записей, типов данных и других кастомных таксономий Вордпресс, чтобы в будущем избежать их совпадения. В т.ч. и со встроенными таксономиями Вордпресс, про которые почему-то многие забывают.
Делаю сайты на Вордпресс с 2008 года, в том числе уникальные инструменты для решения сложных бизнес‑задач.
Подробнее