我如何通过 billing_customer_number 搜索客户 Woocommerce

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

我正在寻找方法,如何在管理面板->用户->搜索用户中修改搜索过滤器。 默认情况下,如果您需要通过 user_login'、'user_url'、'user_email'、'user_nicename'、'display_name' 查找用户,它可以正常工作。但我需要通过 billing_customer_number/ 找到用户 我找不到该怎么做!

已找到包含以下代码的 class-wc-customer-data-store.php 文件:

$query = new WP_User_Query(
        apply_filters(
            'woocommerce_customer_search_customers',
            array(
                'search'         => '*' . esc_attr( $term ) . '*',
                'search_columns' => array( 'user_login', 'user_url', 'user_email', 'user_nicename', 'display_name'),
                'fields'         => 'ID',
                'number'         => $limit,
            ),
            $term,
            $limit,
            'main_query'
        )
    );

之后在Array中添加billing_customer_number,但不起作用。请帮忙!

接下来我尝试编辑特殊元查询:

$query2 = new WP_User_Query(
        apply_filters(
            'woocommerce_customer_search_customers',
            array(
                'fields'     => 'ID',
                'number'     => $limit,
                'meta_query' => array(
                    'relation' => 'OR',
                    array(
                        'key'     => 'first_name',
                        'value'   => $term,
                        'compare' => 'LIKE',
                    ),
                    array(
                        'key'     => 'last_name',
                        'value'   => $term,
                        'compare' => 'LIKE',
                    ),
                    // Adding custom search by number
                    array(
                        'key'     => 'billing_customer_number',
                        'value'   => $term,
                        'compare' => 'LIKE',
                    ),
                ),
            ),
            $term,
            $limit,
            'meta_query'
        )
    );

添加billing_customer_number,但还是不行。

我还尝试用代码片段解决问题:

    add_filter ('woocommerce_customer_search_customers', 'searching_filter_for_users_by_their_account_numbers', 10, 4);
function searching_filter_for_users_by_their_account_numbers ($filter, $term, $limit, $type){
    if ($type == 'meta_query'){
        $filter['meta_query'][] = array('key' => 'billing_customer_number', 'value' => $term, 'compare' => 'LIKE'); 
    } 
    return $filter; 
}
wordpress search woocommerce filter metadata
1个回答
0
投票

下一个代码帮助了我:

add_action( 'pre_user_query', 'project_pre_user_search'  );
function project_pre_user_search( $query ) {
    global $wpdb;
    global $pagenow;

    if (is_admin() && 'users.php' == $pagenow) {
        if( empty($_REQUEST['s']) ){return;}
        $query->query_fields = 'DISTINCT '.$query->query_fields;
        $query->query_from .= ' LEFT JOIN '.$wpdb->usermeta.' ON '.$wpdb->usermeta.'.user_id = '.$wpdb->users.'.ID';
        $query->query_where = "WHERE 1=1 AND (user_login LIKE '%".$_REQUEST['s']."%' OR ID = '".$_REQUEST['s']."' OR (meta_value LIKE '%".$_REQUEST['s']."%' AND meta_key = 'billing_customer_number'))";
    }
    return $query;
}

谢谢大家。

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