在创建订单页面上,存在搜索客户的输入。 此输入按字段搜索客户:“ 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(...)中吗?
答案 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'
)
);