WooCommerce按用户角色隐藏Square支付方式不生效问题求助
解决方案
WooCommerce官方Square支付插件对应的正确网关ID为*square_credit_card*,你代码中使用的square不是正确的索引值,因此隐藏逻辑不生效。
你可以直接将原代码中对应判断的square替换为square_credit_card即可,也可以用更简洁的批量判断逻辑简化代码,避免重复书写条件:
add_filter( 'woocommerce_available_payment_gateways', 'client_pmts_enable_manager' ); function client_pmts_enable_manager( $available_gateways ) { // 仅对没有店铺管理权限的用户隐藏指定支付方式 if ( ! current_user_can( 'manage_woocommerce' ) ) { // 列入需要隐藏的支付网关ID数组 $hide_gateways = [ 'bacs', 'cod', 'cheque', 'square_credit_card' ]; foreach ( $hide_gateways as $gateway_id ) { if ( isset( $available_gateways[ $gateway_id ] ) ) { unset( $available_gateways[ $gateway_id ] ); } } } return $available_gateways; }
如果替换后仍然不生效,你可以用临时调试代码输出所有可用网关的ID,确认你安装的Square插件的实际ID(调试完成后及时删除这段代码):
add_action( 'woocommerce_checkout_init', function() { $available_gateways = WC()->payment_gateways->get_available_payment_gateways(); echo '<pre>'; print_r( array_keys( $available_gateways ) ); echo '</pre>'; } );
访问结账页面就能看到所有当前可用支付网关的ID列表,找到Square对应的条目替换即可。
内容的提问来源于stack exchange,提问作者Christopher
相关产品推荐
相关产品推荐

