WordPress All-Import к управлению запасами ATUM

Вопрос или проблема

При импорте и создании/обновлении продуктов в 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');
}

Описание изменений

  1. Объявление глобальной переменной: В начале функции добавлено global $wpdb;, что позволяет использовать основные функции работы с базой данных.

  2. Добавление дополнительных полей: Код теперь также учитывает и импортирует поля supplier и supplier_sku, которые могут быть полезны для учета товаров.

  3. Проверки и правильные форматы: Проверка на false значений для автоматического исключения ошибок. Также, указаны правильные форматы данных при обновлении.

  4. Опциональная очистка мета-полей: Удаление мета-поля, связанного с закупочной ценой, а также полей поставщика и SKU, если они не нужны после обновления базы данных.

Заключение

С помощью вышеприведенного кода вы сможете успешно импортировать поставщика, SKU поставщика и цену закупки в ATUM Stock Management, оставаясь в рамках плагина WP All Import. Это позволит значительно улучшить управление запасами и упростить учет товаров в вашем магазине WooCommerce. Если у вас возникнут дополнительные вопросы или появятся трудности, рекомендуется обратиться к документации плагинов и сообществу разработчиков.

Оцените материал
Добавить комментарий

Капча загружается...