Cách tạo trạng thái đơn hàng tùy chỉnh trong thương mại điện tử!


7

Tôi đã thử mã dưới đây để tạo trạng thái tùy chỉnh.

add_action( 'init', function() {
    $term = get_term_by( 'name', 'shipped', 'shop_order_status' );
    if ( ! $term ) {
        wp_insert_term( 'shipped', 'shop_order_status' );
    }
} );

Nhưng nó không hoạt động. Tôi cũng đã thử một số phương pháp khác. Xin mọi người có thể giúp tôi về điều này ..

Câu trả lời:


10

Đây là những gì tôi đã sử dụng để tạo trạng thái đơn hàng tùy chỉnh được gọi là "Hóa đơn". Thêm phần này vào chức năng của chủ đề của bạn.php

// New order status AFTER woo 2.2
add_action( 'init', 'register_my_new_order_statuses' );

function register_my_new_order_statuses() {
    register_post_status( 'wc-invoiced', array(
        'label'                     => _x( 'Invoiced', 'Order status', 'woocommerce' ),
        'public'                    => true,
        'exclude_from_search'       => false,
        'show_in_admin_all_list'    => true,
        'show_in_admin_status_list' => true,
        'label_count'               => _n_noop( 'Invoiced <span class="count">(%s)</span>', 'Invoiced<span class="count">(%s)</span>', 'woocommerce' )
    ) );
}

add_filter( 'wc_order_statuses', 'my_new_wc_order_statuses' );

// Register in wc_order_statuses.
function my_new_wc_order_statuses( $order_statuses ) {
    $order_statuses['wc-invoiced'] = _x( 'Invoiced', 'Order status', 'woocommerce' );

    return $order_statuses;
}

Để thêm trạng thái mới của bạn vào trình đơn thả xuống Chỉnh sửa hàng loạt, bạn phải sử dụng javascript. Thêm chức năng của bạn vào admin_footerhành động. Chức năng của tôi sau đó trông giống như thế này:

function custom_bulk_admin_footer() {
            global $post_type;

            if ( $post_type == 'shop_order' ) {
                ?>
                    <script type="text/javascript">
                        jQuery(document).ready(function() {
                            jQuery('<option>').val('mark_invoiced').text('<?php _e( 'Mark invoiced', 'textdomain' ); ?>').appendTo("select[name='action']");
                            jQuery('<option>').val('mark_invoiced').text('<?php _e( 'Mark invoiced', 'textdomain' ); ?>').appendTo("select[name='action2']");   
                        });
                    </script>
                <?php
            }
        }

Hành động được thêm hai lần vì có một hành động hàng loạt ở đầu và hành động khác ở cuối danh sách đơn hàng.


@AparnaMathew rất vui vì nó đang hoạt động. :)
hóa

1
@Nathan Chào bạn! Tôi thực sự làm, nhưng bạn phải thêm các hành động hàng loạt thông qua js. Chỉnh sửa câu trả lời của tôi vì nó quá dài cho một bình luận.
hóa

1
Điều này vẫn áp dụng cho WooC Commerce 3.x?
Amjad

1
@Amjad thực sự là nó, tôi đang sử dụng nó như chúng ta nói. :)
hóa

1
Quả thực nó cũng hoạt động trên 3.x. Cảm ơn @Magnetize!
Amjad

2

Như đã hoàn thành ở trên và không sử dụng JavaScript để thêm các hành động trong danh sách hành động hàng loạt, để thêm / sắp xếp lại các hành động hàng loạt, bạn có thể sử dụng hook bulk_actions-edit-shop_order. Ví dụ:

function rename_or_reorder_bulk_actions( $actions ) {
    $actions = array(
        // this is the order in which the actions are displayed; you can switch them
        'mark_processing'      => __( 'Mark placed', 'textdomain' ), // rewrite an existing status
        'mark_invoiced'        => __( 'Mark invoiced', 'textdomain' ), // adding a new one
        'mark_completed'       => $actions['mark_completed'],
        'remove_personal_data' => $actions['remove_personal_data'],
        'trash'                => $actions['trash'],
    );
    return $actions;
}
add_filter( 'bulk_actions-edit-shop_order', 'rename_or_reorder_bulk_actions', 20 );

Chúc mừng!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.