這裡會有到同步庫存的技術API Hook的方式去達成庫存同步
先到api2網站啟用 REST API
wp-admin/admin.php?page=wc-settings&tab=advanced§ion=keys
接著再使用function即可達成同步
function sync_product_stock_to_api2( $product_id, $product ) { // 取得商品 SKU 與庫存數量 $sku = $product->get_sku(); $stock_quantity = $product->get_stock_quantity(); if ( empty( $sku ) ) { return; } // API2 設定 $api2_url = 'https://api2.yoursite.com/wp-json/wc/v3/products'; $consumer_key = 'ck_key'; $consumer_secret = 'cs_secret'; // 利用 SKU 先查詢 API2 中是否已存在該商品 $search_url = $api2_url . '?sku=' . urlencode( $sku ); $args = array( 'headers' => array( 'Authorization' => 'Basic ' . base64_encode( $consumer_key . ':' . $consumer_secret ) ) ); $response = wp_remote_get( $search_url, $args ); if ( is_wp_error( $response ) ) { error_log( 'API2 查詢錯誤:' . $response->get_error_message() ); return; } $body = wp_remote_retrieve_body( $response ); $data = json_decode( $body, true ); // 準備要更新或建立的資料,這邊只同步庫存相關資訊 $update_data = array( 'manage_stock' => true, 'stock_quantity'=> $stock_quantity, ); // 若存在則更新,否則建立新商品(這裡僅示範庫存部分,同步其他欄位可自行擴充) if ( ! empty( $data ) && is_array( $data ) ) { // 假設 SKU 為唯一值,取第一筆商品進行更新 $product_api2_id = $data[0]['id']; $update_url = $api2_url . '/' . $product_api2_id; $args = array( 'method' => 'PUT', 'headers' => array( 'Content-Type' => 'application/json', 'Authorization' => 'Basic ' . base64_encode( $consumer_key . ':' . $consumer_secret ) ), 'body' => json_encode( $update_data ) ); $update_response = wp_remote_request( $update_url, $args ); if ( is_wp_error( $update_response ) ) { error_log( 'API2 更新錯誤:' . $update_response->get_error_message() ); } } else { // 若不存在則建立新商品,這裡僅以 SKU 與庫存建立 $new_product_data = array_merge( array( 'sku' => $sku, ), $update_data ); $args = array( 'method' => 'POST', 'headers' => array( 'Content-Type' => 'application/json', 'Authorization' => 'Basic ' . base64_encode( $consumer_key . ':' . $consumer_secret ) ), 'body' => json_encode( $new_product_data ) ); $create_response = wp_remote_post( $api2_url, $args ); if ( is_wp_error( $create_response ) ) { error_log( 'API2 建立商品錯誤:' . $create_response->get_error_message() ); } } } // 當商品更新時觸發 hook,注意這個 hook 會傳入商品 ID 與 WC_Product 物件 add_action( 'woocommerce_update_product', 'sync_product_stock_to_api2', 10, 2 );
成功的效果就是當api有庫存變動,api2的庫存也會跟著連動,這裡是用sku就同步的依據