Crear un marketplace en WordPress

Un marketplace es una tienda en la que otros vendedores venden sus productos. Por tanto, no hace falta tener producto ni stocks, ya que son los vendedores los que lo asumen. La financiación del modelo de negocio es por comisión de cada venta.

Para montar un marketplace en WordPress, tenemos varias opciones. De todas ellas, la que considero más recomendable por contar con versión vitalicia y completitud de opciones es WCVendor. No obstante, al final de este artículo tienes una relación de otras opciones disponibles.

WC Vendors

Una ventaja de esta extensión frente a la de woocommerce, es que cuenta con licencia vitalicia.

Para usarla, habrá que instalar la versión gratuita del plugin (https://wordpress.org/plugins/wc-vendors/) y luego la versión pro (https://www.wcvendors.com/) si quieres acceder a algunas características premium, como tener un area de administración de los productos en el frontend, sin tener que pasar por el backend.

Tras activar estas extensiones, tendremos dos nuevos perfiles de usuario: Vendor y Pending Vendor.

Cuando accedemos al área de administración de la web como vendedor, tendremos algunas opciones específicas de este perfil.

Crear un marketplace en Wordpress 1

Membresía

Para que los vendedores de la tienda paguen una suscripción mensual por estar afiliados a la misma es necesario instalar los plugins:

Crear un marketplace en Wordpress 2
  • Wc Vendor membership. Permite establecer membresías para que los vendedores que ponen sus productos en la tienda hagan un pago recurrente por usar este servicio. WC Vendor membership no permite añadir decimales a las cuotas de las membresías. Enlace a la documentación oficial. La sección donde introduciremos el código de licencia de nuestro producto esta algo escondido. Estará en el menú Ajustes WCVendors Membership License.

Vincular una membresía a un usuario registrado

  • Vinculación realizada por el administrador

Woocommerce Suscripciones Añadir suscripción

  • Vinculación realizada por el propio usuario registrado

Un usuario normal no puede convertirse en vendedor con membresía. Primero deberá solicitar ser vendedor y su solicitud debe ser aceptada.

Al contrario de lo que pudiera parecer inicialmente, esta acción no se podrá hacer desde la página del producto correspondiente a la membresía. Esta página no tendrá botón de comprar.

Durante el proceso de registro: El administrador de la cuenta deberá marcar la check WcVendorsSettings →  Redirect vendors applications to the registration form.

Para que un usuario pueda convertirse en vendedor con una membresía, tendrá un menú de membersías en su página de perfil de Woocommerce.

Si el usuario quiere realizar el pago de la membresía realizando una transferencia bancaria o pagándola con MangoPay necesitará activar las renovaciones manuales para que estos métodos de pago aparezcan disponibles (Woocommerce Ajustes Membresías Aceptar las renovaciones manuales).

Despúes de haber hecho la compra, el pedido aparecerá en la página de pedidos de Woocommerce del área de administración.

Un usuario no puede cambiar de membresía. Para cambiar de membresía será necesario que cancele su membresía actual y contrate otra.

Cuando un usuario cree su membresía, aunque esta no haya sido activada, podrá acceder al área de administración

Reordenar las membresías

La última membresía en salvarse es la que aparecerá antes. Por tanto para reordenarlas, debemos tener este criterio en cuenta.

Hacer que un membresía sea requerida

Menú WC Vendors → Ajustes → General → Membership → Membership required → Require all vendors to have a valider membership.

Añadir un nuevo producto

Una vez logueados como vendedores, es posible, añadir productos tanto desde el frontend como desde el backend. Sin embargo, para que tengamos todas las opciones de producto disponibles (como la adicción de atributos) será necesario seguir estos pasos:

 WC Vendors → Settings → Forms → Product → Product Form → Producto Standard.

Si queremos eliminar o cambiar el orden de las pestañas que aparecen en la página de añadir producto, usaremos el siguiente código:

add_filter('wcv_product_meta_tabs', 'wcv_change_product_tab_order_manual');
function wcv_change_product_tab_order_manual($tabs)
{
	WC_Vendors::log(array_keys($tabs));
	$new_tabs = array();
	$new_tabs['general'] = $tabs['general'];
	$new_tabs['attribute'] = $tabs['attribute'];
	$new_tabs['seo'] = $tabs['seo'];
	$new_tabs['shipping'] = $tabs['shipping'];
	$new_tabs['inventory'] = $tabs['inventory'];

	$new_tabs['variations'] = $tabs['variations'];
	$new_tabs['linked_product'] = $tabs['linked_product'];
	return $new_tabs;
}

Sobreescribir las plantillas del plugin

Esto nos puede servir, por ejemplo, para añadir un nuevo campo dentro del área de administración del vendedor. En este enlace, tienes la documentación sobre como sobreescribir dichas plantillas.

No obstante, cuando quieres sobreescribir algún fichero del plugin dentro de tu plantilla, en la parte superior del fichero que quieres sobreescribir, se indica expresamente en que ruta debes colocar el fichero sobreescrito.

Crear un marketplace en Wordpress 3

Ocultar / mostrar o modificar campos de las secciones de tienda y producto

WC Vendors → Ajustes → Forms → Product, Ajustes

Para ocultar algunos campos no hay opciones visuales disponibles y deberemos editar el functions.php:

add_filter( 'wcv_product_length', 'disable_field' );
add_filter( 'wcv_product_width', 'disable_field' );
add_filter( 'wcv_product_height', 'disable_field' );
add_filter( 'wcv_product_weight', 'disable_field' );

function disable_field( $field ){
   return array();
}

Otros elementos de la página deberán modificarse editando las plantillas product-edit.php (plugins/wc-vendors-pro/templates/dashboard/product-edit.php) y store-settings.php.

Añadir un nuevo campo a la página de vendedor:

store-settings.phop
<div class="tabs-content" id="monteserin_nif">
     <?php addNIFField(); ?>
</div>
functions.php
function addNIFField()
{
	if (class_exists('WCVendors_Pro')) {
		$key = '_wcv_custom_settings_bankname';
		$value = get_user_meta(get_current_user_id(), $key, true);
		// Bank Name
		WCVendors_Pro_Form_Helper::input(
			array(
				'id' 				=> $key,
				'label' 			=> __('NIF', 'wcvendors-pro'),
				'placeholder' 			=> __('53535353W', 'wcvendors-pro'),
				'desc_tip' 			=> 'true',
				'description' 			=> __('', 'wcvendors-pro'),
				'type' 				=> 'text',
				'value'				=> $value,
				custom_attributes => array('required' => ''),
			)
		);
	}
}

Cambiar la cabecera de la página de vendedor

Podemos cambiar la imagen por defecto de la tienda de vendedor yendo al menú WC Vendors → Ajustes → Display → Marca.

También podremos seleccionar una cabecera más moderna en WC Vendors → Ajustes → General → Ajustes de la tienda → Shop Header → Pro Modern.

Creación de nuevas cuentas

Un nuevo usuario todavía no puede vender. Debe darse de alta como vendedor. Para que el usuario pueda definir su contraseña en el momento de darse de alta, y no mediante un correo electrónico, desmarcaremos la siguiente check en Woocommerce → Cuentas y privacidad →

Crear un marketplace en Wordpress 4

Soporte

El servicio de soporte al cliente es muy bueno. Contestan rápido y suelen dar soluciones. Puedes utilizarlo en este enlace.

Pages and shortcodes

Los tienes en este enlace.

Configuración de la página de vendedor

Configurar las páginas de la tienda (necesario configurar en una página multiidioma)

WC VendorsSettings Display

Mostrar información de la tienda en la página de la tienda

 WC VendorsSettings Display → Bajo la sección Configuración de la tienda.

afda83b832610f29f1cf6d166e5dd346.png

Aceptar manualmente la candidatura de vendedores

Menú WC Vendors → Ajustes → General → Vendedor Approval → Manually approve all vendedor applications

Aceptar manualmente la publicación de productos

Menú WC Vendors → Ajustes Capacidades General Allow vendors to publish products directly to the marketplace without requiring approval.

Error frecuente

Cuando utilizas este plugin, los usuarios con perfil de administrador no pueden ser además vendedores de la tienda. Sin embargo, si que podrán dar productos de alta. Esto es un error de coherencia, ya que cuando el usuario pulse sobre el enlace para ir a la tienda del vendedor, se econtrará con que realmente no será un enlace que le lleve a la tienda del vendedor, ya que el vendedor-administrador no puede ser vendedor y por tanto no tendrá página de tienda.

Cambiar la imagen del logo de la tienda y el banner de la tienda

Crear un marketplace en Wordpress 5

Traducción con WPML

Si queremos que todos los productos esten disponibles en ambos idiomas sin que cada vendedor se encargue de hacer las traducciones de cada producto, tendremos que hacer que cada producto se duplique automáticamente para todos los idiomas en el momento de ser creado. Para ello, podemos utilizar el siguiente código:


add_action('wp_insert_post', 'my_duplicate_on_publishh');
function my_duplicate_on_publishh($post_id)
{

	$post = get_post($post_id);

	// don't save for autosave
	if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
		return $post_id;
	}
	// dont save for revisions
	if (isset($post->post_type) && $post->post_type == 'revision') {
		return $post_id;
	}


	if (isset($post->post_type) && $post->post_type == 'product') {

		// we need this to avoid recursion see add_action at the end
		remove_action('wp_insert_post', 'my_duplicate_on_publishh');

		// make duplicates if the post being saved
		// #1. itself is not a duplicate of another or
		// #2. does not already have translations

		$is_translated = apply_filters('wpml_element_has_translations', '', $post_id, $post->post_type);

		if (!$is_translated) {
			do_action('wpml_admin_make_post_duplicates', $post_id);
		}
	}
	// must hook again - see remove_action further up
	add_action('wp_insert_post', 'my_duplicate_on_publishh');
}

El código anterior se encargará de duplicar los nuevos productos. Nosotros deberemos encargarnos de traducir manualmente los productos que ya estaban antes de pegar el código.

MangoPay

Es una pasarela de pago como Stripe o PayPal. Tiene la ventaja de que permite que cuando un cliente compra un producto a un vendedor el dinero puede ser retenido hasta que el comprador reciba el producto. De tal forma que sólo en ese momento el vendedor reciba el dinero.

El plugin de MangoPay para WordPress únicamente se integra con WcVendors.

Aquí tienes su API: https://docs.mangopay.com/endpoints/

Configuración

Tras instalar un plugin, aparecerá un nuevo menú: MANGOPAY. Al acceder a él, podremos introducir los datos y claves disponibles en nuestra cuenta de usuario de mangopay.

Para que durante el proceso de compra seamos redirigidos a una página de Mango Pay en la que introducir nuestros datos de pago será necesario ir a Menú Woocommerce Ajustes Pagos Use this page for payment templateUse payment form on the bank (default).

Si el usuario quiere realizar el pago de la membresía con MangoPay necesitará activar las renovaciones manuales para que este método de pago aparezca disponible (Woocommerce Ajustes Membresías Aceptar las renovaciones manuales).

Crear un marketplace en Wordpress 6

Errores con los hooks

Si llegase un correo con un texto similar a este:

Please note that we are getting trouble accessing your Hook URL. It is the 10th notification attempt failed. Here is the concerned hook:

Probablemente debamos actualizar la url de los hooks logueándonos en el área de administración de MangoPay → Página de Manage your API keys → WebHooks → actualizando la url de los hooks.

Uso

Para que un usuario pueda utilizar la pasarela de pago de MangoPay es necesario que tenga rellenados los campos Fecha de cumpleaños y nacionalidad en su perfil de usuario. Estos campos son preguntados automáticamente al usuario en el momento de hacer el checkout.

Modo testing

Puedes probrar mangopay con los siguientes datos de prueba: https://docs.mangopay.com/guide/testing-payments

Habilitar MangoPay para la compra de productos y Stripe para las suscripciones

En el momento de escribir estas líneas, Mango Pay no soporta el cobro recurrente de una suscripción, pero MangoPay si. Por tanto, para deshabilitar MangoPay en las suscripciones y deshabilitar StripeConnect (el plugin de WcVendors) en la compra de productos, deberemos editar el functions.php con el siguiente código:


add_filter('woocommerce_available_payment_gateways', 'conditional_payment_gateways', 10, 1);

function conditional_payment_gateways($available_gateways)
{

	//var_dump($available_gateways);
	// Not in backend (admin)

	if (is_admin())

		return $available_gateways;



	$prod_variable = $prod_simple = $prod_subscription = false;

	foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {

		// Get the WC_Product object

		$product = wc_get_product($cart_item['product_id']);

		// Get the product types in cart (example)

		if ($product->is_type('simple')) $prod_simple = true;

		if ($product->is_type('variable')) $prod_variable = true;

		if ($product->is_type('subscription')) $prod_subscription = true;
	}

	// Remove Cash on delivery (cod) payment gateway for simple products

	if ($prod_simple)
		unset($available_gateways['stripe-connect']); // unset 'bacs'


	// Remove Paypal (paypal) payment gateway for variable products
	/*
	if ($prod_variable)

		unset($available_gateways['paypal']); // unset 'paypal'
*/
	// Remove Bank wire (Bacs) payment gateway for subscription products

	if ($prod_subscription)
		unset($available_gateways['mangopay']); // unset 'cod'




	return $available_gateways;
}

Otros plugins de marketplace

Woocommerce Product Vendor

Pasos para instalar y configurar el marketplace

1. Instalamos Woocommerce.

2. Instalamos y activamos Woocommerce Product Vendor.

3. Se añade la sección Woocommerce → Settings → Products → Vendors.

Algunos términos:

Vendor: Es el vendedor que vende los productos y del que sustraeremos una comisión en cada venta.

Payout Schedule: Cada cuanto tiempo daremos al vendedor su correspondiente parte por la venta de un producto. Hay que tener cuidado con las devoluciones de productos que nos hagan, porque si ya hemos pagado al vendedor puede ser problemático reclamarle el ingreso que le hemos hecho.

Default Commission y Commision Type: Definen la cantidad que nos vamos a quedar nosotros como intermediarios por cada venta.

Opciones Display: Nos permiten activar o desactivar la información de cada vendedor que será mostrada en el Woocommerce.

Registro de vendedores

Creamos una nueva página para el restrio de vendors y le añadimos este shorcode:

[wcpv_registration]

Luego, por cada nuevo usuario que se registre, tendremos que ir al Menú Usuarios y cambiar su role de Pending Vendor a Vendor Admin.

Cuando el vendor se loguee a través del formulario de login de Woocomerce, tendrá en la sección Mi cuenta un enlace para administrar sus productos, ganancias, etc.

Cada vez que un vendor cree un nuevo producto, este será enviado para revisión y el administrador de la página será el que finalmente lo publique.

Si queremos que un vendor pueda publicar un producto directamente sin necesidad de revisión iremos a Vendor → Seleccionamos el vendor concreto → Vendor Management → Publish Products → Allow.

Si quisieramos que el vendor pudiese cambiar las condiciones de envío individualmente, en función del producto, habrá que instalar una extensión.

Dokan

Dokan no permite añadir decimales a las cuotas de las membresías.

YITH

Para convertir nuestro Woocommerce en un marketplace, debemos usar https://yithemes.com/themes/plugins/yith-woocommerce-multi-vendor/.

Para poder establecer membresías utilizaremos https://yithemes.com/themes/plugins/yith-woocommerce-multi-vendor/.

Para que el pago de estas membresías sea recurrente (mensual o anualmente), utilizaremos https://yithemes.com/themes/plugins/yith-woocommerce-subscription/.

Es posible limitar el número de productos a subir por membresía, pero no el número de fotos. Es posible establecer comisiones por producto, por vendedor, pero no por membresía.

WCFM Marketplace

La interfaz de uso no se integra bien con Woocomerce. No lo veo muy actualizado. Seguí un videoturial y lo que explicaba en el video tutorial no se correspondía con lo que yo estaba viendo.