#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
Any help is much appreciated!