Cum să rescrii permalinkurile produselor în WooCommerce pentru a utiliza slug-urile categoriilor

29 mai 2019, 11:40:56
Vizualizări: 15K
Voturi: 1

Știu că există informații despre această problemă, dar nu am găsit o soluție complet funcțională.

Am nevoie să utilizez slug-urile categoriilor de produse în permalinkurile produselor, astfel încât linkurile să arate astfel: example.com/laptopuri/un-anumit-laptop

Am selectat opțiunea Bază personalizată în setările de Permalink, am introdus /%product-cat%/ în câmp și am salvat. Apoi am adăugat următorul cod în fișierul functions.php al temei mele:

add_filter('post_type_link', 'category_slug_in_product_permalink', 10, 2);
function category_slug_in_product_permalink($permalink, $post) {

    if($post->post_type == 'product') { 
        // Obține categoriile produsului
        $categories = wp_get_object_terms($post->ID, 'product_cat');
        // Înlocuiește placeholder-ul cu slug-ul categoriei
        $permalink = str_replace('%product-cat%', $categories[0]->slug, $permalink);
    }
    return $permalink;
}

Codul funcționează corect și văd că permalinkurile produselor sunt acum exact cum am nevoie.

Dar când accesez oricare dintre aceste linkuri, primesc eroarea 400 Bad Request. După cum am citit la linkul wordpress.stackexchange.com/a/334902, filtrul post_type_link doar modifică URL-urile, dar "nu schimbă regulile de rescriere și structura permalinkurilor rămâne aceeași".

Deci, cum pot rezolva această a doua parte a problemei?

Am găsit mențiuni despre $GLOBALS['wp_rewrite'], 'slug' => '%...%', 'with_front' => false și altele, dar nu am găsit o soluție complet funcțională sau pur și simplu nu știu cum să utilizez cele existente.

0
Toate răspunsurile la întrebare 2
0

Bine, deci al doilea cod este:

function custom_rewrite_basic() {

    $prodCatArgs = ['taxonomy' => 'product_cat'];
    $wooCats = get_categories($prodCatArgs);
    $catSlugs = [];
    foreach($wooCats as $wooCat) {
        $catSlugs[] = $wooCat->slug;
    }
    add_rewrite_rule(
        '^('.implode('|', $catSlugs).')/([^/]*)/?',
        'index.php?post_type=product&category=$matches[1]&product=$matches[2]',
        'top'
    );
    flush_rewrite_rules();
}
add_action('init', 'custom_rewrite_basic');
30 mai 2019 01:18:12
0

Alternativ, poți folosi plugin-ul meu și să ajustezi permalink-urile produselor direct din panoul de administrare WordPress.

  1. Mai întâi, trebuie să instalezi Permalink Manager Lite din directorul de plugin-uri WordPress.
  2. Apoi, trebuie să mergi la pagina de administrare "Unelte -> Permalink Manager -> Structuri Permalink" și să derulezi în jos la secțiunea "Produse".
  3. Acum, ar trebui să înlocuiești formatul implicit al permalink-ului cu: %product_cat%/%product%
  4. Noile setări de structură a permalink-urilor vor fi aplicate doar la noile produse, dar dacă este necesar, poți regenera permalink-urile vechi în secțiunea "Unelte -> Permalink Manager -> Unelte -> Regenerare/Resetare".

Poți găsi instrucțiunile complete aici: https://permalinkmanager.pro/docs/tutorials/taxonomy-slugs-in-custom-post-type-permalinks/

2 iul. 2019 09:55:37