Вопрос или проблема
Я пытался убрать /category/ из структуры постоянных ссылок, сохраняя родительскую категорию, но WordPress выдает мне страницу с ошибкой 404.
Я не использую никакой конкретный плагин для этого, просто использую . в категории и использую %category%/%postname%/ в качестве структуры постоянных ссылок.
Если я восстанавливаю /category/, все работает нормально. Я уже использовал “https://wordpress.stackexchange.com/” и ‘.’ для удаления базовой категории.
Как я могу решить эту проблему?
Просто введите “https://wordpress.stackexchange.com/” ИЛИ ‘.’ (без кавычек) в качестве значения для базовой категории.
Показалось, что это работает идеально, когда я тестировал это. Мне было бы интересно узнать, если кто-то обнаружит другие опасности при этом, кроме очевидной потенциальной возможности столкновений между постами, страницами и категориями.
Хорошо, я протестировал и могу воспроизвести проблему на своем тестовом сайте. Посты работают как ожидалось, но действительно, подкатегории не работают.
Одно из решений, которое на самом деле не практично, если у вас много категорий, но решает проблему, это создать страницы с одинаковыми путями и использовать шорткод на этих страницах. Шорткод отобразит соответствующие страницы в виде списка. Единственная проблема заключается в том, что он не будет использовать тот же формат, который по умолчанию ожидается в вашей теме…
Таким образом, если у вас есть родительская категория с именем parent
и дочерняя категория с именем child
, вы:
- создаете страницу с путем, установленным на
/parent/
- создаете дочернюю страницу с путем, установленным на
/child/
, а затем помечаете ее как дочернюю к/parent/
Обратите внимание, что вы не сможете получить правильный путь для дочерней страницы (/parent/child/
в моем примере) без предварительного создания родительской страницы. Одно хорошее дело в том, что внешний вид списка в родительской категории таким образом будет совпадать с внешним видом дочерней.
На страницах вы можете ввести любой текст, который хотите, а затем использовать шорткод, такой как этот:
[display-posts category="second-category"]
Я использую плагин Display Posts Shortcode, который, вероятно, не самый лучший плагин для этой работы, но у него есть преимущество – он работает хорошо. Не стесняйтесь пробовать другие…
Теперь, если у вас сотни категорий и вы постоянно добавляете/удаляете их, это будет настоящим кошмаром. Если у вас есть несколько хорошо выбранных категорий, вам будет достаточно так.
(Вам также понадобится немного CSS, чтобы помочь с форматированием вывода.)
Вот скриншот дочерней страницы. Мы видим, что путь выглядит правильно. Это связано с тем, что я настроил родительскую категорию (правый бок экрана). Я также показываю шорткод.
Теперь вам, вероятно, следует сообщить о этой проблеме как об ошибке на WordPress.org.
Ответ или решение
Устранение ошибки 404 при удалении базовой категории в WordPress
Проблема, с которой вы столкнулись, связана с тем, что при попытке удалить «/category/» из структуры постоянных ссылок в WordPress вы получаете страницу с ошибкой 404. Это происходит из-за конфликта маршрутов и нехватки соответствующих реакций со стороны системы для дочерних категорий. Давайте разберем данную проблему и предложим возможные решения.
Причины возникновения ошибки 404
Когда вы указываете в настройках постоянные ссылки символ «.», WordPress не может корректно распознать маршруты для более глубоких уровней категорий (например, родительская категория и ее дочерняя категория). При этом запросы на страницах с адресами, содержащими дочерние категории, не обрабатываются правильно, и вы получаете ошибку 404.
Технические аспекты
Структура постоянных ссылок %category%/%postname%/
в сочетании с удалением базового элемента категории создает потенциальные конфликты. Например, если у вас есть родительская категория parent
и ее дочерняя категория child
, WordPress не знает, как правильно обрабатывать URL example.com/parent/child/
, так как ни один маршрут не указывает напрямую на настоящую категорию.
Решения проблемы
-
Перенаправление URL:
- Если вы часто удаляете или добавляете категории, разумно использовать специализированные плагины для управления переадресацией. Эти плагины помогут избежать конфликтов и настроить правильные маршруты.
-
Создание статических страниц:
- Как вы уже упомянули, создание страницы для каждой категории и использование шорткодов для отображения записей – это рабочий метод, хотя и не самый оптимальный для большого количества категорий. Для каждой родительской и дочерней категории можно создать статические страницы, использующие шорткод, подобный:
[display-posts category="child"]
- Это позволит выводить записи соответствующих категорий на созданной странице, но потребует дополнительной настройки внешнего вида (CSS).
- Как вы уже упомянули, создание страницы для каждой категории и использование шорткодов для отображения записей – это рабочий метод, хотя и не самый оптимальный для большого количества категорий. Для каждой родительской и дочерней категории можно создать статические страницы, использующие шорткод, подобный:
-
Использование плагинов для категорий:
- Рассмотрите возможность использования плагинов для управления категориями. Плагины, такие как Yoast SEO, также могут помочь в устранении таких конфликтов и обеспечивают управление постоянными ссылками.
-
Кэширование:
- Если вы используете систему кэширования, обязательно очистите кэш после изменения структуры постоянных ссылок. Кэшированные страницы могут вызывать проблемы при их обновлении.
-
Отчет об ошибке:
- Так как вы воспроизвели ошибку на тестовом сайте, стоит сообщить об этом разработчикам WordPress через официальную платформу: WordPress.org. Это может помочь в дальнейшем улучшении платформы.
Вывод
Удаление базовой категории в WordPress – задача не из простых, и она требует тщательной настройки и понимания путей обращения к контенту. При этом существует несколько методов решения проблемы. Если у вас ограниченное количество категорий, приемлемо использовать статические страницы и шорткоды. Однако, для более продвинутых сайтов с большим числом категорий настоятельно рекомендую изучить плагины и системы переадресации.