Вопрос или проблема
У меня есть 2 таксономии (жанр и артист) и пользовательский тип записи (Лирика)
структура URL, которую я хочу получить, это
CPT: /lyrics/ – архивная страница для CPT
Артист: /lyrics/artist/ & /lyrics/artist/song-name/
Жанр: /lyrics/genre
Я сделал CPT и таксономии с помощью плагина CPT
URL хороший, но для одной из таксономий выдает ошибку 404 для страницы
CPT:
$args = array(
"label" => __( "Lyrics", "sage" ),
"labels" => $labels,
"description" => "",
"public" => true,
"publicly_queryable" => true,
"show_ui" => true,
"delete_with_user" => false,
"show_in_rest" => true,
"rest_base" => "",
"rest_controller_class" => "WP_REST_Posts_Controller",
"has_archive" => "lyrics",
"show_in_menu" => true,
"show_in_nav_menus" => true,
"exclude_from_search" => false,
"capability_type" => "post",
"map_meta_cap" => true,
"hierarchical" => true,
"rewrite" => array( "slug" => "lyrics/%artis%",
"with_front" => true ),
"query_var" => true,
"supports" => array( "title", "editor", "thumbnail" ),
"taxonomies" => array( "genre", "artis" ),
);
Жанр TAX:
$args = array(
"label" => __( "Genre", "sage" ),
"labels" => $labels,
"public" => true,
"publicly_queryable" => true,
"hierarchical" => true,
"show_ui" => true,
"show_in_menu" => true,
"show_in_nav_menus" => true,
"query_var" => true,
"rewrite" => array( 'slug' => 'lyrics', 'with_front' => true, ),
"show_admin_column" => true,
"show_in_rest" => true,
"rest_base" => "genre",
"rest_controller_class" => "WP_REST_Terms_Controller",
"show_in_quick_edit" => true,
);
Артист TAX:
$args = array(
"label" => __( "Artist", "sage" ),
"labels" => $labels,
"public" => true,
"publicly_queryable" => true,
"hierarchical" => true,
"show_ui" => true,
"show_in_menu" => true,
"show_in_nav_menus" => true,
"query_var" => true,
"rewrite" => array( 'slug' => 'lyrics', 'with_front' => true, 'hierarchical' => true, ),
"show_admin_column" => true,
"show_in_rest" => true,
"rest_base" => "artist",
"rest_controller_class" => "WP_REST_Terms_Controller",
"show_in_quick_edit" => true,
);
Вы указываете один и тот же слаг lyrics
для обеих ваших пользовательских таксономий. WordPress по умолчанию не может использовать одни и те же слаги для двух таксономий из-за Rewrite API WordPress. Это связано с естеством постов, архивов, таксономий, слагов и иерархией шаблонов WordPress.
Чтобы избежать ошибок 404, вы можете изменить массив артистов на уникальный slug
, например:
$args = array(
"label" => __( "Artist", "sage" ),
"labels" => $labels,
"public" => true,
"publicly_queryable" => true,
"hierarchical" => true,
"show_ui" => true,
"show_in_menu" => true,
"show_in_nav_menus" => true,
"query_var" => true,
"rewrite" => array( 'slug' => 'artists', 'with_front' => true, 'hierarchical' => true, ),
"show_admin_column" => true,
"show_in_rest" => true,
"rest_base" => "artist",
"rest_controller_class" => "WP_REST_Terms_Controller",
"show_in_quick_edit" => true,
);
Убедитесь, что вы сбросили правила перезаписи после этого
Ответ или решение
В современном мире веб-разработки, правильная структура URL является неотъемлемой частью создания удобного и интуитивно понятного интерфейса для пользователей. Если вы сталкиваетесь с проблемой 404 ошибки при настройке собственной структуры URL для таксономий и типов записей, как в вашем случае с таксономией жанра и исполнителя и кастомными записями «Lyric», важно разобраться в нюансах реализации.
Необходимость уникальных слуг для таксономий
Одна из основных причин появления 404 ошибки заключается в том, что вы используете одинаковый слуг 'lyrics'
для нескольких таксономий. В WordPress каждая таксономия должна иметь уникальный слуг для корректной работы. Это связано с особенностями Rewrite API, который WordPress использует для формирования URL.
Решение проблемы
-
Изменение слуга для таксономий:
Чтобы избежать конфликта, вы должны задать уникальные слуги для каждой таксономии. Для таксономии артиста, например, вы можете изменить слуг на'artists'
. Это изменение позволит WordPress корректно различать таксономии.$args = array( "label" => __( "Artist", "sage" ), "labels" => $labels, "public" => true, "publicly_queryable" => true, "hierarchical" => true, "show_ui" => true, "show_in_menu" => true, "show_in_nav_menus" => true, "query_var" => true, "rewrite" => array( 'slug' => 'artists', 'with_front' => true, 'hierarchical' => true ), "show_admin_column" => true, "show_in_rest" => true, "rest_base" => "artist", "rest_controller_class" => "WP_REST_Terms_Controller", "show_in_quick_edit" => true, );
-
Очистка правил перезаписи:
После внесения изменений в слуги необходимо обновить правила перезаписи. Это можно сделать вручную в панели администратора WordPress, просто сохранив настройки структуры постоянных ссылок, или программно, используя функциюflush_rewrite_rules()
.
Дополнительные рекомендации
- Обеспечьте поддержку удобного интерфейса для пользователей и SEO: уникальные слуги помогают не только устранить технические ошибки, но и улучшить взаимодействие пользователя с сайтом и его видимость для поисковых систем.
- Документируйте изменения: всегда фиксируйте изменения в структуре URL для лёгкого управления ими в будущем.
- Тестирование: после изменения слуга и очистки правил обязательно проверьте работу всех урлов на сайте, чтобы убедиться в отсутствии ошибок.
Таким образом, правильная конфигурация слуга таксономий в WordPress не только устраняет технические проблемы, но и способствует созданию более профессионального и интуитивного веб-сайта.