Programmatische Änderung der Zahlungsmethoden WooCommerce

Ich versuche, die Auswahl der Zahlungsmethode zwischen BACS und einer Option Keine Zahlung programmgesteuert zu manipulieren. Mein Kunde möchte die Möglichkeit haben, nur nach einem Angebot zu fragen, also habe ich Woocommerce-Aktionen und -Filter erweitert und eine Methode zur Anforderung eines Angebots über das Warenkorbsystem bereitgestellt. Wenn der Benutzer nur ein Angebot angefordert hat, versuche ich auf der Checkout-Seite automatisch die Option “Nachnahme” auszuwählen, die ich in “Nur Angebotsanforderung – Keine Zahlung erforderlich” umbenannt habe. Jeder Rat wäre hilfreich.

Solutions Collecting From Web of "Programmatische Änderung der Zahlungsmethoden WooCommerce"

Es gibt einen Filter namens woocommerce_available_payment_gateways:

add_filter('woocommerce_available_payment_gateways','filter_gateways',1); function filter_gateways($gateways){ global $woocommerce; //Remove a specific payment option unset($gateways['paypal']); return $gateways } 

Ich bin mir nicht sicher, wo und wie Sie die Angebotsanforderung erhalten / speichern, aber Sie können auf den Wert innerhalb der function filter_gateways zugreifen und Sie können ein bestimmtes Gateway mit einer bedingten Logik entfernen.

Mein Problem hier war mit der Verwendung von Abfrage vars, um einen Wert zu speichern, um anzuzeigen, dass die Anfrage nur für Angebote ist. Der Zahlungsbereich wird basierend auf Änderungen in den Kassenbereichen dynamisch aktualisiert, und beim Laden werden die Zahlungsmethoden neu geladen und die Abfrage-var-Werte gehen verloren. Es gelang mir, dieses Problem zu lösen, indem ich die functionen WC () -> Sitzung -> Set und WC () -> Sitzung -> functionen nutze. Ich habe die folgenden zwei Aktionen hinzugefügt, um das Layout basierend auf dem Sitzungswert zu manipulieren.

 add_action("woocommerce_before_checkout_form", "custom_before_checkout_action"); function custom_before_checkout_action() { if (isset($_GET["quote"]) && $_GET["quote"] == "1") { echo '

Request for Quote

'; WC()->session->set("quote","true"); } else { WC()->session->set("quote","false"); echo '

Buy Sample

'; } } 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; }

Dies scheint den Trick zu leisten, den Wert beizubehalten und bedingte Logik hinzuzufügen, selbst nachdem der Zahlungsbereich neu geladen wurde.