Пользовательский тип записи и таксономия, использующие один и тот же slug с rewrite

Это моя первая попытка работать с правилами перезаписи WordPress, поэтому, пожалуйста, потерпите со мной. Проблема в том, что все элементы, которые я добавляю в свой портфель, имеют несколько категорий. Я хочу удалить категорию из URL при просмотре портфолио.

site.com/portfolio -> работает

site.com/portfolio/category/ -> работает

site.com/portfolio/category/post-added-to-portfolio/ -> работает, но я не хочу, чтобы это

site.com/portfolio/post-added-to-portfolio/ -> не работает, но он должен

/* Post Type: Portfolio */
$labels = array(
    "name" => __( "Portfolio", "" ),
    "singular_name" => __( "Portfolio", "" ),
);
$args = array(
    "label" => __( "Portfolio", "" ),
    "labels" => $labels,
    "description" => "",
    "public" => true,
    "publicly_queryable" => true,
    "show_ui" => true,
    "show_in_rest" => false,
    "rest_base" => "",
    "has_archive" => "portfolio",
    "show_in_menu" => true,
    "exclude_from_search" => false,
    "capability_type" => "post",
    "map_meta_cap" => true,
    "hierarchical" => true,
    "rewrite" => array( "slug" => "portfolio", "with_front" => true ),
    "query_var" => true,
    "supports" => array( "title", "editor" ),
    "taxonomies" => array( "services" ),
);
register_post_type( "portfolio", $args );   

/* Taxonomy: Services */
$labels = array(
    "name" => __( "Services", "" ),
    "singular_name" => __( "Service", "" ),
);
$args = array(
    "label" => __( "Services", "" ),
    "labels" => $labels,
    "public" => true,
    "hierarchical" => true,
    "label" => "Services",
    "show_ui" => true,
    "show_in_menu" => true,
    "show_in_nav_menus" => true,
    "query_var" => true,
    "rewrite" => array( 'slug' => 'portfolio', 'with_front' => true, ),
    "show_admin_column" => false,
    "show_in_rest" => false,
    "rest_base" => "",
    "show_in_quick_edit" => false,
);
register_taxonomy( "services", array( "portfolio" ), $args );

// handle redirects for taxonomy
add_action('generate_rewrite_rules', 'generate_taxonomy_rewrite_rules');
function generate_taxonomy_rewrite_rules( $wp_rewrite ) {
  $rules = array();
  $post_types = get_post_types( array( 'name' => 'portfolio', 'public' => true, '_builtin' => false ), 'objects' );
  $taxonomies = get_taxonomies( array( 'name' => 'services', 'public' => true, '_builtin' => false ), 'objects' );
  foreach ( $post_types as $post_type ) {
    $post_type_name = $post_type->name;
    $post_type_slug = $post_type->rewrite['slug'];
    foreach ( $taxonomies as $taxonomy ) {
      if ( $taxonomy->object_type[0] == $post_type_name ) {
        $terms = get_categories( array( 'type' => $post_type_name, 'taxonomy' => $taxonomy->name, 'hide_empty' => 0 ) );
        foreach ( $terms as $term ) {
          $rules[$post_type_slug . '/' . $term->slug . '/?$'] = 'index.php?' . $term->taxonomy . '=' . $term->slug;
          $rules[$post_type_slug . '/' . $term->slug . '/page/?([0-9]{1,})/?$'] = 'index.php?' . $term->taxonomy . '=' . $term->slug . '&paged=' . $wp_rewrite->preg_index( 1 );
        }
      }
    }
  }
  $wp_rewrite->rules = $rules + $wp_rewrite->rules;
}

2 ответов


Если вы хотите удалить / category / из url, выполните следующие два шага:

1.Перейдите в Настройки >> постоянные ссылки и выберите пользовательский и введите: / %category% / %postname%/ 2.Затем установите базу категорий .

сохраните его, и вы увидите, что Ваш URL изменен на этот формат: http:/abc.com/portfolio/


после работы над этим в течение недели я, наконец, решил проблему. Я держал почтовые бланки в точности такими, какими они были. Я заменил