使用 php 在 woocommerce 订单页面添加日期范围过滤器

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

我正在尝试在我的厕所订单页面上添加“按日期范围过滤”。我目前正在使用下面的代码,但是,如果我选择 1 个日期(从 9 月 1 日到 9 月 1 日),它会继续填充我选择的日期之前和之后的其他订单。我做错了什么?

function ts_add_date_range_filter($post_type) {
    if ('shop_order' === $post_type) {
        ?>
        <label for="from_date"><?php _e('From Date:', 'woocommerce'); ?></label>
        <input type="date" id="from_date" name="from_date" value="<?php echo isset($_GET['from_date']) ? esc_attr($_GET['from_date']) : ''; ?>" />

        <label for="to_date"><?php _e('To Date:', 'woocommerce'); ?></label>
        <input type="date" id="to_date" name="to_date" value="<?php echo isset($_GET['to_date']) ? esc_attr($_GET['to_date']) : ''; ?>" />
        <?php
    }
}
add_action('woocommerce_order_list_table_restrict_manage_orders', 'ts_add_date_range_filter');

function ts_filter_orders_by_date_range($vars) {
    if (!isset($vars['date_query'])) {
        $vars['date_query'] = array();
    }

    if (isset($_GET['from_date']) && !empty($_GET['from_date'])) {
        $vars['date_query'][] = array(
            'after'     => sanitize_text_field($_GET['from_date']),
            'inclusive' => true,
        );
    }

    if (isset($_GET['to_date']) && !empty($_GET['to_date'])) {
        $vars['date_query'][] = array(
            'before'    => sanitize_text_field($_GET['to_date']),
            'inclusive' => true,
        );
    }

    return $vars;
}
add_filter('woocommerce_order_list_table_prepare_items_query_args', 'ts_filter_orders_by_date_range');
php woocommerce admin hook-woocommerce orders
1个回答
0
投票

$post_type

操作钩子没有
woocommerce_order_list_table_restrict_manage_orders
参数
这就是为什么你当前的代码没有显示任何东西

请注意,

woocommerce_order_list_table_restrict_manage_orders
挂钩仅在启用高性能订单存储(HPOS)时在管理订单列表中可用。由于 HPOS 使用自己的 WooCommerce 自定义表,而不是 WordPress 帖子表,因此没有帖子类型,而只是一个订单类型

请使用以下内容:

add_action('woocommerce_order_list_table_restrict_manage_orders', 'add_wc_orders_date_range_filter', 15); function add_wc_orders_date_range_filter() { ?> <label for="from_date"><?php esc_html_e('From Date:', 'woocommerce'); ?></label> <input type="date" id="from_date" name="from_date" value="<?php echo isset($_GET['from_date']) ? esc_attr($_GET['from_date']) : ''; ?>" /> <label for="to_date"><?php esc_html_e('To Date:', 'woocommerce'); ?></label> <input type="date" id="to_date" name="to_date" value="<?php echo isset($_GET['to_date']) ? esc_attr($_GET['to_date']) : ''; ?>" /> <?php } add_filter('woocommerce_order_list_table_prepare_items_query_args', 'process_wc_orders_from_date_range_filter'); function process_wc_orders_from_date_range_filter( $query_args ) { if (!isset($query_args['date_query'])) { $query_args['date_query'] = array(); } if (isset($_GET['from_date']) && !empty($_GET['from_date'])) { $query_args['date_query'][] = array( 'after' => esc_attr($_GET['from_date']), 'inclusive' => true, ); } if (isset($_GET['to_date']) && !empty($_GET['to_date'])) { $query_args['date_query'][] = array( 'before' => esc_attr($_GET['to_date']), 'inclusive' => true, ); } return $query_args; }
已测试且有效。

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