2014-04-18 1 views
0

특정 운송 방법에 대해 전신 송금 지불 방법 (bacs 게이트웨이)을 사용하지 않으려합니다. 고객이 배송 대금 지불 방법을 선택한 경우 고객이 배송비를 지불하기를 원하지만 전신 송금 방법을 선택하면 무료 배송을 원합니다.WooCommerce - 하나의 운송 방법에 대해 BACS를 비활성화하십시오.

무료 배송을 선택하면 대금을 사용할 수 없지만 무료가 아닌 배송을 선택하면 전신 송금을 사용 중지 할 수 없었습니다.

어떻게 특정 배송 방법으로 BACS를 비활성화 할 수 있습니까?

답변

0

나는 이미 WooCommerce 사용자 정의 지불 게이트웨이 플러그인을 설치 했었습니다. 그건 좀 더 게이트웨이 옵션을 활성화 그래서 내가 함께 일하고 그것의 수업 중 하나를 편집했습니다.

다음은 배송 방법에 대한 BACS를 활성화 할 수있는 옵션이 이것으로 woocommerce - 사용자 정의 지불-게이트웨이의 내 수정 된 버전/클래스-WC-custom_payment_gateway_5.php

<?php 
/** 
* WC wcCpg5 Gateway Class. 
* Built the wcCpg5 method. 
*/ 
class WC_Custom_Payment_Gateway_5 extends WC_Gateway_BACS { 

/** 
* Constructor for the gateway. 
* 
* @return void 
*/ 
public function __construct() { 
    global $woocommerce; 

    $this->id    = 'wcCpg5'; 
    $this->icon   = apply_filters('woocommerce_wcCpg5_icon', ''); 
    $this->has_fields  = false; 
    $this->method_title  = __('Bacs', 'woocommerce'); 

// Load the settings. 
$this->init_form_fields(); 
$this->init_settings(); 

// Define user set variables 
    $this->title  = $this->get_option('title'); 
    $this->description = $this->get_option('description'); 
    $this->instructions = $this->get_option('instructions', $this->description); 
    $this->enable_for_methods = $this->get_option('enable_for_methods', array()); 
    // BACS account fields shown on the thanks page and in emails 
    $this->account_details = get_option('woocommerce_bacs_accounts', 
     array(
      array(
       'account_name' => $this->get_option('account_name'), 
       'account_number' => $this->get_option('account_number'), 
       'sort_code'  => $this->get_option('sort_code'), 
       'bank_name'  => $this->get_option('bank_name'), 
       'iban'   => $this->get_option('iban'), 
       'bic'   => $this->get_option('bic') 
      ) 
     ) 
    ); 

    // Actions 
    add_action('woocommerce_update_options_payment_gateways_' . $this->id, array($this, 'process_admin_options')); 
    add_action('woocommerce_update_options_payment_gateways_' . $this->id, array($this, 'save_account_details')); 
    add_action('woocommerce_thankyou_bacs', array($this, 'thankyou_page')); 

    // Customer Emails 
    add_action('woocommerce_email_before_order_table', array($this, 'email_instructions'), 10, 3); 

    // Actions. 
    if (version_compare(WOOCOMMERCE_VERSION, '2.0.0', '>=')) 
     add_action('woocommerce_update_options_payment_gateways_' . $this->id, array(&$this, 'process_admin_options')); 
    else 
     add_action('woocommerce_update_options_payment_gateways', array(&$this, 'process_admin_options')); 
} 


/* Admin Panel Options.*/ 
function admin_options() { 
    ?> 
    <h3><?php _e('Custom Payment Gateways 5','wcwcCpg5'); ?></h3> 
    <table class="form-table"> 
     <?php $this->generate_settings_html(); ?> 
    </table> <?php 
} 

/* Initialise Gateway Settings Form Fields. */ 
public function init_form_fields() { 
$shipping_methods = array(); 

    if (is_admin()) 
     foreach (WC()->shipping->load_shipping_methods() as $method) { 
      $shipping_methods[ $method->id ] = $method->get_title(); 
     } 
    $this->form_fields = array(
     'enabled' => array(
      'title' => __('Enable/Disable', 'woocommerce'), 
      'type' => 'checkbox', 
      'label' => __('Enable Bank Transfer', 'woocommerce'), 
      'default' => 'yes' 
     ), 
     'title' => array(
      'title'  => __('Title', 'woocommerce'), 
      'type'  => 'text', 
      'description' => __('This controls the title which the user sees during checkout.', 'woocommerce'), 
      'default'  => __('Direct Bank Transfer', 'woocommerce'), 
      'desc_tip' => true, 
     ), 
     'description' => array(
      'title'  => __('Description', 'woocommerce'), 
      'type'  => 'textarea', 
      'description' => __('Payment method description that the customer will see on your checkout.', 'woocommerce'), 
      'default'  => __('Make your payment directly into our bank account. Please use your Order ID as the payment reference. Your order won\'t be shipped until the funds have cleared in our account.', 'woocommerce'), 
      'desc_tip' => true, 
     ), 
     'instructions' => array(
      'title'  => __('Instructions', 'woocommerce'), 
      'type'  => 'textarea', 
      'description' => __('Instructions that will be added to the thank you page and emails.', 'woocommerce'), 
      'default'  => '', 
      'desc_tip' => true, 
     ), 
     'account_details' => array(
      'type'  => 'account_details' 
      ), 
     'enable_for_methods' => array(
      'title'    => __('Enable for shipping methods', 'woocommerce'), 
      'type'    => 'multiselect', 
      'class'    => 'chosen_select', 
      'css'    => 'width: 450px;', 
      'default'   => '', 
      'description'  => __('If COD is only available for certain methods, set it up here. Leave blank to enable for all methods.', 'woocommerce'), 
      'options'   => $shipping_methods, 
      'desc_tip'   => true, 
      'custom_attributes' => array(
       'data-placeholder' => __('Select shipping methods', 'woocommerce') 
      ) 
     ) 
    ); 
} 
    /** 
* Check If The Gateway Is Available For Use 
* 
* @return bool 
*/ 
public function is_available() { 
    $order = null; 

    if (! $this->enable_for_virtual) { 
     if (WC()->cart && ! WC()->cart->needs_shipping()) { 
      return false; 
     } 

     if (is_page(wc_get_page_id('checkout')) && 0 < get_query_var('order-pay')) { 
      $order_id = absint(get_query_var('order-pay')); 
      $order = wc_get_order($order_id); 

      // Test if order needs shipping. 
      $needs_shipping = false; 

      if (0 < sizeof($order->get_items())) { 
       foreach ($order->get_items() as $item) { 
        $_product = $order->get_product_from_item($item); 

        if ($_product->needs_shipping()) { 
         $needs_shipping = true; 
         break; 
        } 
       } 
      } 

      $needs_shipping = apply_filters('woocommerce_cart_needs_shipping', $needs_shipping); 

      if ($needs_shipping) { 
       return false; 
      } 
     } 
    } 

    if (! empty($this->enable_for_methods)) { 

     // Only apply if all packages are being shipped via local pickup 
     $chosen_shipping_methods_session = WC()->session->get('chosen_shipping_methods'); 

     if (isset($chosen_shipping_methods_session)) { 
      $chosen_shipping_methods = array_unique($chosen_shipping_methods_session); 
     } else { 
      $chosen_shipping_methods = array(); 
     } 

     $check_method = false; 

     if (is_object($order)) { 
      if ($order->shipping_method) { 
       $check_method = $order->shipping_method; 
      } 

     } elseif (empty($chosen_shipping_methods) || sizeof($chosen_shipping_methods) > 1) { 
      $check_method = false; 
     } elseif (sizeof($chosen_shipping_methods) == 1) { 
      $check_method = $chosen_shipping_methods[0]; 
     } 

     if (! $check_method) { 
      return false; 
     } 

     $found = false; 

     foreach ($this->enable_for_methods as $method_id) { 
      if (strpos($check_method, $method_id) === 0) { 
       $found = true; 
       break; 
      } 
     } 

     if (! $found) { 
      return false; 
     } 
    } 

    return parent::is_available(); 
} 


} 

입니다