糟糕的是,我在“init”hook中使用了add\\u filter()而不是add\\u action()。
以下链接是添加自定义订单状态和电子邮件通知的完美解决方案。我的Woocommerce版本是5.8.0版。
https://www.codegrepper.com/code-examples/whatever/woocommerce_email_actions
代码段如下所示:
// Add custom status to order list
add_action( \'init\', \'register_custom_post_status\', 10 );
function register_custom_post_status() {
register_post_status( \'wc-tree\', array(
\'label\' => _x( \'Waiting in tree\', \'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( \'Waiting in tree <span class="count">(%s)</span>\', \'Waiting in tree <span class="count">(%s)</span>\', \'woocommerce\' )
) );
}
// Add custom status to order page drop down
add_filter( \'wc_order_statuses\', \'custom_wc_order_statuses\' );
function custom_wc_order_statuses( $order_statuses ) {
$order_statuses[\'wc-tree\'] = _x( \'Waiting in tree\', \'Order status\', \'woocommerce\' );
return $order_statuses;
}
// Adding custom status \'tree\' to admin order list bulk dropdown
add_filter( \'bulk_actions-edit-shop_order\', \'custom_dropdown_bulk_actions_shop_order\', 20, 1 );
function custom_dropdown_bulk_actions_shop_order( $actions ) {
$actions[\'mark_tree\'] = __( \'Mark Waiting in tree\', \'woocommerce\' );
return $actions;
}
// Enable the action
add_filter( \'woocommerce_email_actions\', \'filter_woocommerce_email_actions\' );
function filter_woocommerce_email_actions( $actions ){
$actions[] = \'woocommerce_order_status_wc-tree\';
return $actions;
}
// Send Customer Processing Order email notification when order status get changed from "tree" to "processing"
add_action(\'woocommerce_order_status_changed\', \'custom_status_email_notifications\', 20, 4 );
function custom_status_email_notifications( $order_id, $old_status, $new_status, $order ){
if ( $old_status == \'tree\' && $new_status == \'processing\' ) {
// Get all WC_Email instance objects
$wc_emails = WC()->mailer()->get_emails();
// Sending Customer Processing Order email notification
$wc_emails[\'WC_Email_Customer_Processing_Order\']->trigger( $order_id );
}
}