请大家
我在结帐页面上使用两个付款网关:
1°bacs =银行转帐
2°鳕鱼=货到付款
如果用户没有管理员配置文件(!is_user_admin()),||我需要隐藏付款网关 COD =货到付款。或未记录,|| ! is_user_logged_in()然后隐藏。
这是我正在使用的代码,正在运行。
add_filter( 'woocommerce_available_payment_gateways', 'bbloomer_cod_hide' );
function bbloomer_cod_hide( $available_gateways ) {
if ( isset( $available_gateways['cod']) && !is_user_admin() ) {
unset( $available_gateways['cod'] );
}
return $available_gateways;
}
问题在于...付款网关 bacs =银行转帐也受到影响并隐藏:)
所以我尝试了另一个钩子
add_filter( 'woocommerce_available_payment_gateways', 'transfer_enable_bacs' );
function transfer_enable_bacs( $available_gateways ) {
if ( isset( $available_gateways['bacs']) && !is_user_admin() ) {
//unset( $available_gateways['bacs'] );
}
return $available_gateways;
}
但这不是正确的解决方案。这两个支付网关都是隐藏的。
我在做什么错了?
感激!
答案 0 :(得分:1)
我认为您需要将is_user_admin
替换为current_user_can
add_filter( 'woocommerce_available_payment_gateways', 'bbloomer_cod_hide' );
function bbloomer_cod_hide( $available_gateways ) {
if ( isset( $available_gateways['cod'] ) && ! current_user_can( 'administrator' ) ) {
unset( $available_gateways['cod'] );
}
return $available_gateways;
}
is_user_admin
不检查用户是否为管理员;使用current_user_can()
检查角色和功能。
https://developer.wordpress.org/reference/functions/is_user_admin/
答案 1 :(得分:1)
尝试以下代码:
add_filter('woocommerce_available_payment_gateways','bbloomer_cod_hide');
function bbloomer_cod_hide( $available_gateways ) {
if ( !is_user_logged_in() ) || !current_user_can( 'install_themes' ) ) {
unset( $available_gateways['cod'] );
}
return $available_gateways;
}