Чтобы при последующей выгрузке товаров плагином Wp all import товары не вошедшие в файл удалялись нужно сначала сделать изначальный импорт (New items), а потом в этом же импорте уже делать обновления (Existing Items).
При повторном импорте чтобы удалялись файлы которых нет в выгрузке нужно включить опцию «Delete Товары that are no longer present in your file»:
Альтернативный способ скрывать товары которых нет в выгрузке
Предположим что на сайте есть 3 крупные категории отличающиеся параметрами товаров. У двух групп есть ряд разных атрибутов, у третьей группы есть ряд подкатегорий. И предположим что для каждой настроен свой импорт. т.к. у каждого импорта есть свой ID то мы можем подключится к хуку и делать перед импортом все товары данной категории черновиками, а в процессе импорта те товары которые есть будут публиковаться при обновлении.
function before_xml_import( $import_id ) {
// Only Run for import ID 34.
if ($import_id == 34) {
$posts = get_posts( array(
'numberposts' => -1,
'post_type' => 'product',
'product_cat' => 'opravy',
'post_status' => 'publish'
) );
foreach( $posts as $post ){
setup_postdata($post);
//echo $post->ID.', ';
wp_update_post( array('ID' => $post->ID, 'post_status' => 'draft') );
}
wp_reset_postdata();
}
if ($import_id == 35) {
$posts = get_posts( array(
'numberposts' => -1,
'post_type' => 'product',
'product_cat' => 'solncezashhitnye-ochki',
'post_status' => 'publish'
) );
foreach( $posts as $post ){
setup_postdata($post);
//echo $post->ID.', ';
wp_update_post( array('ID' => $post->ID, 'post_status' => 'draft') );
}
wp_reset_postdata();
}
if ($import_id == 32) {
$posts = get_posts( array(
'numberposts' => -1,
'post_type' => 'product',
'product_cat' => 'aksessuary',
'post_status' => 'publish'
) );
foreach( $posts as $post ){
setup_postdata($post);
//echo $post->ID.', ';
wp_update_post( array('ID' => $post->ID, 'post_status' => 'draft') );
}
wp_reset_postdata();
}
}
add_action('pmxi_before_xml_import', 'before_xml_import', 10, 1);
Ошибки при импорте
Если импортировать записи через Manage Imports (>Run) возникает ошибка: Your server terminated the import process (при этом при новом импорте данной ошибки может и не быть). При беглом изучении кажется что это ошибка сервера, но это зачастую не так. Просто данная ошибка может включать в себя диапазон любых php-ошибок. При возникновении данной ошибки нужно смотреть error_log.
В моем случае данная ошибка была из-за функции скрытия версии скриптов:
function script_loader_src_example( $src ) { return remove_query_arg( 'ver', $src ); }
add_filter( 'script_loader_src', 'script_loader_src_example' );
add_filter( 'style_loader_src', 'script_loader_src_example' );
Обернул функцию в условие и все заработало:
// Отключаем в адрессе ссылки версии скриптов
if( !is_admin() ) {
function script_loader_src_example( $src ) { return remove_query_arg( 'ver', $src ); }
add_filter( 'script_loader_src', 'script_loader_src_example' );
add_filter( 'style_loader_src', 'script_loader_src_example' );
}
[site-socialshare]