dsj2014 2015-09-07 02:19
浏览 48
已采纳

WooCommerce - 删除不需要的结帐字段的条件声明

I found this gist to hide unwanted checkout fields for virtual products. How can I adjust it so it doesn't hide the fields if there are both virtual products and physical products? I am good at writing WordPress conditional statements, but I'm having trouble understanding how to write this one.

I would appreciate any assistance.

<?php

add_filter( 'woocommerce_checkout_fields' , 'woo_remove_billing_checkout_fields' );

/**
 * Remove unwanted checkout fields
 *
 * @return $fields array
*/
function woo_remove_billing_checkout_fields( $fields ) {

    if( woo_cart_has_virtual_product() == true ) {
        unset($fields['billing']['billing_company']);
        unset($fields['billing']['billing_address_1']);
        unset($fields['billing']['billing_address_2']);
        unset($fields['billing']['billing_city']);
        unset($fields['billing']['billing_postcode']);
        unset($fields['billing']['billing_country']);
        unset($fields['billing']['billing_state']);
        unset($fields['billing']['billing_phone']);
        unset($fields['order']['order_comments']);
        unset($fields['billing']['billing_address_2']);
        unset($fields['billing']['billing_postcode']);
        unset($fields['billing']['billing_company']);
        unset($fields['billing']['billing_city']);
    }

    return $fields;
}

/**
 * Check if the cart contains virtual product
 *
 * @return bool
*/
function woo_cart_has_virtual_product() {

  global $woocommerce;

  // By default, no virtual product
  $has_virtual_products = false;

  // Default virtual products number
  $virtual_products = 0;

  // Get all products in cart
  $products = $woocommerce->cart->get_cart();

  // Loop through cart products
  foreach( $products as $product ) {

      // Get product ID and '_virtual' post meta
      $product_id = $product['product_id'];
      $is_virtual = get_post_meta( $product_id, '_virtual', true );

      // Update $has_virtual_product if product is virtual
      if( $is_virtual == 'yes' )
        $virtual_products += 1;
  }

  if( count($products) == $virtual_products )
    $has_virtual_products = true;

  return $has_virtual_products;

}
  • 写回答

1条回答 默认 最新

  • duanjurong1347 2015-09-07 06:03
    关注

    Add an else condition to the following code which tells it to bail out immediately if the product is not virtual.

      // Update $has_virtual_product if product is virtual
      if( $is_virtual == 'yes' )
          $virtual_products += 1;
      else
          return false; // Cart contains both type of products, bail out immediately 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效