在 WooCommerce 我的帐户 > 订单页面中添加搜索功能

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

我正在尝试将搜索栏添加到前端客户帐户仪表板上的 WooCommerce 订单页面,以获取特定用户角色(不想向所有客户显示)。

我觉得我已经很接近了,但下面的代码不起作用。我只需要按订单号搜索即可。此代码会生成“尚未下订单”。尽管我的测试帐户中有很多订单,但还是有结果。

我还注意到,在进行搜索时,URL 并没有像我通常期望的那样改变,所以我想知道这是否是代码有问题的提示......?

function add_search_to_orders() {
    $allowed_roles = array('administrator', 'shop_manager');

    $user = wp_get_current_user();
    $user_roles = (array) $user->roles;

    if (array_intersect($allowed_roles, $user_roles)) {
        echo '<form method="post" id="orders-search-form">
                <input type="text" name="search_orders" placeholder="Search by order number..." />
                <input type="hidden" name="order_status" value="wc-completed" />
                <button type="submit">Search</button>
              </form>';
    }
}
add_action('woocommerce_before_account_orders', 'add_search_to_orders');

function search_all_orders_by_number($args) {
    if (isset($_POST['search_orders']) && !empty($_POST['search_orders'])) {
        $search_term = sanitize_text_field($_POST['search_orders']);
        $args['meta_query'] = array(
            array(
                'key'     => '_order_number',
                'value'   => $search_term,
                'compare' => 'LIKE'
            )
        );
    }
    return $args;
}
add_filter('woocommerce_my_account_my_orders_query', 'search_all_orders_by_number');
php wordpress woocommerce orders account
1个回答
0
投票

您提供的代码适用于“_order_number”meta_key,但由于现在默认启用高性能订单存储并使用 WooCommerce 自定义数据库表,因此您的所有订单号都需要使用

WC_Data
add_meta_data()
update_meta_data() 保存
方法,而不是使用 WordPress post 元函数。

请参阅:WooCommerce HPOS 同步后,通过结账添加的订单自定义字段会丢失

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