Cómo reescribir los enlaces permanentes de productos en Woocommerce para usar slugs de categoría

29 may 2019, 11:40:56
Vistas: 15K
Votos: 1

Sé que hay información sobre este problema, pero no encontré una solución completa que funcione.

Necesito utilizar los slugs de categoría de producto en mis enlaces permanentes para que las URLs queden como example.com/portatiles/algún-portátil

Seleccioné la opción Base personalizada en mis Ajustes de Enlaces Permanentes, escribí /%product-cat%/ en el campo y guardé. Luego agregué el siguiente código al archivo functions.php de mi 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;
}

El código funciona bien y veo que los enlaces permanentes de productos ahora son exactamente como los necesito.

Pero cuando hago clic en cualquiera de los enlaces, recibo el error 400 Bad Request. Según leí en el enlace wordpress.stackexchange.com/a/334902 el filtro post_type_link solo cambia las URLs, pero "no cambia ninguna regla de reescritura y la estructura de los enlaces permanentes sigue siendo la misma".

Entonces, ¿cómo puedo resolver esta segunda parte del problema?

Encontré menciones sobre $GLOBALS['wp_rewrite'], 'slug' => '%...%', 'with_front' => false y similares, pero no encontré una solución completa que funcione o simplemente no sé cómo usar las existentes

0
Todas las respuestas a la pregunta 2
0

Bien, entonces el segundo código es:

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

Alternativamente, puedes usar mi plugin y ajustar los enlaces permanentes de los productos directamente desde el panel de administración de WordPress.

  1. Primero, necesitas instalar Permalink Manager Lite desde el Directorio de Plugins de WordPress.
  2. Luego, debes ir a la página de administración "Herramientas -> Permalink Manager -> Permaestructuras" y desplazarte hasta "Productos".
  3. Ahora, deberías reemplazar el formato de enlace permanente predeterminado con: %product_cat%/%product%
  4. Los nuevos ajustes de permaestructura se aplicarán solo a los nuevos productos, pero si lo necesitas, puedes regenerar los enlaces permanentes de los productos antiguos en la sección "Herramientas -> Permalink Manager -> Herramientas -> Regenerar/Reiniciar".

Puedes encontrar las instrucciones completas aquí: https://permalinkmanager.pro/docs/tutorials/taxonomy-slugs-in-custom-post-type-permalinks/

2 jul 2019 09:55:37