it-swarm.com.de

Permalinks für WooCommerce Kategorien und Unterkategorien

Konfiguration

Gewünschte Permalink-Struktur (nur diese Strukturen existieren für Produkte)

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

Einstellungen für die Woocommerce-Produktansicht

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

Produkte

Products are only checked for one category OR subcategory

Permalink-Einstellungen

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

Archive

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

Versuche zu lösen

Mit den folgenden Versuchen konnte ich einen funktionierenden Product-page erstellen, aber dabei auch 404:ing die Unterkategorieseite. Ich kann mich nicht erinnern, welche Option zu welchem ​​Ergebnis führt.

  1. Ich habe verschiedene Permalink-Einstellungen für die Produktkategoriebasis ausprobiert, einschließlich %category%/%product_cat%, %category%/%product_cat%/%postname%, %product_cat%/%product_cat%, shop/%product_cat%, shop/%product_cat%/%postname% und all dieser Kombinationen mit der Endung /.
  2. Ich habe oben versucht, mit der Permalink-Einstellung des Basisshops zu tauschen.
  3. Ich habe versucht, die Einstellungen für die Produktansicht zu ändern, um Unterkategorien anstelle von Produkten anzuzeigen.
  4. Ich habe versucht, Seiten für die Unterkategorien zu erstellen, während eine funktionierende Produktseite vorhanden ist. Die Unterkategorieseite gibt jedoch immer noch einen 404 zurück.
  5. Ich habe diesen SO Versuch ohne Glück versucht.

Was mache ich falsch oder welchen Teil kann ich neu verdrahten, damit dies funktioniert? So dankbar für Hinweise oder Hinweise oder Antworten. Vielen Dank für das Lesen!

1
Anton Flärd

Ich konnte dies mit dem folgenden Code beheben, der rewrite_rules für jede Unterkategorie generiert, was beim Matching bevorzugt wird, da es spezifischer ist:

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