Soporte » Plugins y Hacks » WooCommerce » Ocultar métodos de Pago segun ENVIO

  • Resuelto borjagrd

    (@borjagrd)


    Hola, me gustaría poder ocultar el método de pago según el método de envio que escoja el cliente.

    Ya son varios los que me han hecho la jugada de escoger envio ordinario (el cual yo advierto que no me hago responsable si no llega el paquete) y seleccionar como método de pago PayPal. Al poco tiempo reclaman a paypal que no les llego nada y PayPal les devuelve el dinero. El mismo PayPal me dijo que ocultara su método de pago para envios ordinarios ya que iba a ser de nuevo victima de futuras estafas. y en situaciones como estas, el vendedor tiene todas las de perder.

    Resumiendo: Ocultar PayPal como metodo depago si el cliente selecciona previamente envio ordinario.

    Gracias.

    La página con la que necesito ayuda: [accede para ver el enlace]

Viendo 10 respuestas - 1 de 10 (de 10 total)
  • Moderador LGrusin

    (@lgrusin)

    ¿Cuál es el método de envío ordinario? ¿Es un método personalizado?
    Lo digo porque no sale entre los métodos de envío por defecto de WooCommerce. Se necesita un ID único para cada método y habría que averiguar cuál es.

    Un saludo

    Hola @lgrusin, lo primero de todo gracias por tu ayuda y por prestarme tu tiempo.

    Woocommerce / Ajustes / Envio / Envio Local

    Es en «Envio Local» donde personalize el «envio ordinario».

    Moderador LGrusin

    (@lgrusin)

    Prueba el siguiente código en el archivo functions.php del tema:

    <?php
    add_filter( 'woocommerce_available_payment_gateways', 'bbloomer_gateway_disable_shipping_326' );
     
    function bbloomer_gateway_disable_shipping_326( $available_gateways ) {
     global $woocommerce;
     if ( !is_admin() ) {
      $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
      $chosen_shipping = $chosen_methods[0];
            
      if ( isset( $available_gateways['paypal'] ) && 0 === strpos( $chosen_shipping, 'local_pickup' ) ) {
       unset( $available_gateways['paypal'] );
       }
     }
    return $available_gateways;
    }
    ?>

    Esto lo que hace es que en el Envío local (envío ordinario) no se pueda escoger PayPal.

    Un saludo

    He probado con el codigo y me devuelve el siguiente error:

    Warning: Cannot modify header information – headers already sent by (output started at /homepages/0/d608582226/htdocs/clickandbuilds/KiwiCool/wp-content/themes/shop-isle-hijo/functions.php:9) in /homepages/0/d608582226/htdocs/clickandbuilds/KiwiCool/wp-includes/pluggable.php on line 1216

    después de eliminar el código, el mensaje sigue apareciendo y no me deja acceder a mi WP. ¿Alguna idea?

    Moderador LGrusin

    (@lgrusin)

    El archivo functions.php debe empezar por
    <?php
    y no debe contener espacios ni líneas vacías delante.

    Revisa bien todo no sea que te hayas equivocado al teclear. Puedes comparar con un archivo functions.php original.

    Deja que pruebe bien el código y te digo.

    Un saludo

    • Esta respuesta fue modificada hace 1 año, 7 meses por LGrusin.
    • Esta respuesta fue modificada hace 1 año, 7 meses por LGrusin.

    Hola de nuevo @lgrusin

    Tenías razón, elimine los espacion antes de <?php y dejo de dar el error. Pero en cuanto a la opcion de Paypal estamos como al principio…sigue estando como estaba antes, con cualquiera de los métodos puedes seleccionarla como metodo de pago.

    Moderador LGrusin

    (@lgrusin)

    Creo que el código que he puesto está bien. Aclarame una cosa, cuál de estas opciones corresponde a «Envio Local – envio ordinario»
    1 – Recogida en local
    2 – Envío gratuito
    3 – Precio fijo

    Si es la primera el código que puse es el que debes usar. Lo pones tal como está sin

    <?php
    
    ?>

    justo después del primer <?php del archivo functions.php

    Un saludo

    • Esta respuesta fue modificada hace 1 año, 7 meses por LGrusin.

    Hola d enuevo;

    En realidad no es «recogida en Local» es «recogida local».

    En los ajustes de WooCoomerce, en las «opciones de envio» la que pertenece a este envio que ofrecemos es Envio Local(heredado)

    No se que puede estar fallando…

    Moderador LGrusin

    (@lgrusin)

    Pues nada, prueba con local_delivery en vez de local_pickup

    El código quedaría así:

    add_filter( 'woocommerce_available_payment_gateways', 'bbloomer_gateway_disable_shipping_326' );
     
    function bbloomer_gateway_disable_shipping_326( $available_gateways ) {
     global $woocommerce;
     if ( !is_admin() ) {
      $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
      $chosen_shipping = $chosen_methods[0];
            
      if ( isset( $available_gateways['paypal'] ) && 0 === strpos( $chosen_shipping, 'local_delivery' ) ) {
       unset( $available_gateways['paypal'] );
       }
     }
    return $available_gateways;
    }

    Un saludo

    ¡Voy a clonar la web en local y probare con el codigo que me dices! Ójala funcione 🙏

    Gracias por tu tiempo de nuevo @lgrusin

Viendo 10 respuestas - 1 de 10 (de 10 total)
  • El debate ‘Ocultar métodos de Pago segun ENVIO’ está cerrado a nuevas respuestas.