WP All Import. Эпизод 4. Обновление остатков и цен
Частая задача, когда уже есть товары на сайте, требуется обновлять только остатки или только цены, или и то и другое.
Алгоритм обновления
Шаг первый
Подразумевается, что на сайте уже заведены товары. Для обновления создаем новый импорт и обязательно указывается что используются существующие записи.
Шаг второй
При настройке данных, указываем только те данные которые необходимо обновить. Так как обновляем цены и остатки, то заполняем соответствующие поля
к содержаниюШаг третий
При настройке импорта указываем данные, по которым будет происходить сравнение записей.
Шаг четвертый
Этот шаг вещь индивидуальная. Зависит от исходных данных. Но если у вас проблемы с обновлением остатков, то данный способ вам подойдет.
Конкретно в этом примере, при заведении товаров создаются одинаковые артикулы в одной из вариаций и родительском товаре
Из-за этого при обновлении остатков включается режим управления запасами на уровне родительского товара, при котором значение остатка записывается по артикулу.
Это проблема. Так как товары на сайте будут отображаться некорректно. Для решения этой проблемы необходимо, чтобы у родительского товара был уникальный артикул.
Средствами WP All Import это проблему решить мне не удалось. Потому написал небольшой сниппет, который при создании товара будет присваивать ему нужный артикул взятый из исходного файла.
/**
* Обновление основного артикула
*
* @param int $id идентификатор сохраняемой записи
* @param object $xml данные загрузки
* @param bool $is_update проверка на обновление
*
* @throws \WC_Data_Exception
*
* @sourcecode https://wpruse.ru/courses/plugin-serial-wp-all-import/wp-all-import-epizod-4/
* @author Artem Abramovich
*/
function art_added_general_sku( $id, $xml, $is_update ) {
if ( ! $id ) {
return;
}
$product = wc_get_product( $id );
if ( ! $product ) {
return;
}
$general_sku = (string) $xml->article;
if ( 'variable' === $product->get_type() ) {
$pos = strpos( $product->get_sku(), $general_sku );
if ( false !== $pos ) {
$product->set_sku( $general_sku );
$product->save();
}
}
}
add_action( 'pmxi_saved_post', 'art_added_general_sku', 10, 3 );
functions.php
через дочернюю тему или например пустой плагин. Прежде чем, вносить какие либо изменения, сделайте бекап сайта.