【问题标题】:Conditional remove "proceed to checkout" button in Braintree for WooCommerce plugin有条件地删除 Braintree for WooCommerce 插件中的“继续结帐”按钮
【发布时间】:2021-05-10 06:45:16
【问题描述】:

我在 wc_braintree_cart_payment_gateways 过滤器挂钩中使用此代码来删除 WooCommerce 中的“继续结帐”按钮:

add_filter( 'wc_braintree_cart_payment_gateways', function ( $gateways ) {

$categories   = [aaa,bbb];

    // Loop through cart items
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        // Check for product categories
    if ( ! has_term($categories, 'product_cat', $cart_item['product_id'] ) ) {

            $gateways = []; 
            break;
        }else{  

        remove_action( 'woocommerce_proceed_to_checkout', 'woocommerce_button_proceed_to_checkout', 20 );
    }

    }
    
return $gateways;

} );

第一个条件按预期工作。 remove_action 不生效。我不确定它是否正确放置?有什么建议吗?

【问题讨论】:

  • 为什么不覆盖模板并将支票放在购物车按钮周围?无需删除操作/过滤器。
  • 因为我是这样做的。我想了解为什么这段代码不起作用,而不是采用完全不同的解决方案。
  • 另一种解决方案在我看来更好。它更可靠。

标签: php wordpress woocommerce checkout braintree


【解决方案1】:

我不使用您所说的插件,但向钩子添加(较低的)优先级数字可以提供解决方案。

function filter_wc_braintree_cart_payment_gateways ( $gateways ) {
    // Remove proceed to checkout button
    remove_action( 'woocommerce_proceed_to_checkout', 'woocommerce_button_proceed_to_checkout', 20 ); 
    
    return $gateways;
}
add_filter( 'wc_braintree_cart_payment_gateways', 'filter_wc_braintree_cart_payment_gateways', 10, 1 );

如果可行,您可以扩展您的代码

【讨论】:

  • 但是无论初始条件如何,这都会删除按钮。
  • @t-bo 正如我在回答中已经指出的那样如果可行,您可以扩展您的代码。编写代码时,请按步骤进行。这样,您可以在每个步骤之后确定您的代码在继续之前是否有效。如果第一步不起作用,那么添加额外代码就没有意义了。由于删除按钮不起作用,您可以先测试它而无需额外的东西。如果有效,您的问题已经解决,您可以添加更多条件
  • 感谢您的帮助,但我决定另辟蹊径,所以我没有机会测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
  • 2019-10-04
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多