我有一个Woocommerce实例,其中有3种不同的付款方式和9种不同的运费--3个区域,每个区域有3种不同的费率。
每个区域中的1个费率应该只允许显示1个支付网关,但到目前为止,我只能为每个运输方法获取网关,或者没有任何一个。
其中2种运费是不同的费率,所以我希望我可以使用' table_rate:##'在隐藏运费的功能中。
到目前为止我尝试的代码如下。如果选定的运费是ID为54的表格费率,则仅用于删除winbnk运输选项,但无论选择的运送方式如何,它都会删除网关。
我发了一个小学生错误或误解了运费方法功能。
add_filter('woocommerce_available_payment_gateways','remove_payment_gateway_by_shipping_option');
function remove_payment_gateway_by_shipping_option($available_gateways){
global $woocommerce;
$chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
$chosen_shipping = $chosen_methods[0];
if($chosen_shipping = 'table_rate:54'){
unset( $available_gateways['winbnk'] );
}
return $available_gateways;
}
以下解决方案对我有用,希望它对其他人有用。
add_filter( 'woocommerce_available_payment_gateways', 'shipping_disables_payment_gateway' );
function shipping_disables_payment_gateway( $available_gateways ) {
global $woocommerce;
$chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
$chosen_shipping = $chosen_methods[0];
if ( isset( $available_gateways['winbnk'] ) && 0 === strpos( $chosen_shipping, 'table_rate:54' ) ) {
unset( $available_gateways['winbnk'] );
}
return $available_gateways;
}
答案 0 :(得分:0)
如果您选择了具有特定标题的特定选项,则会删除paypal的付款选项。你可以使用这段代码,
function alter_shipping_methods($list){
$chosen_titles = array();
$available_methods = WC()->shipping->get_packages();
$chosen_rates = ( isset( WC()->session ) ) ? WC()->session->get( 'chosen_shipping_methods' ) : array();
foreach ($available_methods as $method)
foreach ($chosen_rates as $chosen) {
if( isset( $method['rates'][$chosen] ) ) $chosen_titles[] = $method['rates'][ $chosen ]->label;
}
if( in_array( 'Home Delivery', $chosen_titles ) ) {
$array_diff = array('WC_Gateway_Paypal');
$list = array_diff( $list, $array_diff );
}
return $list;
}
add_action('woocommerce_payment_gateways', 'alter_shipping_methods');
您可以获得有关同一主题的更多详细信息,请点击链接:http://www.bolderelements.net/support/knowledgebase/hide-payment-gateway-based-on-shipping-option-selected/
答案 1 :(得分:0)
这就是答案。希望它可以帮助别人。
add_filter( 'woocommerce_available_payment_gateways', 'shipping_disables_payment_gateway' );
function shipping_disables_payment_gateway( $available_gateways ) {
global $woocommerce;
$chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
$chosen_shipping = $chosen_methods[0];
if ( isset( $available_gateways['winbnk'] ) && 0 === strpos( $chosen_shipping, 'table_rate:54' ) ) {
unset( $available_gateways['winbnk'] );
}
return $available_gateways;
}