WooCommerce - Mostrar costo de envío en la página de producto

6 oct 2013, 21:14:26
Vistas: 30.3K
Votos: 4

Estoy desarrollando un sitio de comercio electrónico usando WooCommerce para un cliente, y quieren poder mostrar el costo de envío de un producto en la página del producto (porque es lo que tienen en su antiguo sitio web). ¿Hay alguna manera de hacer esto? He estado buscando y no puedo encontrar nada definitivo, y aunque hay una pregunta similar aquí en StackExchange, nadie ha respondido la pregunta.

Sé que existe un plugin de $79 para hacer esto, pero ¿hay alguna manera de establecer el costo de envío por artículo también? Preferiría evitar comprar un plugin.

0
Todas las respuestas a la pregunta 2
8

Puedes mostrar los costos de envío por artículo en WooCommerce 2.x. Mostrar costos de envío en WooCommerce

Como has configurado los precios como fijos y por artículo, puedes mostrarlos en la descripción del producto simplemente escribiéndolos allí, o puedes acceder a la clase de envío del artículo (es una taxonomía) "product_shipping_class" que se puede asignar a cada producto individualmente o mediante edición rápida a todos los productos.

¿Cómo mostrarlo en una plantilla de producto? Cada página de producto está dividida en un directorio llamado woocommerce. Puedes copiar ese directorio desde el directorio del plugin de WooCommerce directamente a tu carpeta de tema. Una vez allí, puedes hacer cualquier cambio sin que futuras actualizaciones sobrescriban los cambios en tu tema. Aquí está el enlace a las instrucciones para archivos de tema de WooCommerce.

Comienzas con la página 'single-product.php'. Este es el bucle principal para la página de producto individual, y luego 'content-single-product.php' que detalla los hooks dentro de la plantilla del producto.

Dependiendo de dónde quieras mostrar la información de envío, ahora puedes acceder a los términos asignados al producto (en caso de que tengas diferentes tarifas para diferentes productos). Usa get_the_terms( $post->ID, 'product_shipping_class'). Para más información sobre cómo trabajar con esto, consulta esta publicación.

Usando algo de PHP para analizar el array, conocerás la clase de envío y luego podrás mostrar información sobre los costos de envío con un cálculo basado en la clase de envío devuelta.

Hay algunas formas más de hacer esto que involucran el objeto de clase de envío, pero esto debería ser suficiente para empezar.

6 oct 2013 22:26:31
Comentarios

Gracias por eso Steve, solo una pregunta de seguimiento - he usado ese fragmento/llamada que pusiste arriba adaptándolo para crear una variable primero y luego mostrar la variable en el lugar correcto de la plantilla. Sin embargo, solo imprime la palabra 'Array'. Mi PHP no es muy bueno, así que no estoy seguro de cómo proceder desde aquí. En WC, he creado una Clase de Envío para cada precio (Entrega: £3.00, Entrega: £4.00 etc), y he asignado un costo a ellas en la sección de Envío de los ajustes.

tristanojbacon tristanojbacon
7 oct 2013 05:12:26

Intenta imprimir la variable con var_dump($variable). Deberías ver qué hay dentro del array. Luego puedes llamar a los elementos específicos por su estructura de array.

Steve Eldridge Steve Eldridge
7 oct 2013 17:54:07

Hice un var_dump, pero imprimió bool(false).....

tristanojbacon tristanojbacon
7 oct 2013 17:59:51

Vale, ¿has asignado una clase de envío a los artículos?

Steve Eldridge Steve Eldridge
7 oct 2013 20:41:01

Sí, el artículo con el que probé esto tiene una clase de envío llamada Entrega: £3.00, que he vinculado a la tabla de tarifas planas de envío, con un coste de £3.00. He confirmado que esto funciona, porque cuando añado el artículo al carrito, el coste de envío muestra £3.00

tristanojbacon tristanojbacon
7 oct 2013 21:17:07

Además, hay una solución en la clase de $product. Necesitas asegurarte de llamar al global $product. Puedes llamar a las clases con el código php echo $product->get_price_html(); para ver la clase del producto en las páginas de producto.

Steve Eldridge Steve Eldridge
8 oct 2013 23:28:33

Ok, entonces agregué <?php echo $product->get_shipping_class(); ?> al template, ¡y muestra el slug de la clase de envío! ¡Estoy muy cerca! ¿Cómo hago para que esa llamada muestre el nombre del término en lugar del slug? Gracias por tu ayuda hasta ahora :)

tristanojbacon tristanojbacon
9 oct 2013 04:08:02

ok, tan cerca y aquí está la respuesta final, <?php $slug = $product->get_shippingclass(); $slugobject = get_term_by('slug', $slug, 'product_shipping_class'); echo $slugobject->name; ?>

Steve Eldridge Steve Eldridge
10 oct 2013 01:07:47
Mostrar los 3 comentarios restantes
1

Publicación antigua pero podría ayudar a mostrar el precio del costo de envío

<?php
$slug = $product->get_shipping_class_id();
$slugobject = get_term_by('term_taxonomy_id', $slug, 'product_shipping_class');
echo $slugobject->description;?>

Este script funcionará para el tipo de envío tarifa plana:

global $product; /* Eliminar si ya está configurado... */
$shipping_class = $product->get_shipping_class();
$flat_rate = new WC_Shipping_Flat_Rate;
$symbol = get_woocommerce_currency_symbol();
echo $symbol . $flat_rate->flat_rates[$shipping_class]['cost'];
3 feb 2015 12:06:41
Comentarios

Esto ya no funciona en WooCommerce 2.6+

Avishai Avishai
1 feb 2017 20:30:04