Переписывание URL для нескольких таксономий и типов произвольных записей

Вопрос или проблема

У меня есть 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.

Решение проблемы

  1. Изменение слуга для таксономий:
    Чтобы избежать конфликта, вы должны задать уникальные слуги для каждой таксономии. Для таксономии артиста, например, вы можете изменить слуг на '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,
    );
  2. Очистка правил перезаписи:
    После внесения изменений в слуги необходимо обновить правила перезаписи. Это можно сделать вручную в панели администратора WordPress, просто сохранив настройки структуры постоянных ссылок, или программно, используя функцию flush_rewrite_rules().

Дополнительные рекомендации

  • Обеспечьте поддержку удобного интерфейса для пользователей и SEO: уникальные слуги помогают не только устранить технические ошибки, но и улучшить взаимодействие пользователя с сайтом и его видимость для поисковых систем.
  • Документируйте изменения: всегда фиксируйте изменения в структуре URL для лёгкого управления ими в будущем.
  • Тестирование: после изменения слуга и очистки правил обязательно проверьте работу всех урлов на сайте, чтобы убедиться в отсутствии ошибок.

Таким образом, правильная конфигурация слуга таксономий в WordPress не только устраняет технические проблемы, но и способствует созданию более профессионального и интуитивного веб-сайта.

Оцените материал
Добавить комментарий

Капча загружается...