как обновить продукты WooCommerce без вызова add API? - PullRequest
0 голосов
/ 08 октября 2019

Я создаю плагин, который будет интегрироваться между WooCommerce и мобильным приложением через API отдыха.

У меня проблема при обновлении продукта в WooCommerce, при котором он вызывает добавление, а затем редактирование, поэтому я получил ошибку дублирования.

Есть ли способ заставить кнопку обновления срабатывать только при редактировании?

Я использовал три разных перехвата, но ни один из них не работал

вот код:

add_action( 'woocommerce_update_product', 'nb_edit');
//--------------------------update----------------------------------

function nb_edit($post_id) {

    $quantity = isset($_POST['_stock']) ? $_POST ['_stock'] : null;
    $weight = isset($_POST['_weight']) ? $_POST ['_weight'] : null;
    $sku = isset($_POST['_sku']) ? $_POST ['_sku'] : null;
    $salePrice = isset($_POST['_sale_price']) ? $_POST ['_sale_price'] : null;
    // $img = has_post_thumbnail($post_id) ? get_the_post_thumbnail_url($post_id) : null;
    // $gallery[]= get_post_galleries($post_id);
    $discount = 100 - ((int) $_POST['_sale_price'] * 100 / (int) $_POST['_regular_price']);
    $post = get_post($post_id);
    $title = $post->post_title;
    $description = $post->post_content;
    $connectorProductId = $post_id;

    $product = [
        //-----------------------------------------
        'connectorProductId' => $connectorProductId,
        'title' => $title,
        'description' => $description,
        'availableQuantity' => (int) $quantity,
        'price' => (int) $salePrice,
        'itemNumber' => (int) $sku,
        'weight' => (int) $weight,
        //'profile' => 'https://cdn.shopify.com/s/files/1/0116/4499/3593/products/806810088586_650x650.png?v=1549635792',
        //'banners' => ['https://cdn.shopify.com/s/files/1/0116/4499/3593/products/806810088586_650x650.png?v=1549635792'],
        'discount' => (int) $discount,
        //-----------------------------------------
        'brand' => get_option('nb_db_brand'),
        'originId' => get_option('nb_db_originId'),
        'categoryIds' => [get_option('nb_db_categoryId')],
        'subcategoryIds' => [get_option('nb_db_subcategoryId')]
    ];    
    $j_prod = json_encode($product);
    edit_products($j_prod);
}

//--------------------------edit product----------------------------

function edit_products($j_prod) {
    $url = get_option('nb_db_hostUrl') . 'edit_products';
    if (get_option('nb_db_categoryId') == '' || get_option('nb_db_subcategoryId') == '' || get_option('nb_db_brand') == '' || get_option('nb_db_originId') == '') {
        add_action('admin_notices', 'default_notice');
    }

    $response = wp_remote_post($url, array(
        'method' => 'POST',
        'timeout' => 45,
        'redirection' => 5,
        'httpversion' => '1.1',
        'blocking' => true,
        'headers' => array(
            'Content-Type' => 'application/json',
            'Authorization' => get_option('nb_db_authKey'),
            'X-User-Id' => get_option('nb_db_userId'),
            'X-Auth-Token' => get_option('nb_db_authToken')
        ),
        'body' => $j_prod
    ));
    $body = wp_remote_retrieve_body($response);
    $result = json_decode($body);
    if ($result->message === 'You must be logged in to do this.') {
        add_action('admin_notices', 'token_expire_notice');
    } else {
        return $result;
    }
}
...