You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义排序Woocommerce订单批量操作下拉菜单顺序?

WooCommerce批量操作下拉菜单自定义排序方法

要自定义WooCommerce(或其扩展如Germanized for WooCommerce)批量操作下拉菜单的排序,核心是通过对应页面的bulk_actions-{screen_id}过滤器调整操作选项的数组顺序,以下是具体实现方案:

1. 核心逻辑说明

批量操作选项以关联数组形式存储,数组的键是操作的唯一标识(固定值),值是显示在下拉菜单中的文本。我们可以通过取出目标操作→移除原数组中的该操作→将其插入到数组头部的方式实现置顶,同理可调整其他操作的位置。

2. 针对“Mark as paid”置顶的代码示例

场景1:订单列表页面(默认WooCommerce订单模块)

订单列表的批量操作钩子为bulk_actions-edit-shop_order,“Mark as paid”对应的操作键为mark_paid,代码如下:

add_filter( 'bulk_actions-edit-shop_order', 'custom_sort_order_bulk_actions', PHP_INT_MAX );
function custom_sort_order_bulk_actions( $bulk_actions ) {
    // 定义要置顶的操作键名
    $target_key = 'mark_paid';

    // 检查键名是否存在,避免报错
    if ( isset( $bulk_actions[$target_key] ) ) {
        // 取出目标操作
        $top_action = $bulk_actions[$target_key];
        // 从原数组中移除该操作
        unset( $bulk_actions[$target_key] );
        // 重新组合数组:目标操作放在最前面,合并剩余操作
        $bulk_actions = array( $target_key => $top_action ) + $bulk_actions;
    }

    // 可选:将Delete移到末尾(保留你原代码的需求)
    if ( isset( $bulk_actions['delete'] ) ) {
        $delete_action = $bulk_actions['delete'];
        unset( $bulk_actions['delete'] );
        $bulk_actions['delete'] = $delete_action;
    }

    return $bulk_actions;
}

场景2:Germanized for WooCommerce运单页面(对应你提供的代码场景)

运单页面的批量操作钩子为bulk_actions-woocommerce_page_wc-gzd-shipments,需先确认“Mark as paid”对应的操作键名,再替换代码中的$target_key:

add_filter( 'bulk_actions-woocommerce_page_wc-gzd-shipments', 'custom_sort_shipment_bulk_actions', PHP_INT_MAX );
function custom_sort_shipment_bulk_actions( $bulk_actions ) {
    // 替换为运单页面中"Mark as paid"对应的实际键名
    $target_key = 'your_mark_paid_key';

    if ( isset( $bulk_actions[$target_key] ) ) {
        $top_action = $bulk_actions[$target_key];
        unset( $bulk_actions[$target_key] );
        $bulk_actions = array( $target_key => $top_action ) + $bulk_actions;
    }

    // 保留你原有的Delete移到末尾的逻辑
    if ( isset( $bulk_actions['delete'] ) ) {
        $delete_action = $bulk_actions['delete'];
        unset( $bulk_actions['delete'] );
        $bulk_actions['delete'] = $delete_action;
    }

    return $bulk_actions;
}

3. 如何确认操作的键名?

如果不确定目标操作的键名,可以添加以下调试代码,在后台查看PHP错误日志(或开启WP_DEBUG模式),日志中会打印出所有批量操作的键值对:

add_filter( 'bulk_actions-woocommerce_page_wc-gzd-shipments', 'debug_bulk_actions', PHP_INT_MAX );
function debug_bulk_actions( $bulk_actions ) {
    // 打印批量操作数组到错误日志
    error_log( print_r( $bulk_actions, true ) );
    return $bulk_actions;
}

4. 代码使用注意事项

  • 代码可添加到当前主题的functions.php文件,或使用专门的自定义代码插件(如Code Snippets),避免主题更新导致代码丢失。
  • 钩子名称需与对应页面匹配:订单列表用bulk_actions-edit-shop_order,运单页面用你原代码中的bulk_actions-woocommerce_page_wc-gzd-shipments。

内容的提问来源于stack exchange,提问作者Dash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:01:06