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

为WooCommerce后台订单列表添加支付方式筛选下拉框及报错解决

问题原因
  • restrict_manage_posts钩子在订单列表页顶部加载筛选控件时触发,此时还未进入订单列表的循环逻辑,全局变量$the_order未被初始化,值为null,调用其方法自然会抛出错误。
  • 原有逻辑即使拿到单个订单的支付方式,也只是单个字符串,无法遍历生成所有可选的支付方式筛选选项,不符合需求。
  • 筛选逻辑中使用的meta键错误,WooCommerce订单的支付方式存储的自定义字段键为_payment_method,不是payment_method,会导致筛选失效。
修复后完整代码

你原有的自定义列代码无需修改,替换新增的筛选代码为以下内容即可:

add_action('restrict_manage_posts', 'add_shop_order_filter_by_payment');
function add_shop_order_filter_by_payment(){
    global $pagenow, $typenow;

    if( 'shop_order' === $typenow && 'edit.php' === $pagenow ) {
        // 获取站点所有已启用的支付网关
        $available_gateways = WC()->payment_gateways->get_available_payment_gateways();
        $filter_id   = 'payment_method';
        $current     = isset($_GET[$filter_id])? wc_clean($_GET[$filter_id]) : '';

        echo '<select name="'.$filter_id.'">
        <option value="">'.__( 'Filter by payment method', 'woocommerce' )."</option>";

        // 遍历所有支付网关生成选项
        foreach( $available_gateways as $gateway_id => $gateway ) {
            printf(
                '<option value="%s" %s>%s</option>',
                esc_attr($gateway_id),
                selected($gateway_id, $current, false),
                esc_html($gateway->get_title())
            );
        }
        echo '</select>';
    }
}

add_filter( 'request', 'process_admin_shop_order_filtering_by_payment', 99 );
function process_admin_shop_order_filtering_by_payment( $vars ) {
    global $pagenow, $typenow;

    $filter_id = 'payment_method';

    if ( $pagenow == 'edit.php' && 'shop_order' === $typenow
    && isset( $_GET[$filter_id] ) && ! empty($_GET[$filter_id]) ) {
        // 修正meta键为WooCommerce默认的带下划线格式
        $vars['meta_key']   = '_payment_method';
        $vars['meta_value'] = wc_clean($_GET[$filter_id]);
        $vars['orderby']    = 'meta_value';
    }
    return $vars;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:24:04