如何在WooCommerce中创建自定义订单状态!

时间:2015-08-21 作者:Aparna Mathew

我尝试了以下代码来创建自定义状态。

add_action( \'init\', function() {
    $term = get_term_by( \'name\', \'shipped\', \'shop_order_status\' );
    if ( ! $term ) {
        wp_insert_term( \'shipped\', \'shop_order_status\' );
    }
} );
但它不起作用。我还尝试了其他一些方法。谁能帮我一下吗。。

2 个回复
最合适的回答,由SO网友:Magnetize 整理而成

这就是我用来创建名为“已开票”的自定义订单状态的内容。将此添加到主题的功能中。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;
}
为了将您的新状态添加到管理批量编辑下拉列表中,您必须使用javascript。将您的函数添加到admin_footer 行动我的函数如下所示:

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
            }
        }
该操作添加了两次,因为订单列表的顶部有一个批量操作,底部有另一个批量操作。

SO网友:Vlăduț Ilie

作为上述操作的补充,为了不使用JavaScript在批量操作列表中添加操作,为了添加/重新排序批量操作,您可以使用钩子bulk_actions-edit-shop_order. 例如:

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 );
干杯!

结束

相关推荐

Global functions on WPMU

我在一个多站点环境中工作,所有站点都是相关的。最近的许多发展都要求我将某些功能复制并粘贴到许多不同的主题文件夹中,如果我需要到处更新它们,就会出现问题。拥有全局“functions.php”文件的最佳方式是什么?我的想法是要么在themes文件夹中包含一个文件并包含它,要么创建一个插件并启用该插件。