Cambiare programmaticamente i metodi di pagamento in WooCommerce

20 mar 2014, 10:37:01
Visualizzazioni: 15.8K
Voti: 1

Sto cercando di manipolare programmaticamente la selezione del Metodo di Pagamento tra BACS e un'opzione "Nessun pagamento richiesto". Il mio cliente vuole la possibilità di Richiedere solo un Preventivo, quindi ho esteso le azioni e i filtri di WooCommerce e fornito un metodo per richiedere preventivo tramite il sistema del carrello. Se l'utente ha richiesto solo un preventivo, nella pagina di checkout sto cercando di selezionare automaticamente l'opzione Pagamento alla Consegna, che ho rinominato in "Richiesta Preventivo Soltanto - Nessun pagamento richiesto". Qualsiasi consiglio sarebbe utile.

0
Tutte le risposte alla domanda 2
1

Esiste un filtro chiamato woocommerce_available_payment_gateways:

add_filter('woocommerce_available_payment_gateways','filter_gateways',1);
function filter_gateways($gateways){
    global $woocommerce;        
    //Rimuove un'opzione di pagamento specifica
    unset($gateways['paypal']);
    return $gateways;
}

Non sono sicuro di dove e come ottieni/memorizzi l'opzione Richiesta di Preventivo, ma puoi accedere al valore all'interno della funzione filter_gateways e puoi rimuovere un gateway specifico con una logica condizionale.

20 mar 2014 12:00:32
Commenti

Ho utilizzato questo filtro, sì, e funziona benissimo senza la mia logica condizionale. Penso che il problema sia che il valore che indica che si tratta di una Richiesta di Preventivo viene passato attraverso le query vars. Quello che succede è che inizialmente restituirà il valore della mia query var all'interno della funzione del filtro, ma poi le opzioni di pagamento vengono ricaricate dinamicamente a quanto pare, probabilmente a causa delle opzioni di spedizione, e quindi perde la mia query var. Almeno credo di essere sulla strada giusta, ma inserire la mia logica condizionale in questo filtro sembra essere un po' un incubo

PipIWYG PipIWYG
20 mar 2014 13:21:13
0

Il mio problema qui era utilizzare le query vars per memorizzare un valore che indicasse che la richiesta era solo per un preventivo. L'area di pagamento viene aggiornata dinamicamente in base ai cambiamenti nelle sezioni del checkout, e al caricamento, i metodi di pagamento vengono ricaricati, perdendo i valori delle query var. Sono riuscito a superare questo problema utilizzando le funzioni WC()->session->set e WC()->session->get. Ho aggiunto le seguenti due azioni per manipolare il layout basandosi sul valore della sessione.

add_action("woocommerce_before_checkout_form", "custom_before_checkout_action");
function custom_before_checkout_action() {
    if (isset($_GET["quote"]) && $_GET["quote"] == "1") {
        echo '<h2>Richiesta di Preventivo</h2>';
        WC()->session->set("quote","true");
    }
    else {
        WC()->session->set("quote","false");
        echo '<h2>Acquista Campione</h2>';
    }
}

add_filter('woocommerce_available_payment_gateways','filter_gateways',1);
function filter_gateways($gateways){
    if (WC()->session->get("quote") == "true")
        unset($gateways['bacs']);
    else
        unset($gateways['cod']);

    return $gateways;
}

Sembra che questa soluzione funzioni per preservare il valore e aggiungere logica condizionale anche dopo il ricaricamento dell'area di pagamento.

20 mar 2014 19:45:48