php - 删除 WooCommerce Checkout 中一些基于虚拟产品的 Hook 功能

标签 php wordpress woocommerce checkout hook-woocommerce

当购物车中只有虚拟产品时,我想删除结账页面上的一些信息。

以下内容是在结帐页面上删除我想要的内容:

  remove_action( 'woocommerce_checkout_terms_and_conditions', 'wc_checkout_privacy_policy_text', 20 );
  remove_action( 'woocommerce_checkout_terms_and_conditions', 'wc_terms_and_conditions_page_content', 30 );
  remove_action( 'woocommerce_checkout_terms_and_conditions', 'woocontracts_terms_fields', );
  remove_action( 'woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10 );
  remove_action( 'woocommerce_checkout_order_review', 'woocommerce_order_review', 10 );
  remove_action( 'woocommerce_checkout_after_terms_and_conditions', 'woocontracts_checkout_additional_checkboxes', 10 );
  remove_action( 'woocommerce_checkout_process', 'woocontracts_checkout_field_process', 10 );

购物车里只有虚拟产品时如何制作相同的产品?

我尝试了以下方法:

add_filter( 'woocommerce_checkout_after_terms_and_conditions' , 'bbloomer_simplify_checkout_virtualab' );
 
function bbloomer_simplify_checkout_virtualab( $fields ) {
    
   $only_virtual = true;
    
   foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
      // Check if there are non-virtual products
      if ( ! $cart_item['data']->is_virtual() ) $only_virtual = false;   
   }
     
    if( $only_virtual ) {
                

  remove_action( 'woocommerce_checkout_terms_and_conditions', 'wc_checkout_privacy_policy_text', 20 );
  remove_action( 'woocommerce_checkout_terms_and_conditions', 'wc_terms_and_conditions_page_content', 30 );
  remove_action( 'woocommerce_checkout_terms_and_conditions', 'woocontracts_terms_fields', );
  remove_action( 'woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10 );
  remove_action( 'woocommerce_checkout_order_review', 'woocommerce_order_review', 10 );
        
return $fields;
}
     
     return $fields;
}

但是这不起作用。有什么建议吗?

最佳答案

更新 2 - 在本例中使用的正确钩子(Hook)是 woocommerce_checkout_init 操作钩子(Hook):

// Custom conditional function that checks if there is only virtual items in cart
function has_only_virtual_items_in_cart(){
    $only_virtual = true;

    // Check if there are non-virtual items in cart
    foreach( WC()->cart->get_cart() as $cart_item ) {
        if ( ! $cart_item['data']->is_virtual() ) {
            $only_virtual = false;
            break;
        }
    }
    return $only_virtual;
}

// Unhook some functions conditionally
add_action( 'woocommerce_checkout_init', 'simplify_checkout_for_virtual_items_only' );
function simplify_checkout_for_virtual_items_only() {
    if( has_only_virtual_items_in_cart() ) {
        remove_action( 'woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10 );
        remove_action( 'woocommerce_checkout_order_review', 'woocommerce_order_review', 10 );
        remove_action( 'woocommerce_checkout_terms_and_conditions', 'wc_checkout_privacy_policy_text', 20 );
        remove_action( 'woocommerce_checkout_terms_and_conditions', 'wc_terms_and_conditions_page_content', 30 );
        remove_action( 'woocommerce_checkout_terms_and_conditions', 'woocontracts_terms_fields' ); // <== missing priority
        remove_action( 'woocommerce_checkout_after_terms_and_conditions', 'woocontracts_checkout_additional_checkboxes', 10 );
    }
}

代码位于事件子主题(或事件主题)的 function.php 文件中。经过测试并有效。

Then you can reuse the custom contional function has_only_virtual_items_in_cart() inside woocontracts_checkout_field_process() function hooked in woocommerce_checkout_process hook.

关于php - 删除 WooCommerce Checkout 中一些基于虚拟产品的 Hook 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63176539/

相关文章:

javascript - Ajax 调用不起作用?

wordpress - 抱歉,没有符合您选择的产品。请选择不同的组合 WooCommerce

php - 根据订单备注触发 Woocommerce 传出电子邮件

PHP 命令不同步错误

php - Eloquent DB::Post->where()->update() 始终返回 1,无论进行任何更改

WordPress SEO 删除 SEO 标题末尾的 "-"

jquery - 如何清除 Wordpress 缓存?

css - wordpress 主题的 style.css 中的问题

php - WooCommerce:随机显示一些 5 星级产品评论

php - MySQL 数据库中的数据在网站中无法正确显示