Come riscrivere i permalink dei prodotti in WooCommerce per utilizzare gli slug delle categorie

29 mag 2019, 11:40:56
Visualizzazioni: 15K
Voti: 1

So che esistono informazioni su questo problema, ma non ho trovato una soluzione completamente funzionante.

Ho bisogno di utilizzare gli slug delle categorie di prodotto nei permalink dei miei prodotti, in modo che i link siano del tipo example.com/laptop/alcun-laptop

Ho selezionato l'opzione Base personalizzata nelle mie Impostazioni permalink, ho inserito /%product-cat%/ nel campo e salvato. Poi ho aggiunto il seguente codice al file functions.php del mio tema:

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') { 
        $categories = wp_get_object_terms($post->ID, 'product_cat');
        $permalink = str_replace('%product-cat%', $categories[0]->slug, $permalink);
    }
    return $permalink;
}

Il codice funziona bene e vedo che i permalink dei prodotti sono esattamente come desiderato.

Ma quando clicco su uno qualsiasi dei link, ricevo l'errore 400 Bad Request. Come ho letto nel link wordpress.stackexchange.com/a/334902 il filtro post_type_link cambia solo gli url, ma "non modifica alcuna regola di riscrittura e la struttura dei permalink rimane la stessa".

Quindi come posso risolvere questa seconda parte del problema?

Ho trovato riferimenti a $GLOBALS['wp_rewrite'], 'slug' => '%...%', 'with_front' => false e così via, ma non ho trovato una soluzione completamente funzionante o semplicemente non so come utilizzare quelle esistenti

0
Tutte le risposte alla domanda 2
0

Ok, quindi il secondo codice è:

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 mag 2019 01:18:12
0

In alternativa puoi utilizzare il mio plugin e modificare i permalink dei prodotti direttamente dalla dashboard di amministrazione di WordPress.

  1. Per prima cosa, devi installare Permalink Manager Lite dalla directory dei plugin di WordPress.
  2. Poi devi andare nella pagina di amministrazione "Strumenti -> Permalink Manager -> Permastrutture" e scorrere fino a "Prodotti".
  3. Ora dovrai sostituire il formato predefinito del permalink con: %product_cat%/%product%
  4. Le nuove impostazioni delle permastrutture verranno applicate solo ai nuovi prodotti, ma se necessario puoi rigenerare i vecchi permalink dei prodotti nella sezione "Strumenti -> Permalink Manager -> Strumenti -> Rigenera/Reimposta".

Puoi trovare le istruzioni complete qui: https://permalinkmanager.pro/docs/tutorials/taxonomy-slugs-in-custom-post-type-permalinks/

2 lug 2019 09:55:37