我希望根据所选的付款网关删除结帐字段。
我在function.php中添加了以下代码,但它无效。我面临的问题是,它正处于If状态,但如果条件未设置则不在内部。当我试图在条件内回应时,它会显示在浏览器中。
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
function custom_override_checkout_fields( $fields ) {
if($_POST['payment_method'] === "wcwcPDpg"){
echo "this";
unset($fields['billing']['billing_first_name']);
unset($fields['billing']['billing_last_name']);
unset($fields['billing']['billing_company']);
unset($fields['billing']['billing_address_1']);
unset($fields['billing']['billing_address_2']);
unset($fields['billing']['billing_city']);
unset($fields['billing']['billing_postcode']);
unset($fields['billing']['billing_country']);
unset($fields['billing']['billing_state']);
unset($fields['billing']['billing_phone']);
unset($fields['order']['order_comments']);
unset($fields['billing']['billing_email']);
unset($fields['account']['account_username']);
unset($fields['account']['account_password']);
unset($fields['account']['account_password-2']);
}
return $fields;
}
当我删除if条件时,字段未设置,但是,我只想为特定的支付网关取消设置。
任何帮助表示赞赏:)
答案 0 :(得分:0)
尝试
if (WC()->session->chosen_payment_method == "wcwcPDpg") {
而不是
if($_POST['payment_method'] === "wcwcPDpg"){
然后将其添加到您的子主题的functions.php中,以便每次切换支付网关时都应用您的过滤器:
function filter_woocommerce_update_order_review_fragments( $array ) {
ob_start();
wc_get_template( 'checkout/form-billing.php', array( 'checkout' => WC()->checkout() ) );
$array[".woocommerce-billing-fields"] = ob_get_clean();
return $array;
};
add_filter( 'woocommerce_update_order_review_fragments', 'filter_woocommerce_update_order_review_fragments', 10, 1 )
我怀疑有更好的方法可以做到这一点,但这是我的第一次尝试。如果您有更好的解决方案,请在此处发布更新。