Error miga de pan de WooCommerce productos con varias categorías.

shape
shape
shape
shape
shape
shape
shape
shape
error miga de pan WooCommerce

La miga de pan de WooCommerce se genera de forma automática para cada uno de los productos. Pero, en el caso de que un producto tenga más de una categoría asignada, podría generar confusión a la hora de navegar a través de la miga de pan.

Ejemplo del error:

Tienda de ropa en la que los productos pertenecen a varias categorías. Una chaqueta tiene asignada las categorías «punto», «abrigos y chaquetas» y «nueva colección».

Al ver la ficha de la chaqueta, la miga de pan que se muestra puede no ser la de la categoría del menú por la que hemos llegado al producto, confundiendo al usuario.

Si pulsó «nueva colección» y la miga de pan de la ficha de la chaqueta pone «punto», para ver más productos de «nueva colección», no podrá hacerlo desde la miga de pan.

Cómo poner la miga de pan de WooCommerce según procedencia

Para añadir a Woocoomerce una lógica a la hora de generar la miga de podemos añadir el siguiente «filter«. Se encarga de generar una miga de pan a partir de la categoría por la que se accedió al producto.

Lo que hacemos es mirar desde donde se llega a la página de producto.

Si la página de llegada es diferente de la que se va a pintar en el segundo nivel de la miga de pan, troceamos la URL de llegada para recuperar el último fragmento. Con ese fragmento, buscamos en WordPress alguna categoría de producto que coincida con el slug:

  • Si encontramos una, cambiamos el link y el nombre del segundo nivel de la miga de pan por el que acabamos de encontrar.
  • En caso de no encontrar ninguna categoría dejamos la miga exactamente igual.

Este es el código (para la versión del plugin WooCommerce 4.7.0).

Copia el código al final del fichero functions.php (está en la carpeta del tema activo) :


/* Cambiamos el segundo nivel de la miga de pan cuando se entra en un producto 
si la categoría por la que se entra es diferente a la genérica */
add_filter( 'woocommerce_get_breadcrumb', 'woo_custom_category_breadcrum', 20);
function woo_custom_category_breadcrum($breadcrumb) {
	
	if (is_product()) {
		// Si el referido es diferente que la categoria que se va a pintar en la miga de pan
		// Recuperamos la miga de pan desde la que se entró al producto
		if ($_SERVER['HTTP_REFERER'] != $breadcrumb[1][1]) {
			// Recuperamos el último segemento de la url de referido
			$slash = explode('/', $_SERVER['HTTP_REFERER']);
			$slug = isset($slash[sizeof($slash)-2] ) ? $slash[sizeof($slash)-2] : false;
			// Y filtramos las categorías de productos utilizando el slug
			$wp_category = $slug ? get_terms(
				array(
					'slug' => $slug,
					'taxonomy' => 'product_cat',
					'numpost' => 1
				)
			) : [];
			// Si encontramos algún registro lo cambiamos por el genérico
			if (sizeof($wp_category)) {
				list($category) = $wp_category;
				$breadcrumb[1][0] = $category->name;
				$breadcrumb[1][1] = get_term_link( $category->term_id, 'product_cat');
				// Eliminamos las posibles categorias intermedias que tuviera por defecto
				$breadcrumb = array_values(array_filter($breadcrumb, function($key) use ($breadcrumb) {
					return ($key < 2 || sizeof($breadcrumb)-1 == $key);
				}, ARRAY_FILTER_USE_KEY));
			}
		}
	}
    return $breadcrumb;
}

Con esto le devolvemos la funcionalidad lógica a la miga de pan: tener un recorrido por los sitios que hemos pasado, hasta llegar al punto en el que estamos.

¿Pensando en tener una tienda online? ¡te ayudamos! Contacta con nosotros

3 Comments:

  1. Hola! Desde hace dos años llevo un blog más tienda online. No conozco el lenguaje de programación, por lo que descarto siempre incluir código. Pero estoy investigando justo para solucionar que este mecanismo de las migas de pan que hace que cúando un producto está asignado a más de una categoría, redirija al lector a otra diferente a por la que entró. Me traía de cabeza, y la solución que indicas que había ilusionado hasta el punto que, sería el único código que iba a incluir «extra» en mi blog.
    El problema es que me da error de sintáxis, y he podido localizarlo pero, por más que lo intento, leo, investigo, rectifico.. no consigo corregirlo.
    Este sería:

    PHP Syntax Check: Parse error: syntax error, unexpected ‘=’, expecting ‘)’ in your code on line 10
    ‘slug’ =&gt; $slug,

    Por fi, me podrías ayudar?

    Muchisimas gracias.

    1. Hola María, hemos actualizado el código de la entrada, nos nos habíamos dado cuenta que el editor de WP nos había sustituido los caracteres «>» por «&gt;». Copia de nuevo el código y ya funcionará.

      Perdona las molestias y muchas gracias por el aviso.

      Un saludo.

  2. Muchísimas gracias!
    El código está ya en el functions.php de mi tema, y no da ningún error.
    Las migas de pan siguen redirigiendo categoría distinta de la de las consulta, pero creo que puede ser alguna configuración mia incompatible que tengo que investigar (como por ejemplo que tengo el plugin breadcrumb navxt, pese a tener también yoast seo…), o quizás sea porque el código se aplique ya a nuevos productos que vaya subiendo, en cuyo caso como tengo aún pocos los renovaria… A ver si lo puedo hacer pronto, fuera de horas de mi trabajo, y en cuanto lo tenga solucionado, os informo.
    De verdad muchísimas gracias por compartir está Información, que detrás de un código de este tipo no imagino el trabajo que hay.
    Un salud.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

¿Hablamos de tu proyecto web?

Diseño y desarrollo web, diseño gráfico publicitario, hosting, dominios ,fotografía corporativa, marketing en internet.