• User

    Disabilitare altri metodi di pagamento quando selezionato il contrassegno su Woocommerce

    Vorrei evitare che gli utenti vedano anche le altre opzioni di pagamento quando selezionano la spedizione in contrassegno.

    Girovagando in rete ho trovato questo script:

    add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_role' );

    function payment_gateway_disable_role( $available_gateways ) {
    global $woocommerce;
    //trova la modalità di pagamento selezionata
    $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
    $chosen_shipping = $chosen_methods[0];
    //verifica se spedizione nazionale
    if ( $chosen_shipping=='local_delivery' ) {
    unset( $available_gateways['paypal'] ); //disattiva paypal
    }
    return $available_gateways;
    }


    unset( $available_gateways['paypal'] ); // paypal
    unset( $available_gateways['bacs'] ); //bonifico bancario
    unset( $available_gateways['cod'] ); //in contanti – contrassegno
    unset( $available_gateways['cheque'] ); //assegno


    Io vorrei disabilitare paypal ed il bonifico bancario una volta selezionato il contrassegno. Dato che lo script si riferisce alla disattivazione di paypal se selezionata la spedizione nazionale e vorrei esser sicuro di non sbagliare, chiedo il vostro aiuto.

    🙂


  • User Attivo

    Forse non ho ben capito, intendi che prima della selezione del pagamento paypal e bonifico sono disponibili e dopo aver cliccato su "contrassegno" non devono più essere possibili? (mi sembra strano ma chiedo).


    brum 1 Risposta
  • User

    Ciao @eleclipse,
    una volta arrivati in cassa ho la scelta del tipo di spedizione: spedizione gratuita, contrassegno, espressa.

    Una volta selezionata la spedizione ho i metodi di pagamento disponibili:
    pagamento alla consegna, paypal, bonifico bancario.

    Vorrei che se selezionata la spedizione contrassegno, i metodi di pagamento paypal e bonifico non fossero visibili, in modo da lasciare solo la voce pagamento alla consegna come opzione disponibile.

    Perché lo ritieni strano?

    Grazie 😉


  • User Attivo

    Ok adesso ho capito, diciamo che non metterei contrassegno in primo luogo come opzione di spedizione, perché è un'opzione di pagamento non di spedizione.

    Invertendo l'ordine e mettendola come metodo di spedizione ti nasce questo problema ma lo risolvi molto più facilmente se la lasci come metodo di pagamento e basta, e al massimo imposti in woocommerce quali metodi di spedizione consentono il contrassegno e quali no (se necessario).


    brum 1 Risposta
  • User

    @eleclipse

    eh lo so ma ho un vincolo.
    Alla somma xxx parte la spedizione gratuita e voglio che la spedizione a pagamento venga nascosta.

    Se dovessi assegnare il contrassegno alla spedizione a pagamento, non visualizzerei l'opzione con il relativo costo aggiuntivo.

    Se lascio il contrassegno solo come metodo di pagamento inoltre, come posso applicare un costo essendo selezionata la spedizione gratuita?


  • User

    Ho risolto momentaneamente utilizzando il plugin Conditional Payments for WooCommerce. Preferirei trovare una soluzione tramite codice, ma se dovesse servire a qualcuno è una soluzione rapida.

    Se qualcuno potesse darmi un'aiuto tramite snippet ne sarei felice.

    🙂


    giorgiotave 1 Risposta
  • Community Manager

    @brum perfetto!

    La sposto in Wordpress che forse è più adatta lì 🙂


    brum 1 Risposta
  • User

    @giorgiotave certo! 😉


  • Moderatrice

    c'è il plugin payment method by shipping 😄


  • User Attivo

    Giusto per capirci il tuo flusso potrebbe essere:

    Arrivo in cassa
    Se ho superato la soglia XX visualizzo Spedizione gratuita e basta ( codice per nascondere le altre spedizioni)
    Se non ho superato la soglia XX visualizzo costi di spedizione

    Tipo di pagamento, posso scegliere

    1. contrassegno
    2. bonifico
    3. paypal

    Nel dettaglio, se ho la spedizione gratuita, posso scegliere uno qualsiasi dei tre
    Se ho la spedizione a pagamento e seleziono contrassero va aggiunto un costo

    È corretto?

    quindi nel caso il flusso di andasse comodo, il codici per nascondere altri pagamenti se passa quello gratuito può essere questo:
    function nascondi_spedizioni_diverse_da_gratuita( $rates ) {
    $free = array();
    foreach ( $rates as $rate_id => $rate ) {
    if ( 'free_shipping' === $rate->method_id ) {
    $free[ $rate_id ] = $rate;
    break;
    }
    }
    return ! empty( $free ) ? $free : $rates;
    }
    add_filter( 'woocommerce_package_rates', 'nascondi_spedizioni_diverse_da_gratuita', 100 );

    riguardo il costo di contrassegno, lo metti come pagamento e non spedizione, e dovresti aggiungere un costo , una fee aggiuntiva, per la scelta del contrassegno


    shazarak 1 Risposta
  • User Attivo