WooCommerce后台订单列表添加实现订单状态功能的自定义操作按钮
WooCommerce订单列表添加单独自定义状态触发按钮教程
需求说明
我已新增自定义订单状态Manage orders,可触发快递公司提供的插件生成courier packing slips(快递面单)。目前仅能通过*bulk actions(批量操作)*触发该功能,需要在订单列表的操作栏为每个单独订单创建对应的操作按钮,实现与批量操作下拉选项中该订单状态完全一致的功能。
订单页批量操作下拉列表中的对应订单状态参考:
实现代码
直接将以下代码添加到你的WordPress主题functions.php文件或者自定义功能插件中即可生效:
// 1. 在订单列表操作栏添加自定义操作按钮 add_filter( 'woocommerce_admin_order_actions', 'add_custom_manage_order_action_button', 100, 2 ); function add_custom_manage_order_action_button( $actions, $order ) { // 可自行调整允许显示该按钮的订单状态范围 if ( $order->has_status( array( 'processing', 'on-hold', 'pending' ) ) ) { $actions['custom_manage_orders'] = array( 'url' => wp_nonce_url( admin_url( 'admin-ajax.php?action=custom_manage_orders&order_id=' . $order->get_id() ), 'custom_manage_orders' ), 'name' => __( 'Manage orders', 'woocommerce' ), 'action' => "custom-manage-orders", ); } return $actions; } // 2. 给自定义按钮添加样式(可选,可自行调整图标、颜色) add_action( 'admin_head', 'add_custom_order_action_button_css' ); function add_custom_order_action_button_css() { ?> <style> .wc-action-button.custom-manage-orders::after { content: "\f315"; /* 对应dashicons的快递箱图标,可替换为其他图标编码 */ font-family: Dashicons; color: #2271b1; } </style> <?php } // 3. 处理按钮点击逻辑,和批量操作逻辑保持一致 add_action( 'wp_ajax_custom_manage_orders', 'process_custom_manage_orders_action' ); function process_custom_manage_orders_action() { // 校验权限和安全参数 if ( ! current_user_can( 'edit_shop_orders' ) || ! isset( $_GET['order_id'] ) || ! wp_verify_nonce( $_GET['_wpnonce'], 'custom_manage_orders' ) ) { wp_die( __( '权限校验失败', 'woocommerce' ) ); } $order = wc_get_order( absint( $_GET['order_id'] ) ); if ( ! $order ) { wp_die( __( '无效订单', 'woocommerce' ) ); } // 请将下方的manage-orders替换为你实际自定义订单状态的slug $order->update_status( 'manage-orders', __( '通过订单列表单独操作触发', 'woocommerce' ) ); $order->save(); // 操作完成后跳转回订单列表页 wp_redirect( admin_url( 'edit.php?post_type=shop_order' ) ); exit; }
注意事项
- 必须替换代码中的
manage-orders为你实际创建的自定义订单状态的slug,否则无法触发对应逻辑 - 如果你原来的批量操作触发面单生成不是绑定在订单状态变更钩子上,可以直接在第三步逻辑中调用快递插件提供的生成面单的方法,保证和批量操作的效果完全一致
- 可根据业务需求自行调整按钮的显示文本、图标、以及允许显示按钮的订单状态范围
内容的提问来源于stack exchange,提问作者Venkat Guna
相关产品推荐
相关产品推荐

