Удалите слиток CPT, но сохраните перезапись слизней таксономии

#wordpress #url-rewriting #custom-post-type #taxonomy #slug

Вопрос:

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

Таксономия иерархична, поэтому в URL-адресе должна быть возможность наличия обоих таксономических слизней.

Например, мне нужно воссоздать следующее

Текущий

/товар/балюстрады/{товар CPT}

Требуемый

/балюстрады/{пункт CPT}

/балюстрады/стекло/{пункт CPT}

Удаление СРТ-пули относительно просто, и я могу заставить URL-адреса отображаться именно так, как мне нужно. Тем не менее, я получаю 404 при попытке доступа к страницам. Я читал во многих местах, что это связано с необходимостью перенаправления, но фрагменты, с которыми я столкнулся, похоже, не решают мою проблему. Вот что у меня сейчас есть

Удалить слизень:

 function remove_cpt_slug( $post_link, $post, $leavename ) {  if ( 'product' != $post-gt;post_type || 'publish' != $post-gt;post_status ) {  return $post_link; }  $post_link = str_replace( '/' . $post-gt;post_type . '/', '/', $post_link );  return $post_link;  } add_filter( 'post_type_link', 'remove_cpt_slug', 10, 3 );  

Пользовательские типы записей/таксономия:

 function cptui_register_my_cpts() {  /** * Post Type: Products. */  $labels = [ "name" =gt; __( "Products", "custom-post-type-ui" ), "singular_name" =gt; __( "Product", "custom-post-type-ui" ), ];  $args = [ "label" =gt; __( "Products", "custom-post-type-ui" ), "labels" =gt; $labels, "description" =gt; "", "public" =gt; true, "publicly_queryable" =gt; true, "show_ui" =gt; true, "show_in_rest" =gt; true, "rest_base" =gt; "", "rest_controller_class" =gt; "WP_REST_Posts_Controller", "has_archive" =gt; false, "show_in_menu" =gt; true, "show_in_nav_menus" =gt; true, "delete_with_user" =gt; false, "exclude_from_search" =gt; false, "capability_type" =gt; "post", "map_meta_cap" =gt; true, "hierarchical" =gt; true, "rewrite" =gt; [ "slug" =gt; "product", "with_front" =gt; false ], "query_var" =gt; true, "menu_position" =gt; 20, "menu_icon" =gt; "dashicons-store", "supports" =gt; [ "title", "editor", "thumbnail", "custom-fields", "revisions" ], "taxonomies" =gt; [ "post_tag", "usage" ], "show_in_graphql" =gt; false, ];    register_post_type( "product", $args ); }  add_action( 'init', 'cptui_register_my_cpts' );     function cptui_register_my_taxes() {  /** * Taxonomy: Usages. */  $labels = [ "name" =gt; __( "Usages", "custom-post-type-ui" ), "singular_name" =gt; __( "Use", "custom-post-type-ui" ), ];   $args = [ "label" =gt; __( "Usages", "custom-post-type-ui" ), "labels" =gt; $labels, "public" =gt; true, "publicly_queryable" =gt; true, "hierarchical" =gt; true, "show_ui" =gt; true, "show_in_menu" =gt; true, "show_in_nav_menus" =gt; true, "query_var" =gt; true, "rewrite" =gt; [ 'slug' =gt; 'usage', 'with_front' =gt; true, 'hierarchical' =gt; true, ], "show_admin_column" =gt; false, "show_in_rest" =gt; true, "show_tagcloud" =gt; false, "rest_base" =gt; "usage", "rest_controller_class" =gt; "WP_REST_Terms_Controller", "show_in_quick_edit" =gt; false, "show_in_graphql" =gt; false, ]; register_taxonomy( "usage", [ "product" ], $args ); } add_action( 'init', 'cptui_register_my_taxes' );  

I also have a rewrite in my permalink settings as showing here

enter image description here

Any help is much appreciated!