这听起来很简单,但如果您有数百种产品,并且需要在woocommerce上搜索多个sku,则管理员端无法使用。 假设您需要验证600种产品,您必须: 手动将一个sku添加到搜索栏 点击搜索 得到结果 重新开始 你不能通过空间或空间分开。
我搜索过,没有人有答案,或者他们提出的问题没有得到解答。 人们如何在woocommerce管理员端搜索多个sku或产品名称?
答案 0 :(得分:0)
首先..你提到你需要验证很多产品(600),需要多次sku搜索。在我看来你会手动这样做吗? 我建议在PHP中创建一个产品循环,在那里进行验证。这可能会为你节省很多时间,你可以重复使用它。
现在问题...使用多个sku's搜索woo产品。
我同意互联网上的许多信息都有点误导。之前我已经完成了这个,并且我总是使用pre_get_posts
挂钩在运行之前更改WP(搜索)查询。
测试后,显示查询未设置为搜索,搜索值为空...
因此,woocommerce必须进行自定义搜索查询。幸运的是,我很快找到了mircian's post.
WooCommerce使用数据存储作为其帖子类型(产品,订单等),并且还使用自定义功能进行搜索。在这种情况下,它被称为“search_products”,并且它执行自定义查询,该查询基本上返回要用于结果的id数组。
我修改了他的功能,用多个sku进行搜索。 在您的(子)主题的functions.php。
中插入该函数使用'|'作为SKU分隔符。示例:'1234 | 1235 | 1236'
测试:
/**
* Use multiple sku's to find WOO products in wp-admin
* NOTE: Use '|' as a sku delimiter in your search query. Example: '1234|1235|1236'
**/
function woo_multiple_sku_search( $query_vars ) {
global $typenow;
global $wpdb;
global $pagenow;
if ( 'product' === $typenow && isset( $_GET['s'] ) && 'edit.php' === $pagenow ) {
$search_term = esc_sql( sanitize_text_field( $_GET['s'] ) );
if (strpos($search_term, '|') == false) return $query_vars;
$skus = explode('|',$search_term);
$meta_query = array(
'relation' => 'OR'
);
if(is_array($skus) && $skus) {
foreach($skus as $sku) {
$meta_query[] = array(
'key' => '_sku',
'value' => $sku,
'compare' => '='
);
}
}
$args = array(
'posts_per_page' => -1,
'post_type' => 'product',
'meta_query' => $meta_query
);
$posts = get_posts( $args );
if ( ! $posts ) return $query_vars;
foreach($posts as $post){
$query_vars['post__in'][] = $post->ID;
}
}
return $query_vars;
}
add_filter( 'request', 'woo_multiple_sku_search', 20 );