Ažuriranje cijene Woocomerca putem woo hooks

Dakle imam json fajl, izvukao sam što trebam iz njega.

Sada bi tu akciju stavio na akciju otvaranja stranice proizvoda da se u tom trenutku ažurira za artikl:

  • cijena
  • količina

Tražio sam gotove kodove jer vidim da ima cijena po svuda.
Da li netko je već radio nešto tako*?

Dakle updejt cijene i količina u bazi wordpressa/woocommerca s povučenima u tom trenutku sa udaljenog json fajla?

Treba mi taj dio što sve treba ažurirati.

Kako to misliš putem woo hooksa? Za update možeš koristiti update_post_meta. Iz jsona vjreojatno file_get_contents. pa json_decode, pa neki foreach, pa vjerojatno u petlji još imaš neke provjere.

Moram direknto u bazi napraviti.
Treba mi akcija koja se aktivira na stranici proizvoda da ažurira iz tog jsona.
Dobio sam van količinu i cijenu u varijabli.

Sad me zanima gdje sve i što moram zamijeniti da unutar baze bude ažurirano.

Našao sam ovo, no nisam siguran. Nešto na tom tragu, ali poveznica mora biti SKU.

Dakle njega dohvatim sa:
global $product;
$product->get_sku();

I zadnji dio sada čeka, to sve upriličiti u SQL ili što da zaista se cijene i ažuriraju.

U kojem trenutku trebaš update-ati to, na to misliš pod hook? Tipa save_post? Dakle, u koje trenutku trebaš parsati json? To ti je hook. Ili možda na klik buttona…pričam bezveze…

Na hook ili na klik ono što sam napisao, pa update_post_meta…imaš i ovo:

Po SKU nadješ id i sa update_post_meta update-aš _sale_price tj. ovo što trebaš.

Ne znam što ti je u jsonu, jedan proizvod? Ako je samo jedan nadješ po SKU njegov id i update_post_meta.

Ovo je na strani proizvoda.
Radi i mijenja cijenu.
Sada samo SQL da izmjeni sve što trebam.
Sve moram refrešati jer ne prikaže izmjene na učitavanju.
Da li ga pokrećem u krivom trenutku?
ili moram pobrisati prijelazne vrijednosti?

 add_action( 'woocommerce_before_single_product', 'updateCijene', 15 );

    function updateCijene() {
    	global $product;
    	$ID = $product->get_sku();
    	$url = "http:/xxxxxxxxxx".$ID; // JSON fajl
    	$data = file_get_contents($url); 
    	$artiklJson = json_decode($data); 

    			/*** TU TRAŽIM ŠTO TREBAM *******/
    				foreach ($artiklJson as $ducan)  {
    					if($ducan[1] == 22){
    						$zaliha = $ducan[2];
    						$cijena = $ducan[3];
    					
    					global $wpdb;
       
    					$wpdb->update('wpie_postmeta',array( 'meta_value' => $cijena), array( 'post_id' => 10, 'meta_key' => '_regular_price' ));
    					
    					}
    				}	
    	
    	}

Ne znam zašto si koristio hook woocommerce_before_single_product, to ti je hook na single product page. I naravno to radi, prikaže podatke o proizvodu i zatim update-a. Ali mislim tebi će se sad svaki put kad netko gleda single product update-at zapisi u bazi?!

Ovo $wpdb->update, to ti radi u update_post_meta i bolje ti je izbjegavat $wpdb.

update_post_meta( $product_id, ‘_regular_price’, $cijena);

https://codex.wordpress.org/Function_Reference/update_post_meta

Vidi jedino ovo $product_id kako ćeš dobiti, da li po tvome ili onom funckijom što sam ti prije poslao link.

Ali mislim da je tebi svakako krivi hook za to. Jer ne znam zašto bi svaki put kad netko gleda single product update-ao podatke.

1 Like

Hi volume dućan na kojem netko štedi, Zato:)
Otvoren sam za prijedloge.

JSON ima live stanje.

Lokacija mi zapravo nije bitna, kad mogu je promijeniti.
Bitna mi je funckija.
JSON ima mnoge proizvode.
ID uzima iz global na stranic proizvoda, te traži SKU, i prema SKU spaja sa udalejnim JSONom.
Nakon toga upiše cijenu i količine.

No ima više mjesta za cijene, to moram srediti još.
I ima da se prikaže pri učitavanju stranice.

Poslije ja mogu to preseliti na stranicu ne znam košarice itd.

Bitna mi je sada funckija, i sve situacije da odradim unaprijed, IFove :slight_smile:

u jsonu ima i snižena cijena itd, pa moram to posložiti što da se piše ili briše.

No kako god ono što me sada muči je što pri posjetu na stranicu, on to ne odvrti odmah već nakon refreša.
Da li to znači da ima neki temp još koji moram pobrisati?
U bazi ne vidim.

Hehehe…mislim da se mi ne razumijemo, možda…

Imaš json s proizvodima s cijenom - json cijena.

Imaš wp s proizvodima s cijenom - woo cijena.

I sad ti hoćeš u woo cijenu upisat json cijena, jel tako?

Mislim, ako su ti relevantne cijene iz jsona, samo ispiši iz jsona cijenu, ako baš trebaš update-at, onda hookovi na single product page sigurno nisu za to. Jer kad ja kao posjetitelj tvog site-a gledam na tvom site-u single product, usput update-am i cijenu, pa kod refresha opet, pa opet…

Recimo da radiš na hook save_post, svaki put kad sejvaš post u foj funkciji provjeriš je li post type product, ako je, povučeš json, parsaš i updateaš cijenu i to se desi kad se sejva post/product.

Ovo na ovom single product hook to ti je samo za prikaz, nije dobar hook za update.

To što pišeš da ti lokacija nije bitna, kod update-a je bitna. A ako json ima live stanje, da pod tim misliš da se često mijenja, ne update-aj nego samo ispiši iz jsona podatke.

Ustvari vidim da to tebi treba i za košaricu, za shop. A i ovo kad se štedi, napatit ćeš se, nije to samo tako. Nije problem, ali moraš odabrat pravi hook.

Jel to ti povlačiš s jednog shopa na drugi? Pa bi morao paziti kad su na prvom update-ane cijene?

Ne, povlačim sa jsona na dućan.
Potrebno je da sve uredno prođe naplatu, i kartično plaćanje itd.

Pa ideja onda da se sve zapiše u bazu, pa sve štima.

Prikaz samo ok, to radi, ali što kada te proizvode šaljem u košaricu?
One idu u sessions ne?
Da li sve poslije je ispravno, pregled računa itd.?
nije.

Pa ideja da se u nekom trenutku ažurira baza, i sve ide nativnim putem woocomerca.

Vidim da se može nisam radio ništa slično sa wcom, ali muči me sada taj dio kada se ažurira.

Imaš neki prijedlog*?

Može i na PM, pa dogovorimo nešto.

Ma joj vidim problem…

'post_id' => 10

To je hardcode test bio.
To moram povući tek taj ID. Možda to me muči.

Da sada radi za sve proizvode ispis količine i cijena.
Kako je json upit URL koji šaljem ide na ASP api. Šaljem ga sa SKU brojem.
Tako mi vraća praktički odmah rezultat.

No muči me refrešanje.

Dakle kako si rekao kriva lokacija ili što već.

Gdje da onda aktiviram to, ili bolje gdje da FORSIRAM refreš cijena?

Dodao sam extra filter samo za prikaz, i odvrtio i skriptu za izmjenu unutar baze.
Tako imam postavljene cije svakim klikom i backend i frontend.