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

WooCommerce我的账户订单日期筛选优化:保留筛选栏并添加重置按钮

修复WooCommerce我的账户订单日期筛选问题

针对你遇到的「无订单时筛选字段消失」和「缺少重置按钮」问题,以下是修改后的完整代码:

修改说明

  • 移除表单显示的$has_orders判断,确保无论是否有订单都显示筛选字段
  • 给日期输入框添加回显逻辑,保留用户已选择的日期
  • 添加重置按钮,一键清空筛选参数
  • 优化查询逻辑,仅当存在有效日期参数时才添加日期筛选,避免空参数干扰正常订单查询
add_action('woocommerce_before_account_orders', 'add_order_date_filter_form');
function add_order_date_filter_form()
{   
    // 获取当前已选的日期参数
    $start_date = isset($_GET['start_date']) ? esc_attr($_GET['start_date']) : '';
    $end_date = isset($_GET['end_date']) ? esc_attr($_GET['end_date']) : '';

    // 生成重置URL:移除start_date和end_date参数
    $reset_url = remove_query_arg(array('start_date', 'end_date'), wc_get_account_endpoint_url('orders'));

    echo '</form>
    <form action="#" method="get">          
        <input type="date" name="start_date" value="' . $start_date . '">
        <input type="date" name="end_date" value="' . $end_date . '">
        <input type="submit" value="' . esc_attr__( 'Filter by date', 'your-text-domain' ) . '">
        <a href="' . esc_url($reset_url) . '" class="button">' . esc_attr__( 'Reset Filter', 'your-text-domain' ) . '</a>
    </form>';       
}
    
add_filter( 'woocommerce_my_account_my_orders_query', 'custom_filter_my_account_orders_by_date', 10, 1);
function custom_filter_my_account_orders_by_date($query_args) {
    // 仅当两个日期参数都存在且不为空时,添加日期筛选
    if ( isset($_GET['start_date']) && !empty($_GET['start_date']) && isset($_GET['end_date']) && !empty($_GET['end_date'])){
        $start_date = sanitize_text_field($_GET['start_date']);
        $end_date = sanitize_text_field($_GET['end_date']);

        $query_args['date_query'] = array(
            array(
                'after'     => $start_date,
                'before'    => $end_date,
                'inclusive' => true,
            ),
        );
    }
    return $query_args;
}

细节解析

  1. 表单显示优化:

    • 直接移除原代码中if ($has_orders)的判断,确保筛选表单始终可见
    • 通过$_GET获取已选日期并赋值给输入框value,实现筛选状态回显
    • 使用remove_query_arg生成重置链接,点击后跳转到无筛选参数的订单页面
  2. 查询逻辑优化:

    • 增加!empty()判断,仅当两个日期参数都有效时才添加日期查询条件
    • 用sanitize_text_field处理用户输入的日期,避免潜在安全风险
    • 保留inclusive参数,确保日期范围包含起始和结束当天的订单

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 06:25:25