web-dev-qa-db-ja.com

WooCommerceのカテゴリとサブカテゴリのパーマリンク

セットアップ

望ましいパーマリンク構造(製品にはこれらの構造だけが存在します)

Product 1: /shop/category/subcategory/product1/
Product 2: /shop/category/product2/

Woocommerce商品ビュー設定

View for shopbase:     Show categories
View for categories:   Show products

商品

Products are only checked for one category OR subcategory

パーマリンク設定

Normal settings:       /%category%/%postname%/
Base for categories:   shop
For products:          /shop/%product_cat%/

アーカイブ

Since there are over 100 subcategories, I want to use an archive to list all 
the products.

解決しようとする試み

以下の試みで私は実用的なProduct-pageを作り出すことができました、しかしそうしている間、404:ingもサブカテゴリページです。どのオプションがどのような結果をもたらすのか思い出せません。

  1. %category%/%product_cat%%category%/%product_cat%/%postname%%product_cat%/%product_cat%shop/%product_cat%shop/%product_cat%/%postname%、および末尾が/.であるすべての組み合わせを含む、製品カテゴリベースのさまざまなパーマリンク設定を試してみました
  2. 私はベースショップのパーマリンクの設定と上で交換してみました。
  3. 商品の代わりにサブカテゴリを表示するように商品の表示設定を変更してみました。
  4. 商品ページが機能している間にサブカテゴリのページを作成しようとしましたが、サブカテゴリページはまだ404を返します。
  5. 私は試してみました このSO試み 運なしで。

私は何をしているのでしょうか、それともこの部分を機能させるためにどの部分を再配線すればよいのでしょうか。どんなヒントや見込みまたは回答にもとても素晴らしいです。これを読んでくれてありがとう!

1
Anton Flärd

各サブカテゴリに対してrewrite_rulesを生成する次のコードを使用してこれを解決することができました。これは、より具体的であるため、マッチング中に推奨されます。

function wpse_291143_generate_taxonomy_rewrite_rules( $wp_rewrite ) {

    global $wp_rewrite;
    $base = "shop";

    $rules = array();
    $terms = get_terms( array( 'taxonomy' => 'product_cat', 'hide_empty' => false ));

    foreach($terms as $term) {
        $term_children = get_terms( array(
            'taxonomy' => 'product_cat',
            'parent' => intval($term->term_id),
            'hide_empty' => false
            )
        );
        if($term_children) {
            foreach ( $term_children as $term_child ) {
                $rules[$base . '/' . $term->slug . '/' . $term_child->slug . '/?$'] = 'index.php?product_cat=' . $term_child->slug;
            }
        }
    }

    $wp_rewrite->rules = $rules + $wp_rewrite->rules;
    return $wp_rewrite->rules;
}

add_action('generate_rewrite_rules', 'wpse_291143_generate_taxonomy_rewrite_rules');
2
Anton Flärd