php - Woocommerce 结帐 - payment_method 调用不正确
问题描述
使用 Woocommerce,当用户选择特定运费时,我使用了一个隐藏付款选项的功能:
public function custom_available_payment_gateways( $gateways ) {
$chosen_shipping_rates = ( isset( WC()->session ) ) ? WC()->session->get( 'chosen_shipping_methods' ) : array();
if ( in_array( 'local_pickup:14', $chosen_shipping_rates ) ) :
unset( $gateways['cod'] );
elseif ( in_array( 'flat_rate:17', $chosen_shipping_rates ) ) :
unset( $gateways['bacs'] );
unset( $gateways['przelewy24'] );
elseif ( in_array( 'flat_rate:18', $chosen_shipping_rates ) ) :
unset( $gateways['bacs'] );
unset( $gateways['przelewy24'] );
endif;
return $gateways;
}
添加评论收起
消息输入
记下一些东西
粗 斜体~strike~ code
preformatted
>quote 搜索结果
包括:一切 所有消息文件 1 结果
这工作正常,但我收到一个错误 - payment_method 调用不正确 - 我如何更改此函数以正确调用它?
解决方案
我对您的代码进行了非常小的更改,并在我的活动子主题的 function.php 文件中对其进行了测试。它可以正常工作:
add_filter( 'woocommerce_available_payment_gateways', 'custom_available_payment_gateways' );
function custom_available_payment_gateways( $available_gateways ) {
// Not in backend (admin)
if( is_admin() )
return $available_gateways;
$chosen_sm = ( isset( WC()->session ) ) ? WC()->session->get( 'chosen_shipping_methods' ) : array();
if ( in_array( 'local_pickup:14', $chosen_sm ) )
{
if( isset( $available_gateways['cod'] ) )
unset( $available_gateways['cod'] );
} elseif ( in_array( 'flat_rate:17', $chosen_sm ) || in_array( 'flat_rate:18', $chosen_sm ) )
{
if( isset( $available_gateways['bacs'] ) )
unset( $available_gateways['bacs'] );
if( isset( $available_gateways['przelewy24'] ) )
unset( $available_gateways['przelewy24'] );
}
return $available_gateways;
}
所以对于插件来说,钩子部分会略有不同(并且位于init()
函数中):
add_filter( 'woocommerce_available_payment_gateways', array($this, 'custom_available_payment_gateways') );
public function custom_available_payment_gateways( $available_gateways ) {
// Not in backend (admin)
if( is_admin() )
return $available_gateways;
$chosen_sm = ( isset( WC()->session ) ) ? WC()->session->get( 'chosen_shipping_methods' ) : array();
if ( in_array( 'local_pickup:14', $chosen_sm ) )
{
if( isset( $available_gateways['cod'] ) )
unset( $available_gateways['cod'] );
} elseif ( in_array( 'flat_rate:17', $chosen_sm ) || in_array( 'flat_rate:18', $chosen_sm ) )
{
if( isset( $available_gateways['bacs'] ) )
unset( $available_gateways['bacs'] );
if( isset( $available_gateways['przelewy24'] ) )
unset( $available_gateways['przelewy24'] );
}
return $available_gateways;
}
它应该工作。
推荐阅读
- menu - 错字3中带有字体的图标的菜单
- c - 是否应该在可用的地方使用命名地址空间?
- firebase - firebase 与颤振的集成在地理位置依赖下不成功
- sql-server - SQL Server 中用于选择/插入位置的地理与浮点类型哪个更有效?
- excel - Excel 计算表只需要比计算整个工作簿更长的时间
- r - read.csv 警告“引用字符串中的 EOF”以读取整个文件
- javascript - 如何指定聚焦和点击事件的顺序?
- php - 如何将虚拟机中 postgrsql 数据库中的图像显示到我的本地
- javascript - p5.js 鼠标压线动画
- java - 如何将此 if-else 简化为一个语句?