使用woocommerce内置csv导入器导入时,如果csv中不存在SKU,则删除产品



我正在使用wordpress的wooccommerce插件来建立一个商店。

似乎内置的CSV导入程序没有删除不在用于创建/更新当前产品的CSV文件中的产品的选项:

例如:如果在我的商店里有SKU的产品'a1'、'b1'和'c1'存在,管理员导入带有SKU的产品列表'a1','b1'应删除/删除SKU为

'c1'我查看了产品进口商和抽象进口商的代码,似乎不存在这样的选择。

有人知道如何在不安装另一个插件的情况下解决这个问题吗?也许是一个钩子,用于导入的CSV文件的SKU被聚合,这样我就可以从数据库中加载现有的SKU,与CSV中的SKU进行比较,然后自己删除它们?

感谢您的任何想法/帮助!谨致问候,先生

我可能会使用几个钩子和瞬态:

add_action( 'woocsv_start_import', 'action_woocsv_start_import', 10, 0 ); 

使用此操作创建瞬态,该瞬态将在文件中存储所有ID/SKU的数组

add_filter( 'woocsv_get_product_id', 'filter_woocsv_get_product_id', 10, 2 );
function filter_woocsv_get_product_id( $product_id, $sku ) { 
// make filter magic happen here... 
return $product_id; 
}

使用此筛选器将ID添加到瞬态中存储的数组中(确保返回product_ID(

add_action( 'woocsv_after_save', 'action_woocsv_after_save', 10, 1 ); 
function action_woocsv_after_save( $instance ) { 
// make action magic happen here... 
}

使用此操作可以访问(和删除(瞬态。现在,您可以访问所有ID的/SKU,您可以使用它们来查找未包含的ID并删除它们。

就我个人而言,我只会使用WP All Import

编辑:

我觉得无聊,所以我写了逻辑。对我来说,这似乎有点低效,但应该是诀窍。未经测试。


add_action( 'woocsv_start_import', 'action_woocsv_start_import', 10, 0 ); 
function action_woocsv_start_import(){
set_transient('namespace_skus_in_csv',array(),0);
}
add_filter( 'woocsv_get_product_id', 'filter_woocsv_get_product_id', 10, 2 );
function filter_woocsv_get_product_id( $product_id, $sku ) { 
$skus = get_transient('namespace_skus_in_csv');
$skus[] = $sku;
set_transient('namespace_skus_in_csv',$ids,0);
return $product_id; 
}
add_action( 'woocsv_after_save', 'action_woocsv_after_save', 10, 1 ); 
function action_woocsv_after_save( $instance ) { 
$skus = get_transient('namespace_skus_in_csv');
delete_transient('namespace_skus_in_csv');
$args = array(
'post_type' => 'product',
'posts_per_page' => -1
);
$loop = new WP_Query( $args );
if ( $loop->have_posts() ){ 
while ( $loop->have_posts() ){ 
$loop->the_post();
global $product;
$sku = $product->get_sku();
if(!array_search($sku, $skus)){
wp_delete_post(get_the_ID());
}
}
}
wp_reset_postdata();
}

最新更新