У меня есть XML-лента продуктов, WordPress (последняя версия), WpAllImport Pro (последняя версия) и WooCommerce (последняя версия), и я хочу периодически обновлять свои продукты.
Чтобы обновить мои продукты, мне нужно что-то сделать со старыми, которые исчезают из XML.У WPAI есть эта опция с именем «Удалить продукты, которых больше нет в вашем файле», и пользовательская функция для этого: «function my_is_post_to_delete ($ is_post_to_delete, $ post_id, $ import)»
Теперь проблема в том, чтоВ моем магазине полно внешних товаров, и для этого типа товара у меня нет товара.
Мне нужно изменить тип товара с Внешнего на Простой, а затем обновить его запас и затем его статус.на «нет в наличии».
У меня есть следующий код:
<?php
function my_is_post_to_delete( $is_post_to_delete, $post_id, $import ) {
if ( $import->id == 2 ) {
$product = wc_get_product( $post_id );
$sku = $product->get_sku();
wp_set_object_terms($post_id, 'simple','product_type');
update_post_meta($post_id, '_manage_stock', 'yes');
//$product_id = $wpdb->get_var( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key='_sku' AND meta_value='%s' LIMIT 1", $sku ) );
// Get an instance of the WC_Product object
//$product = new WC_Product( $product_id );
// Get product stock quantity and stock status
//$stock_quantity = $product->get_stock_quantity();
//$stock_status = $product->get_stock_status();
// Set product stock quantity (zero) and stock status (out of stock)
//$product->set_stock_quantity();
//$product->save();
$woocmmerce_instance = new WC_Product( $post_id );
$new_quantity=wc_update_product_stock( $woocmmerce_instance, $quantity);
$product->set_stock_status('outofstock');
// Save the data and refresh caches
$product->save();
//file_put_contents(get_home_path() .'/result.stef', $product->get_sku().'\n' );
return false;
}
}
add_filter( 'wp_all_import_is_post_to_delete', 'my_is_post_to_delete', 10, 3 );
?>
, но я получаю сообщение об ошибке:
CRITICAL Uncaught WC_Data_Exception: External products cannot be stock managed. in /home/etc/public_html/qcd/wp-content/plugins/woocommerce/includes/abstracts/abstract-wc-data.php:810
Stack trace:
#0 /home/etc/public_html/qcd/wp-content/plugins/woocommerce/includes/class-wc-product-external.php(120): WC_Data->error('product_externa...', 'External produc...')
#1 /home/etc/public_html/qcd/wp-content/uploads/wpallimport/functions.php(33): WC_Product_External->set_stock_status('outofstock')
#2 /home/etc/public_html/qcd/wp-includes/class-wp-hook.php(286): my_is_post_to_delete(true, '3329', Object(PMXI_Import_Record))
#3 /home/etc/public_html/qcd/wp-includes/plugin.php(208): WP_Hook->apply_filters(true, Array)
#4 /home/etc/public_html/qcd/wp-content/plugins/wp-all-import-pro/models/import/record.php(4169): apply_filters('wp_all_import_i...', true, '3329', Object(PMXI_Import_Record))
#5 /home/etc/public_html/qcd/wp-content/plugins/wp-all-import-pro/controllers/admin/import.php in /home/etc/public_html/qcd/wp-content/plugins/woocommerce/includes/abstracts/abstract-wc-data.php on line 810
В качестве последнего примечания: Я хочу«Вместо того, чтобы удалять мои продукты», чтобы сделать их на складе.