Wordpress URL Rewrite для синхронизации пользовательской таксономии и типа записи - PullRequest
0 голосов
/ 28 апреля 2019

Вот мои текущие URL для моего пользовательского типа поста и таксономии.Я заметил, что перезаписываемый слаг для пользовательского типа поста и таксономии не может быть «инвентарным» или ломаться.Итак, я выбрал «инвентарную категорию» и «инвентарь».

текущие URL:

категория http://localhost:3000/inventory-category/actual-category-name/

один http://localhost:3000/inventory/product-title

Я хочу:

категория http://localhost:3000/inventory/actual-category-name/

один http://localhost:3000/inventory/actual-category-name/product-title

Итак, у меня 2 вопроса

  1. Как получить тип записи и таксономию, чтобы они совместно использовали один и тот же URL-адрес «инвентарь» вместо использования «инвентарь-категория».

  2. Как мне заставить сингл использовать фактическое название категории?Таким образом, это может быть:

http://localhost:3000/inventory/cars/product-title

http://localhost:3000/inventory/trucks/product-title

// register a new list of categories for custom post type
function so_inventory_categories() {
    $args = array(
        'hierarchical'       => true,
        'show_ui'            => true,
        'show_admin_column'  => true,
        'query_var'          => true,
        'public'             => true,
        'publicly_queryable' => true,
        'rewrite'            => array('with_front' => false, 'slug' => 'inventory-category'),
    );

    register_taxonomy( 'inventory_categories', array( 'inventory' ), $args );
}
add_action( 'init', 'so_inventory_categories' );

function so_posttype_inventory() {
    $args = array(
        'labels'              => ['name'=>'Inventory'],
        'supports'            => array( 'title', 'editor' ),
        'taxonomies'          => array( 'inventory_categories' ),
        'hierarchical'        => false,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'show_in_nav_menus'   => true,
        'show_in_admin_bar'   => true,
        'menu_position'       => 5,
        'can_export'          => true,
        'has_archive'         => false,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'capability_type'     => 'page',
        'rewrite'             => array('with_front' => false,'slug' => 'inventory'),
        'menu_icon'           => 'dashicons-plus-alt',
    );
    register_post_type( 'inventory', $args );
}

add_action( 'init', 'so_posttype_inventory', 0 );

1 Ответ

1 голос
/ 28 апреля 2019

Вы должны использовать правила перезаписи, чтобы это работало.Примерно так:

add_action('init', 'custom_rewrite_basic');
function custom_rewrite_basic() {
    add_rewrite_rule('^inventory/([^/]+)/?$', 'index.php?taxonomy=inventory_category&inventory_category=$matches[1]', 'top');
    add_rewrite_rule('^inventory/([^/]+)/([^/]+)/?$', 'index.php?post_type=inventory&inventory=$matches[2]', 'top');
}

Я не проверял это, так что, возможно, все еще потребуется некоторая настройка.

...