我这里的问题是使用查询变量存储一个值,以指示请求仅用于报价。付款区域根据签出区域内的更改动态刷新,加载时,重新加载付款方法,并丢失查询var值。通过使用WC()->session->set和WC()->session->get函数,我成功地解决了这个问题。我添加了以下两个操作来根据会话值操纵布局。
add_action("woocommerce_before_checkout_form", "custom_before_checkout_action");
function custom_before_checkout_action() {
if (isset($_GET["quote"]) && $_GET["quote"] == "1") {
echo \'<h2>Request for Quote</h2>\';
WC()->session->set("quote","true");
}
else {
WC()->session->set("quote","false");
echo \'<h2>Buy Sample</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;
}
这似乎是为了保留值,并在支付区域重新加载后添加条件逻辑。