2014-11-13 33 views
7

Tôi muốn thêm tùy chọn mới vào danh sách thả xuống tùy chọn cổ phiếu cho một sản phẩm. Theo mặc định, có "Hết hàng", "Còn hàng" và tôi muốn thêm tùy chọn thứ ba.Thêm tùy chọn cổ phiếu trong woocommerce

tôi thấy phương pháp hiển thị menu thả xuống (ở đẳng cấp wc-meta-box-sản phẩm-data.php)

// Stock status 
    woocommerce_wp_select(array('id' => '_stock_status', 'wrapper_class' => 'hide_if_variable', 'label' => __('Stock status', 'woocommerce'), 'options' => array(
     'instock' => __('In stock', 'woocommerce'), 
     'outofstock' => __('Out of stock', 'woocommerce') 
    ), 'desc_tip' => true, 'description' => __('Controls whether or not the product is listed as "in stock" or "out of stock" on the frontend.', 'woocommerce'))); 

    do_action('woocommerce_product_options_stock_status'); 

Nhưng tôi không muốn chỉnh sửa lớp Woocommerce trực tiếp, do đó chúng tôi có thể cập nhật Woocommerce mà không mất bất kỳ mã tùy chỉnh nào. Có cách nào để ghi đè phương pháp này không?

+0

Xin lỗi nhưng những gì bạn đang tìm kiếm là không thể mà không thay đổi các tệp lõi, những thay đổi sẽ bị mất khi nâng cấp. https://support.woothemes.com/hc/communities/public/questions/202868126-Adding-a-stock-choice –

+0

Tôi đã nhìn thấy liên kết này nhưng tôi đã tự hỏi nếu có một giải pháp khác. Bạn có thể kiểm tra câu trả lời của riêng tôi dưới đây. – Laila

Trả lời

0

Vâng, tôi đã kết thúc ẩn cựu lựa chọn cổ phiếu thả xuống trong Javascript

add_action('woocommerce_product_options_stock_status', 'add_custom_stock_type');  
function add_custom_stock_type() { 
     // Stock status - We remove the default one 
     ?> 
     <script type="text/javascript"> 
      jQuery('_stock_status').remove(); 
     </script> 
     <?php 
    } 

và tạo ra một cái mới sử dụng hướng dẫn này: http://www.remicorson.com/mastering-woocommerce-products-custom-fields/ Không chắc đó là giải pháp sạch nhất nhưng nó không chạm vào các tập tin cốt lõi ít nhất ! :)

12

cho bất kỳ ai quan tâm, đây là giải pháp hoàn chỉnh, dựa trên phương pháp tiếp cận của Laila. Cảnh báo! Giải pháp của tôi chỉ nhằm mục đích làm việc với tùy chọn WooCommerce "quản lý cổ phiếu" bị vô hiệu hóa! Tôi không làm việc với số tiền chính xác của các mặt hàng trong kho. Tất cả mã đều đi đến functions.php, như thường lệ.

Phần sau

Xóa trường thả xuống trạng thái chứng khoán gốc. Thêm lớp CSS để phân biệt trường tùy chỉnh mới của tôi. Dropdown hiện có tùy chọn mới "On Request".

function add_custom_stock_type() { 
    ?> 
    <script type="text/javascript"> 
    jQuery(function(){ 
     jQuery('._stock_status_field').not('.custom-stock-status').remove(); 
    }); 
    </script> 
    <?php 

    woocommerce_wp_select(array('id' => '_stock_status', 'wrapper_class' => 'hide_if_variable custom-stock-status', 'label' => __('Stock status', 'woocommerce'), 'options' => array(
     'instock' => __('In stock', 'woocommerce'), 
     'outofstock' => __('Out of stock', 'woocommerce'), 
     'onrequest' => __('On Request', 'woocommerce'), // The new option !!! 
    ), 'desc_tip' => true, 'description' => __('Controls whether or not the product is listed as "in stock" or "out of stock" on the frontend.', 'woocommerce'))); 
} 
add_action('woocommerce_product_options_stock_status', 'add_custom_stock_type'); 

Đáng buồn thay, WooCommerce sẽ tiết kiệm chỉ "instock" hoặc "outofstock" giá trị với các chức năng có nguồn gốc của nó. Vì vậy, sau khi xử lý tất cả dữ liệu sản phẩm, tôi phải lưu lại trạng thái chứng khoán của mình.

function save_custom_stock_status($product_id) { 
    update_post_meta($product_id, '_stock_status', wc_clean($_POST['_stock_status'])); 
} 
add_action('woocommerce_process_product_meta', 'save_custom_stock_status',99,1); 

Template phần

Và điều cuối cùng - tôi phải thay đổi dữ liệu trả về bởi sản phẩm get_availability() chức năng. Khi "quản lý kho" bị tắt, WooCommerce chỉ biết giá trị "instock" và "outofstock", một lần nữa. Vì vậy, tôi có kiểm tra tình trạng cổ phiếu của riêng tôi.

function woocommerce_get_custom_availability($data, $product) { 
    switch($product->stock_status) { 
     case 'instock': 
      $data = array('availability' => __('In stock', 'woocommerce'), 'class' => 'in-stock'); 
     break; 
     case 'outofstock': 
      $data = array('availability' => __('Out of stock', 'woocommerce'), 'class' => 'out-of-stock'); 
     break; 
     case 'onrequest': 
      $data = array('availability' => __('On request', 'woocommerce'), 'class' => 'on-request'); 
     break; 
    } 
    return $data; 
} 
add_action('woocommerce_get_availability', 'woocommerce_get_custom_availability', 10, 2); 

Có thể nó không phải là giải pháp chống đạn ... Tôi sẽ cập nhật nó, cuối cùng.

+0

Điều này làm việc cho tôi cảm ơn. Có các tùy chọn trong kho, hết hàng, 1-3 ngày và 3-5 ngày. – marijn

+0

Giống như add_action ('woocommerce_get_availability', 'woocommerce_get_custom_availability', 10, 2); nên là một add_filter để có được công việc này ,. –

+0

Không, 'add_action' và' add_filter' là các hàm giống nhau. Xem [add_action source code] (https://developer.wordpress.org/reference/functions/add_action/#source). Nhưng có, nó nên được add_filter cho sự hiểu biết tốt hơn. – Marek

Các vấn đề liên quan