Вопрос или проблема
При импорте и создании/обновлении продуктов в WooCommerce поля, используемые в и ATUM Stock Management, не обновляются.
На форуме stockmanagementlabs один пользователь предложил добавить следующее в functions.php:
add_action('pmxi_saved_post', 'post_saved', 10, 1);
function post_saved($id) {
// получить пользовательское поле
$purchase_price = get_post_meta($id, '_atum_purchase_price', true);
// Вставить поле в базу данных
if(isset($purchase_price)){
$wpdb->update(
"{$wpdb->prefix}atum_product_data",
array(
'column1' => 'purchase_price',
'column2' => $purchase_price
),
array(
'product_id' => $id
),
array(
'%s',
'%d'
),
array( '%d' )
);
}
// Очистить ненужное пользовательское поле (ОПЦИОНАЛЬНО)
delete_post_meta( $id, '_atum_purchase_price' )
}
Это позже было немного обновлено и переработано разработчиком ATUM:
add_action('pmxi_saved_post', 'after_wpai_post_saved');
function after_wpai_post_saved($id) {
// получить пользовательское поле
$purchase_price = get_post_meta($id, '_atum_purchase_price', true);
// Вставить поле в базу данных
if( $purchase_price !== FALSE ){
$wpdb->update(
"{$wpdb->prefix}atum_product_data",
array(
'purchase_price' => $purchase_price,
),
array(
'product_id' => $id
),
array('%f'),
array('%d')
);
}
// Очистить ненужное пользовательское поле (ОПЦИОНАЛЬНО)
delete_post_meta( $id, '_atum_purchase_price' )
}
Однако этот код приводит к белому экрану смерти.
Что я, в общем-то, хочу сделать, так это импортировать поставщика ($supplier), артикул поставщика ($supplier_sku) и цену покупки ($purchase_price) в ATUM, используя WPAI для создания/импорта продуктов.
возможно, новый ответ на старый пост. Но что вы получаете, так это ошибка в этой части:
$wpdb->update()
потому что переменная $wpdb
не определена.
Чтобы это заработало, вам нужно добавить global $wpdb;
в начале вашей функции, например:
function after_wpai_post_saved($id) {
global $wpdb;
// получить пользовательское поле
Ответ или решение
Импорт данных в ATUM Stock Management с помощью WordPress All-Import
Введение
При выполнении импорта и обновления продуктов в WooCommerce не обновляются поля, используемые ATUM Stock Management. Для решения этой проблемы существует возможность использования пользовательского кода, чтобы убедиться, что дополнительные данные, такие как цена закупки и поставщик, правильно импортируются и сохраняются в базе данных.
Проблема с кодом
Как было выявлено, изначальный код, предложенный на форуме Stock Management Labs, вызывает ошибку "белый экран смерти". Причиной этому является то, что переменная $wpdb
не определена. Важно объявить её глобальной, чтобы получить доступ к функционалу для работы с базой данных.
Решение
Исправленный код должен выглядеть следующим образом:
add_action('pmxi_saved_post', 'after_wpai_post_saved');
function after_wpai_post_saved($id) {
global $wpdb; // Объявляем глобальную переменную
// Получаем цену закупки
$purchase_price = get_post_meta($id, '_atum_purchase_price', true);
// Получаем поставщика
$supplier = get_post_meta($id, '_atum_supplier', true);
// Получаем SKU поставщика
$supplier_sku = get_post_meta($id, '_atum_supplier_sku', true);
// Обновляем данные в базе
if ($purchase_price !== false) {
$wpdb->update(
"{$wpdb->prefix}atum_product_data",
array(
'purchase_price' => $purchase_price,
'supplier' => $supplier, // Обновляем поле поставщика
'supplier_sku' => $supplier_sku, // Обновляем поле SKU поставщика
),
array(
'product_id' => $id
),
array('%f', '%s', '%s'), // Задаем корректные форматы данных
array('%d')
);
}
// Очистка ненужного мета-поля (ОПЦИОНАЛЬНО)
delete_post_meta($id, '_atum_purchase_price');
delete_post_meta($id, '_atum_supplier');
delete_post_meta($id, '_atum_supplier_sku');
}
Описание изменений
-
Объявление глобальной переменной: В начале функции добавлено
global $wpdb;
, что позволяет использовать основные функции работы с базой данных. -
Добавление дополнительных полей: Код теперь также учитывает и импортирует поля
supplier
иsupplier_sku
, которые могут быть полезны для учета товаров. -
Проверки и правильные форматы: Проверка на
false
значений для автоматического исключения ошибок. Также, указаны правильные форматы данных при обновлении. -
Опциональная очистка мета-полей: Удаление мета-поля, связанного с закупочной ценой, а также полей поставщика и SKU, если они не нужны после обновления базы данных.
Заключение
С помощью вышеприведенного кода вы сможете успешно импортировать поставщика, SKU поставщика и цену закупки в ATUM Stock Management, оставаясь в рамках плагина WP All Import. Это позволит значительно улучшить управление запасами и упростить учет товаров в вашем магазине WooCommerce. Если у вас возникнут дополнительные вопросы или появятся трудности, рекомендуется обратиться к документации плагинов и сообществу разработчиков.