Ya he hablado otras veces aquí del dropshipping como una forma de montar un ecommerce si necesidad de invertir en stock, lidiar con envíos, tener espacio de almacenaje… Aunque no te creas, no todo son ventajas.
Como principales inconvenientes está la dificultad de encontrar proveedores realmente serios y que apuesten por el dropshipping (al contrario, abundan los que pretenden hacer negocio a costa de los dropshippers), la gestión de RMA, márgenes justos… Pero además hay, a la hora de llevarlo a la práctica, una serie de problemas menores.
Uno de ellos, y que genera más de un calentamiento de cabeza a muchos dropshippers, es la variedad en métodos y costes de envío de un proveedor a otro, algo difícil de aunar en una tienda. Pero hoy vamos a ver una solución para ello en WooCommerce: vamos a ver cómo seleccionar el método de envío en función del proveedor del producto.
Tabla de contenidos
Dropshipping y los gastos de envío según el producto
Y es que lo habitual es trabajar, en un mismo ecommerce, con productos de varios proveedores de dropshipping. Y si uno de ellos realiza envíos por ejemplo 48/72 horas a 2,99€ y otro envíos 24 horas por 4,95€… ¿qué narices ofreces tú en tu tienda?
Lo ideal es, evidentemente, poder establecer diferentes métodos y gastos de envío en función del producto o, mejor dicho, en función del proveedor del producto. Pero claro, eso es más fácil de decir que de conseguir porque, tratándose de dropshipping, cada tienda es un mundo.
Así que básicamente cada uno lo resuelve como puede, y soluciones prefabricadas hay pocas. Una aproximación es establecer el coste de envío en función del producto, como hace este plugin oficial de WooCommerce, pero eso no resuelve el problema más que a medias.
Porque el coste del envío es sólo la primera parte, también hay que tener en cuenta el método de envío. Porque, en el ejemplo de más arriba, ¿qué servicio ofreces? ¿24 horas? ¿48/72 horas? Es, como decía, difícil.
Pero eso no significa que no haya soluciones, que las hay. Es difícil que en WordPress/WooCommerce no haya una solución, aunque se la tenga que hacer uno mismo. Ya te aviso que este artículo es un poco técnico, así que si no controlas PHP y los hooks de WooCommerce, pasa mejor directamente a la última sección.
Gastos de envío según el proveedor del producto en WooCommerce
Bien, encarando el problema hay que solucionar tres cosas:
- De qué proveedor es el producto que está en el carrito
- Qué método/métodos de envío ofrece ese proveedor, para ofrecer éstos al cliente y descartar los demás
- Qué hacer en caso de que el cliente compre productos de más de un proveedor
El tercer punto es otro de esos problemas que se presentan a la hora de hacer dropshipping con varios proveedores, pero cómo hacerlo es más cuestión de forma de trabajar cada uno y de comunicación con el cliente, que de programación. Como vamos a ver, una vez resueltas las dos primeras cuestiones la tercera es trivial (en cuestión de código) y hacerlo de una u otra forma depende de cómo quiera uno organizar las cosas.
Así que vamos a ver cómo resolver estas cuestiones. No voy a dar el código superfluo, claro, los algoritmos los pone cada uno de su cosecha. Pero sí vamos a ver en detalle las partes clave para resolver el plugin, y al final tienes una prueba de concepto que espero te sirva como guía si te ves perdido. Allá vamos.
¿Estás construyendo tu tienda online o eres implementador WordPress?
¿Necesitas plugins de calidad y con soporte para implementar funcionalidades concretas?
Consigue todos los plugins a la venta en la sección de plugins de esta web y todos los que siga añadiendo. Acceso a los 96 plugins (y subiendo) con soporte directo del desarrollador, actualizaciones y uso ilimitado: úsalos en tantas webs como lo necesites.
Establecer el proveedor de cada producto
Esta es la parte más fácil y, como habitualmente ocurre en programación (y en tantas cosas) hay varias posibilidades a la hora de plantearla, pero por eficiencia y sencillez yo las dejaría en dos:
- Utilizar un custom field o campo personalizado
- Registrar una nueva taxonomía para los productos
Utilizar una forma u otra dependerá de cada uno y de dónde se vaya a utilizar. Yo si lo hiciera para mí preferiría utilizar un campo personalizado, ya que son más fácil de manejar a la hora de programar. Es más, ayudándote de Advanced Custom Fields puedes configurar en cosa de dos minutos un selector o un desplegable con los diferentes proveedores para añadirlo en la página de edición del producto. Recuperar el dato es tan fácil como usar la función get_field().
Ahora bien, si lo estás haciendo para un cliente o tiene que manejarlo alguien que no seas tú, no puedes pedirle que actualice las opciones del custom field y el código cada vez que añada un nuevo proveedor. En ese sentido lo mejor es registrar para el post type producto una nueva taxonomía no jerárquica y no pública, de forma que el gestor de la tienda pueda añadir nuevos proveedores. Aquí está la información del Códex para la función register_taxonomy.
Recuperar y procesar las formas de envío disponibles
Y llegamos a la parte interesante del asunto, ya que al fin de lo que estamos hablando es de manejar métodos de envío. Y para ello vamos a utilizar el filtro de WooCommerce woocommerce_package_rates, que recibe un array con, precisamente, los métodos de envío disponibles en función de la localización del comprador y del contenido del carrito.
Eso quiere decir que el array no incluirá los métodos de envío de otras zonas (si ya está establecida la zona del comprador) o el envío gratuito si el contenido del carrito no cumple las condiciones para optar a él.
WooCommerce trabaja con identificadores (evidentemente) para cada tipo y para cada método de envío. Si recorres el array de los métodos de envío disponibles, metiendo cada uno de ellos en la variable $metodo, tendrás:
- El tipo de envío en $metodo->method_id (que será flat_rate, free_shipping o local_delivery). Esto en principio no es fundamental para lo que queremos hacer, pero te puede ser útil establecerlo según lo que necesites.
- El método de envío en $metodo->id (por ejemplo flat_rate:1, flat_rate:2 o free_shipping:3). Éste es el dato que tendrás que filtrar.
Truquito/consejo: para no liarte, puedes declarar constantes al principio del plugin:
define( 'SEUR24', 'flat_rate:1' );
define( 'UPS14', 'flat_rate:2' );
Así que vamos a coger ese array, filtraremos los ID de los métodos de envío y se lo devolveremos a WooCommerce incluyendo sólo los métodos que nos interesen en función de los productos comprados por el cliente y, más concretamente, en función del proveedor de dropshipping para estos productos.
Recuperar el contenido del carrito
Esto ya es un procedimiento bastante más habitual cuando se trabaja con WooCommerce, así que hay abundante documentación. Necesitamos saber qué producto está comprando el cliente, y para ello recuperamos el contenido del carrito con (por ejemplo) WC()->cart->get_cart() o, si hemos declarado la variable global $woocommerce, con $woocommerce->cart->get_cart().
Así tendremos un array con el contenido del carrito, y podemos recorrerlo para recuperar el ID de los productos que hay en él:
foreach (WC()->cart->get_cart() as $carrito => $valores) {
$producto = $valores['data'];
$id_producto = $producto->id;
}
Ahí es donde ya lo unimos todo, comprobando a qué proveedor de dropshipping pertenece cada producto:
$proveedor = get_field ($proveedor, $producto->id);
y utilizamos el dato para filtrar el método de envío.
Prueba de concepto
Si no te ha quedado todo claro aquí tienes una prueba de concepto que te puede ayudar:
Como ves el código es muy sencillo (y que ni siquiera está optimizado, sobran bucles): comprueba si en el carrito está el producto con ID 50, y si es así devuelve como disponible el método de envío flat_rate:2. Si es cualquier otro producto, devolverá el flat_rate:1 (si, efectivamente, está disponible).
Plugin para establecer los métodos de envío en función del proveedor
Actualización: A raíz de este artículo, viendo que no había un plugin que implementara todo esto y que, al fin y al cabo, el código básico ya lo había hecho, me puse manos a la obra y completé el plugin.
No esperes un súper plugin como los de WooThemes: al contrario, lo que hice es un plugin 100% práctico y funcional, sin megas y megas de código superfluo. El resultado lo tienes aquí:
Este plugin te permite establecer proveedores para los productos, y asignar métodos de envío de entre los que tengas creados a cada proveedor para cada zona de envío, además de un proveedor por defecto, que te permite asignar métodos de envío concretos cuando el cliente compra artículos de más de un proveedor o artículos que no tienen proveedor asignado.
Aquí tienes un vídeo de sus funcionalidades y de su uso general:
Angel dice
Buenas tardes Enrique,
Acabo de descubrirte, he montado una woocomerce de productos ecológicos, tengo productos en stock y productos que voy a vender desde el proveedor, por ejemplo «bonsais», aunque me encanta, no contemplo tener stock y la idea es cobrar el envió directo desde vivero, lo esta haciendo ya «planeta huerto» es en quien mas me he fijado, a la web le faltan muchas cosas todavía, la estoy haciendo con un amigo que entiende algo mas, sobre todo de SEO y me ha dicho que me encargue yo de esto, tengo muy poca idea pero aprendo rápido, el plugin que tienes me valdría pero sin la necesidad de hacerlo como «proveedor»? Lo que había pensado era hacerlo por categoría, solo para los bonsais…lo podría hacer por categorías en vez de proveedor? Que opinión me das de la WEB así por encima, no es mi negocio principal y quiero que este negocio a parte de dejarme algo de dinero sirva para ayudar a los mas necesitados, un poco altruista. Saludos
Enrique J. Ros dice
Hola Angel
El plugin utiliza su propia taxonomía proveedor, que puedes establecer de forma independiente a las categorías. Es decir, no hay inconveniente en que asignes un mismo proveedor a todos los productos de una categoría. Esta taxonomía no es visible de ningún modo en la parte pública de la web.
Un saludo.
Angel dice
Buenos días,
Soy yo Ángel, de nuevo, no hay ninguna forma de hacerlo desde la sección de envió?simplemente cuando subas el producto, que te deje una opción para poner el coste del envió extra? Habría que tener en cuenta, si me compran un bonsai y por ejemplo unas bolsas de semillas que tenemos en stock, les tendría que aparecer 2 envíos, el normal por no cumplir con el pedido mínimo para gastos de envíos gratuitos y el del envió desde el vivero? Le puedes echar un vistazo a la web y si crees que podrias cambiar muchas cosas, me puedes dar un presupuesto, hay que estar siempre abierto a mejorar, no puedo gastarme mucho mas de todas formas…
Saludos y buen día !
Enrique J. Ros dice
Hola de nuevo
Eso ya lo hace WooCommerce de base, echa un vistazo al artículo sobre las clases de envío
Un saludo.
Martin dice
Hola Enrique
Estoy armando una tienda multivendedor. El plugin tiene para reconocer automáticamente a medida se registran los vendedores, el código de área de los mismos?? o hay que ir dándoles de alta manualmente a cada vendedor (proveedor) en el sistema?? Gracias
Enrique J. Ros dice
Hola Martin
Estas confundiendo términos y funcionalidades. Los proveedores no tienen relación con los vendors, ni la funcionalidad de dropshipping con la de marketplace.
Un saludo
Pablo dice
Hola enrique
estoy usando dokan para varios vendedores, quiero saber si ese plugin funciona para lo que necesito :
La idea es que por cada vendedor se ofrezca la opción de poner fecha de entrega del pedido en el checkout ya que los plugin que uso para las fechas de entrega aplica para todos los pedidos de diferentes proveedores en conjunto
Gracias
Javi Felices dice
Buenas, Enrique, antes de nada muchas gracias.
Por lo que veo, corrígeme si me equivoco, te pongo un ejemplo, yo pido 3 productos, cada producto es de un proveedor distinto, dos de esos proveedores trabajan con SEUR, por ejemplo, en función del peso y zona tiene unos precios de gastos de envío, y el otro proveedor trabaja con MRW, con otros gastos de envío en función del peso y zona, para el cliente que hace el pedido esto le es ajeno, a la hora de pagar le aparecerá el resultado final de los gastos de envío de estos dos transportistas, y en administración de la tienda, sí reflejará que se usan dos transportistas, ¿verdad? Espero explicarme.
Un saludo y gracias.
Enrique J. Ros dice
Hola Javi
Si el pedido contiene productos de dos o más proveedores, se aplicarán los gastos de envío asignados al proveedor por defecto.
Un saludo
geordani puc dice
Entiendo que en caso de que en mismo carrito de compras hay productos de diferentes proveedores, se cobraria el envio por cada proveedor?