Woocommerce termék import
2021-08-02T13:08:04+02:00
2021-08-04T15:29:02+02:00
2022-08-12T03:55:37+02:00
mdaniel
Sziasztok,

A woocommerce rest api segítségével szeretnék tömegesen terméket feltölteni egy webáruházba, ami woocommerce-t használ.

adott egy adatbázis, példakódban "ebbol" a neve, ami a $conn1 lesz a lekérdezéseknél.
az "ebbe" nevű adatbázisba szeretném, ez a woocommerce adatbázisa.

a problémám az, ha lefuttatom ezt a scriptet, akkor egy azon termék többször jön létre, nem veszi figyelembe az esetleges terméknév egyezőségeket.

szerintetek mi lehet a hiba?

<?php require('wp-load.php'); $hostname = 'localhost'; $username = 'asd'; $username2 = 'asd'; $password = '**'; $password2 = '**'; $db_name="ebbol"; $db_name2="ebbe"; $conn1 = mysqli_connect( $hostname, $username, $password, $db_name ); $conn2 = mysqli_connect( $hostname, $username2, $password2, $db_name2 ); $csv=file("feltoltendo_termekek.csv"); $ennyi=count($csv); $termek_idk=array(); $resi=array(); for($i=1;$i<$ennyi;$i++){ $exp=explode(";",trim($csv[$i])); $termek_idk[$exp[0]]['idegenazon']=$exp[1]; $termek_idk[$exp[0]]['mennyiseg']=$exp[2]; $termek_idk[$exp[0]]['afa']=$exp[3]; $termek_idk[$exp[0]]['cikkszam']=$exp[0]; } $katmegf=array(); $csv=file("katfeltolt.csv"); $ennyi=count($csv); for($i=1;$i<$ennyi;$i++){ $exp=explode(";",trim($csv[$i])); $katmegf[$exp[0]]=$exp[1]; } $ossz=0; $csv=file("katfeltolt.csv"); $ennyi=count($csv); for($i=1;$i<$ennyi;$i++){ $exp=explode(";",trim($csv[$i])); $kategoria_leker = "SELECT * FROM shop_item_categories WHERE ic_scat_id = '".$exp[0]."' AND attoltve='0'"; $kategoria_leker = mysqli_query($conn1, $kategoria_leker); while ($kategoria_adat = mysqli_fetch_assoc($kategoria_leker)) { $termek_leker = "SELECT * FROM shop_items WHERE item_id = '".$kategoria_adat['ic_item_id']."' AND attoltve='0'"; $termek_leker = mysqli_query($conn1, $termek_leker); $termek_adat = mysqli_fetch_assoc($termek_leker); if (array_key_exists($termek_adat['item_number'], $termek_idk)) { $termek_leker2 = "SELECT * FROM product WHERE number = '".$termek_adat['item_number']."'"; $termek_leker2 = mysqli_query($conn1, $termek_leker2); $termek_adat2 = mysqli_fetch_assoc($termek_leker2); /* termék feltöltése */ $szamol = "SELECT * FROM wp_posts WHERE post_title = '%".$termek_adat['item_name']."%' AND post_type='product'"; $szamol = mysqli_query($conn2, $szamol); $szamol_adat = mysqli_num_rows($szamol); if($szamol_adat == 0){ if($termek_idk[$termek_adat['item_number']]['mennyiseg'] == 0){ $stockstat="outofstock"; }else{ $stockstat="instock"; } if(!empty($termek_adat['item_book_pages'])){ $kieg1=array("name"=>"Oldalszám","visible"=>true,"options"=> array($termek_adat['item_book_pages'])); } if(!empty($termek_adat['item_book_cover'])){ $kieg2=array("name"=>"Borítás","visible"=>true,"options"=> array($termek_adat['item_book_cover'])); } if(!empty($termek_adat['item_book_year'])){ $kieg3=array("name"=>"Kiadás éve","visible"=>true,"options"=> array($termek_adat['item_book_year'])); } if(!empty($termek_adat['item_book_isbn'])){ $kieg4=array("name"=>"ISBN","visible"=>true,"options"=> array($termek_adat['item_book_isbn'])); } //kategóriák $kategoriak=array(); $leker = "SELECT * FROM shop_categories WHERE scat_id='".$kategoria_adat['scat_id']."' AND scat_inaktiv='0' ORDER BY `scat_name` ASC"; $leker = mysqli_query($conn1, $leker); while ($adat = mysqli_fetch_assoc($leker)) { $kategoriak[]=$adat['scat_id']; $leker2 = "SELECT * FROM shop_categories WHERE scat_id='".$adat['scat_parent']."' AND scat_inaktiv='0' ORDER BY `scat_name` ASC"; $leker2 = mysqli_query($conn1, $leker2); while ($adat2 = mysqli_fetch_assoc($leker2)) { $kategoriak[]=$adat2['scat_id']; $leker3 = "SELECT * FROM shop_categories WHERE scat_id='".$adat2['scat_parent']."' AND scat_inaktiv='0' ORDER BY `scat_name` ASC"; $leker3 = mysqli_query($conn1, $leker3); while ($adat3 = mysqli_fetch_assoc($leker3)) { $kategoriak[]=$adat3['scat_id']; $leker4 = "SELECT * FROM shop_categories WHERE scat_id='".$adat3['scat_parent']."' AND scat_inaktiv='0' ORDER BY `scat_name` ASC"; $leker4 = mysqli_query($conn1, $leker4); while ($adat4 = mysqli_fetch_assoc($leker4)) { $kategoriak[]=$adat4['scat_id']; $leker5 = "SELECT * FROM shop_categories WHERE scat_id='".$adat4['scat_parent']."' AND scat_inaktiv='0' ORDER BY `scat_name` ASC"; $leker5 = mysqli_query($conn1, $leker5); while ($adat5 = mysqli_fetch_assoc($leker5)) { $kategoriak[]=$adat5['scat_id']; } } } } } $leker6 = "SELECT * FROM shop_item_categories WHERE ic_item_id='".$kategoria_adat['ic_item_id']."'"; $leker6 = mysqli_query($conn1, $leker6); while ($adat6 = mysqli_fetch_assoc($leker6)) { $kategoriak[]=$adat6['ic_scat_id']; } $result = array_unique($kategoriak); $kategoriak_exp=array(); foreach($result AS $res){ $kategoriak_exp[]['id']=$katmegf[$res]; } //kategóriák vége $api_response = wp_remote_post( 'https://xxxx.hu/wp-json/wc/v2/products', array( 'timeout' => 60, 'headers' => array( 'Authorization' => 'Basic ' . base64_encode( 'xxx' ) ), 'body' => array( 'name' => $termek_adat['item_name'], // product title 'description' => $termek_adat['item_description'], // product description 'short_description' => "", // product short_description 'sku' => $termek_adat['item_book_isbn'], // product sku 'status' => 'publish', // product status, default: publish 'manage_stock' => 'true', 'stock_status' => $stockstat, 'stock_quantity' => $termek_idk[$termek_adat['item_number']]['mennyiseg'], 'tax_class' => $termek_idk[$termek_adat['item_number']]['afa'], 'categories' => $kategoriak_exp, 'images' => array( array( 'src' => 'https://www.asdasd.hu/image/book/'.$termek_adat2['newimage'] ) ), 'regular_price' => $termek_adat['item_price'], // product price 'attributes' => array( array( 'name' => 'Író', // parameter for custom attributes 'visible' => true, // default: false 'options' => array( $termek_adat['item_book_writer'] ) ), array( 'name' => 'Kiadó', // parameter for custom attributes 'visible' => true, // default: false 'options' => array( $termek_idk[$termek_adat['item_number']]['idegenazon'] ) ),$kieg1,$kieg2,$kieg3,$kieg4 ) // more params http://woocommerce.github.io/woocommerce-rest-api-docs/?shell#product-properties ) ) ); $body = json_decode( $api_response['body'] ); if( wp_remote_retrieve_response_message( $api_response ) === 'Created' ) { $resi[]=$body->name." termék létrejött"; //echo 'The product ' . $body->name . ' has been created<br />'; } /* termék feltöltése vége */ $ossz++; /* print $termek_adat['item_number'].": ".$termek_adat['item_name']; print "<br>"; */ }else{ $resi[]=$termek_adat['item_number'].": ".$termek_adat['item_name']." (Már van ilyen a ebbe adatbázisban)"; } }else{ $resi[]=$termek_adat['item_number']." item nem szerepel a feltöltendő termékek között"; //print "Nincs benne: ".$termek_adat['item_number']."<br>"; } mysqli_query($conn1, "UPDATE shop_item_categories SET attoltve='1' WHERE ic_scat_id = '".$exp[0]."'"); mysqli_query($conn1, "UPDATE shop_items SET attoltve='1' WHERE item_id = '".$kategoria_adat['ic_item_id']."'"); } } ?>
Mutasd a teljes hozzászólást!
Itt egy kis segítség. Ez egy egyszerű létrehozás Guzzle-el. Konzolból simán futtatható, annyi, hogy ha nem szeretnéd többször léterhozni a terméket, akkor kérdezd le sku alapján először, hogy létezik-e. Ha létezik akkor továbbiterálsz a létrehozás előtt. 

Annyi még, hogy a kódban a domain-t és az Auth-ot cseréld ki a sajátodra.

WooCommerce RestAPI Product Create - Pastebin.com
Mutasd a teljes hozzászólást!

abcd