Permalinks para categorías y subcategorías de WooCommerce
14 ene 2018, 02:02:41
Vistas: 18.5K
Votos: 2
Configuración
Estructura de permalinks deseada (solo estas estructuras existen para productos)
Producto 1: /tienda/categoria/subcategoria/producto1/
Producto 2: /tienda/categoria/producto2/
Ajustes de Vista de Productos en WooCommerce
Vista para base de tienda: Mostrar categorías
Vista para categorías: Mostrar productos
Productos
Los productos solo están marcados para una categoría O subcategoría
Ajustes de Permalinks
Ajustes normales: /%categoria%/%nombrepost%/
Base para categorías: tienda
Para productos: /tienda/%categoria_producto%/
Archivos
Como hay más de 100 subcategorías, quiero usar un archivo para listar todos
los productos.
Intentos de solución
Con los siguientes intentos he logrado producir una Página de Producto
funcional pero al hacerlo, también provoco un error 404
en la página de subcategoría. No recuerdo qué opción produce qué resultado.
- He probado diferentes ajustes de permalinks para la base de categorías de productos, incluyendo
%categoria%/%categoria_producto%
,%categoria%/%categoria_producto%/%nombrepost%
,%categoria_producto%/%categoria_producto%
,tienda/%categoria_producto%
,tienda/%categoria_producto%/%nombrepost%
, y todas esas combinaciones anteriores con terminación/.
también - He intentado intercambiar lo anterior con el ajuste de permalink base de tienda.
- He intentado cambiar los Ajustes de Vista de Productos para mostrar subcategorías en lugar de productos.
- He intentado crear páginas para las subcategorías mientras tenía una Página de Producto funcionando, pero la página de subcategoría sigue devolviendo un
404
. - He probado este intento de SO sin éxito.
¿Qué estoy haciendo mal o qué parte puedo reconfigurar para que esto funcione? Muy agradecido por cualquier pista, indicación o respuesta. ¡Gracias por leer esto!
Comentarios
Todas las respuestas a la pregunta
1
0
Pude resolver esto con el siguiente código que genera rewrite_rules para cada subcategoría, lo cual es preferido durante la coincidencia ya que es más específico:
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');

Anton Flärd
49
15 ene 2018 23:45:02
Preguntas relacionadas
3
respuestas