按日期向 WooCommerce 中的“我的帐户订单”添加过滤器

问题描述 投票:0回答:1

这是该函数,它使我能够在前端(我的帐户)中为 WooCommerce 订单按日期字段创建过滤器。它正在工作,但是当我选择没有订单的日期时,过滤器字段消失并且无法再次过滤,我必须手动从 URL 中删除添加的参数。

我想实现以下目标:当没有订单时,过滤器字段必须仍然可见,以便能够选择不同的日期,并且还必须出现重置按钮来重置过滤器。

这是我当前的代码:

add_action('woocommerce_before_account_orders', 'add_form');
function add_form($has_orders)
{   
    if ($has_orders) {   
        echo 
        '</form>
        <form action="#" method="get">          
        <input type="date" name="start_date">
        <input type="date" name="end_date">
        <input type="submit" value="' . esc_attr__( 'Filter by date', 'your-text-domain' ) . '">
        </form>';       
    }
}
    
add_filter( 'woocommerce_my_account_my_orders_query', 'custom_woocommerce_my_account_my_orders_query', 10, 1);
function custom_woocommerce_my_account_my_orders_query($array) {
    $start_date='';
    $end_date='';
    if ( isset($_GET['start_date']) && isset($_GET['end_date'])){
        $start_date = $_GET['start_date'];
        $end_date = $_GET['end_date'];
    }
    $array['date_query'] = array(
        array(
            'after'  => $start_date, //start_date 2021-11-16
            'before' => $end_date, //end_date
            'inclusive' => true,
        ),
    );
    return $array;
}
php wordpress woocommerce hook-woocommerce orders
1个回答
0
投票

由于 WooCommerce 订单查询使用 WC_Order_Query,您需要一些不同的东西:

add_action('woocommerce_before_account_orders', 'add_form');
function add_form($has_orders)
{   
    if ($has_orders) {
        $start_date = $end_date = ''; // Initializing;
        if ( isset($_GET['start_date']) && ! empty($_GET['start_date']) ) {
            $start_date = esc_attr($_GET['start_date']);
        }
        if ( isset($_GET['end_date']) && ! empty($_GET['end_date']) ) {
            $end_date = esc_attr($_GET['end_date']);
        }
        
        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' ) . '">
        </form>';       
    }
}

add_filter( 'woocommerce_my_account_my_orders_query', 'custom_my_account_orders', 10, 1 );
function custom_my_account_orders( $args ) {
    $start_date = $end_date = '';// Initializing;
        
    if ( isset($_GET['start_date']) && ! empty($_GET['start_date']) ) {
        $start_date = esc_attr($_GET['start_date']);
    }
    if ( isset($_GET['end_date']) && ! empty($_GET['end_date']) ) {
        $end_date = esc_attr($_GET['end_date']);
    }

    if ( $start_date && ! $end_date ) {
        $args['date_created'] = '>='.$start_date;
    } elseif ( ! $start_date && $end_date ) {
        $args['date_created'] = '<='.$end_date;
    } elseif ( $start_date && $end_date ) {
        $args['date_created'] = $start_date.'...'.$end_date;
    }
    return $args;
}

代码位于子主题的functions.php 文件中(或插件中)。已测试并有效。

© www.soinside.com 2019 - 2024. All rights reserved.