WC:如何通过billing_phone或billing_email搜索客户

时间:2018-08-29 19:50:23

标签: wordpress woocommerce

在创建订单页面上,存在搜索客户的输入。 此输入按字段搜索客户:“ user_login”,“ user_url”,“ user_email”,“ user_nicename”,“ display_name”

这是这里的信息:

  

wp-content / plugins / woocommerce / includes / data-stores / class-wc-customer-data-store.php

public function search_customers( $term, $limit = '' ) {
    $results = apply_filters( 'woocommerce_customer_pre_search_customers', false, $term, $limit );
    if ( is_array( $results ) ) {
        return $results;
    }
    error_log('search_customers NEXT STEP!!!');

    $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'
        )
    );

    $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',
                    ),
                ),
            ), $term, $limit, 'meta_query'
        )
    );
    error_log('search_customers - WHAT IS IT?');

    $results = wp_parse_id_list( array_merge( (array) $query->get_results(), (array) $query2->get_results() ) );

    if ( $limit && count( $results ) > $limit ) {
        $results = array_slice( $results, 0, $limit );
    }

    return $results;
}

我的问题是:如何将自己的列添加到search_columns?我需要在此处添加列“ billing_phone”。 在实验过程中,我更改了search_customers(...)$ query函数,例如:

$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', 'billing_phone' ),
                'fields'         => 'ID',
                'number'         => $limit,
            ), $term, $limit, 'main_query'
        )
    );

这不是好方法,但我不知道该怎么做。

但是无论如何,这种“修复”都不起作用。

如何为搜索客户添加自己的列?我可以按另一列搜索客户,然后出现在search_customers(...)中吗?

1 个答案:

答案 0 :(得分:0)

就我而言,我必须修改此搜索过滤器才能按客户身份号码进行搜索。但是,只能通过修改原始文件。在这种情况下,我不得不禁用 WooCommerce 更新。

所以第一个查询 $query = new WP_User_Query() 正在 wp_user 表中查找列值。但是,第二个查询在 wp_user_meta 中查找列值。所以在我的例子中,代码如下(其中 billing_cedula_ruc 是我为每个客户保存的用户元数据之一):

$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',
                    ),
                    // K&I add search by client RUC
                    array(
                        'key'     => 'billing_cedula_ruc',
                        'value'   => $term,
                        'compare' => 'LIKE',
                    ),
                ),
            ),
            $term,
            $limit,
            'meta_query'
        )
    );