wordpress - WC:如何通过 billing_phone 或 billing_email 搜索客户
问题描述
在创建订单页面上存在搜索客户的输入。此输入按字段搜索客户:'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(...) 中吗?
解决方案
就我而言,我必须修改此搜索过滤器才能按客户身份号码进行搜索。但是,只能通过修改原始文件。在这种情况下,我不得不禁用 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'
)
);
推荐阅读
- python - 如何以及在哪里获取 json 和 pem 文件以远程连接到内核?
- python - 检查Python DataFrame中的任何值是否为0
- android - 保存和多次更新firebase
- javascript - 从 reducer 中的 store 中读取 state
- c# - AWS lambda 无法访问共享文件夹?
- php - Firebase 索引.php
- amazon-web-services - AWS CodePipeline 错误“当前正在进行对此更改集的操作。请稍后再试此操作”
- firefox - 如何在 Firefox 中截取屏幕质量的屏幕截图?
- php - 按钮没有被放置到 PHP 回显表中
- python - LIFX Z LAN - 快速发送数据包时灯不响应