Soporte » Plugins y Hacks » WooCommerce » Contra reembolso solo para una zona de envío

  • Resuelto ethink1

    (@ethink1)


    Hola,
    Tengo dos zonas de envío, por un lado Península (con un precio único) y por otro lado Resto del Mundo (con un precio único también).
    Quiero habilitar el envío a contra reembolso solo para Península, pero en la configuración solo me deja activar para métodos de envío: precio único, envío gratuito o recogida en local. El problema como veis es que en ambas zonas tengo el método de envío de precio único… ¿cómo podría hacer?
    Muchas gracias. Un saludo.

Viendo 10 respuestas - de la 1 a la 10 (de un total de 10)
  • Moderador Fernando Tellado

    (@fernandot)

    Puedes hacerlo con una función como esta:

    function ayudawp_available_payment_gateways( $gateways ) {
    	$chosen_shipping_rates = WC()->session->get( 'chosen_shipping_methods' );
    	// Cuando se elige 'entrega local' o sino cambia al método de envío a tu elección
    	if ( ! in_array( 'local_delivery', $chosen_shipping_rates ) ) :
    		// Quitamos la pasarela de transferencia o cualquier otra que tengas
    		unset( $gateways['cod'] );
    	endif;
    	return $gateways;
    }
    add_filter( 'woocommerce_available_payment_gateways', 'ayudawp_available_payment_gateways' );
    Anonymous User 15528382

    (@anonymized-15528382)

    Grande @fernandot! esta la guardo a buen recaudo 🙂

    Iniciador del debate ethink1

    (@ethink1)

    Muchas gracias Fernando, ¿dónde tendría que meterlo? ¿En functions.php o en otro sitio?

    Moderador Fernando Tellado

    (@fernandot)

    Al ser algo independiente del tema mejor en tu propio plugin de personalizaciones:

    https://ayudawp.com/crea-tu-primer-plugin-wordpress/

    Iniciador del debate ethink1

    (@ethink1)

    ¿Me podrías ayudar con la personalización?
    En mi caso, en lugar de local_delivery, ¿qué tendría que poner? He estado mirando… ¿flat_rate?
    ¿Solo con eso ya estaría?
    Gracias por la ayuda

    Anonymous User 15528382

    (@anonymized-15528382)

    Hola @ethink1, tienes estas opciones por defecto, según utilices:

    Precio fijo: «flat_rate»
    Envío gratuito: «free_shipping»
    Recogida local: «local_pickup»

    Por ejemplo, para el precio fijo:

    function ayudawp_available_payment_gateways( $gateways ) {
    	$chosen_shipping_rates = WC()->session->get( 'chosen_shipping_methods' );
    	// Cambia al método de envío a tu elección
    	// Precio fijo: "flat_rate", Envío gratuito: "free_shipping", Recogida local: "local_pickup"
    	if ( ! in_array( 'flat_rate', $chosen_shipping_rates ) ) :
    		// Quitamos la pasarela de transferencia o cualquier otra que tengas
    		unset( $gateways['cod'] );
    	endif;
    	return $gateways;
    }
    add_filter( 'woocommerce_available_payment_gateways', 'ayudawp_available_payment_gateways' );

    Un saludo!

    Iniciador del debate ethink1

    (@ethink1)

    Muchas gracias por la respuesta pero creo que entonces no me he explicado bien.
    No necesito discriminar el precio fijo, necesito que para Resto del Mundo no se pueda elegir la opción de contrareembolso. Pero para Península si se pueda.
    Ambos tipos de envío tienen precio fijo.
    Saludos

    • Esta respuesta fue modificada hace 2 años, 7 meses por Fernando Tellado. Razón: Anonimizar nombres de usuarios
    Anonymous User 15528382

    (@anonymized-15528382)

    @ethink1 disculpa. Para hacer eso puedes utilizar un plugin que amplía las funcionalidades del contrareembolso:
    https://wordpress.org/plugins/wc-smart-cod/

    Espero que te sea de ayuda!

    Iniciador del debate ethink1

    (@ethink1)

    Muchísimas gracias esto era justo lo que necesitaba!

    • Esta respuesta fue modificada hace 2 años, 7 meses por Fernando Tellado. Razón: Anonimizar nombres de usuarios
    Anonymous User 15528382

    (@anonymized-15528382)

    Fantástico @ethink1! Puedes marcar el debate como «resuelto» 🙂

Viendo 10 respuestas - de la 1 a la 10 (de un total de 10)
  • El debate ‘Contra reembolso solo para una zona de envío’ está cerrado a nuevas respuestas.