Skocz do zawartości
Pecetowicz Forum komputerowe

Przeniesienie danych z wartości na inną wartość. WordPress


Rekomendowane odpowiedzi

Cześć. Posiadam sklep z 1000 produktami na WordPress. Źle skonfigurowałem plugin i pozmieniał mi wszystkie ceny produktów, które znajdują się w sklepie na ceny z podatkiem vat. Wyłączyłem plugin ale ceny zostały. Z tego co zauważyłem w wierszu "meta_key" "_regular_price" jest cena przed skonfigurowaniem i potrzebuję przenieść cenę z pola "meta_value" w "meta_key" = "_regular_price na pole "meta_value" w "meta_key" = "_price". Proszę o pomoc.

Stąd:
image

Dotąd:

image

try
{
	$pdo = new PDO('mysql:host=xxxx;dbname=xxx', 'xxxx', 'xxx');

	$liczba = $pdo->exec('UPDATE wp_postmeta_old SET meta_value = (SELECT meta_value FROM wp_postmeta WHERE meta_key = "_regular_price") WHERE meta_key = "_price"');
	if ($liczba > 0) echo 'chujnia';
}

catch (PDOException $error)
	echo $error;
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Założyciel

Spróbuj tak:

INSERT INTO `wp_postmeta_old` (`meta_value`) SELECT `meta_value` FROM `wp_postmeta`;

Powyższe zapytanie pobierze dane z tabeli wp_postmeta i wstawi je do tabeli wp_postmeta_old

  • Lubię to! 1
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert

Ja bym spróbował w ten sposób:

UPDATE `wp_postmeta` a 
LEFT JOIN `wp_postmeta` b ON a.`post_id` = b.`post_id`
SET a.`meta_value` = b.`meta_value` 
WHERE a.`meta_key` = "_price" AND a.`post_id` = b.`post_id`;

Przy czym te zapytanie wykonał bezpośrednio w PMA.

  • Lubię to! 2
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert
6 minut temu, .WhiteBlue napisał:

nie widzę _regular_price

Bo Ci to niepotrzebne... Tu jest to co ma przypisać:

SET a.`meta_value` = b.`meta_value` 

A tu jest określenie żeby podmiana nastąpiła w tym konkretnym wierszu:

WHERE a.`meta_key` = "_price"

Jak chcesz, to sobie dopisz kolejne AND i wstaw:

b.`meta_key` = "_regular_price"

Ale jest to zbyteczne.

  • Lubię to! 2
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert

Wykonaj ten mój kod, a jak przypisze źle, to będziemy kombinować dalej...

PS. W jakiej firmie w Opolu pracujesz jako programista?

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert

Tak już w ogóle wspominając o zmianach, to chyba wypadałoby za każdym razem robić backup bazy przy tak wrażliwych zmianach. Nie miałbyś teraz problemu.

Druga sprawa, że jeśli chcesz zaktualizować pola, to może po prostu skorzystać z dokumentacji Woocommerce i nadpisać wszystkie produkty w pętli?

W functions.php pobierasz wszystkie produkty jakie masz,  później odczytujesz wartość regular price i robisz update pola price z tą wartością. To wszystko, nic więcej nie będzie Ci potrzebne. Wszystkie potrzebne funkcje mogę się założyć, że znajdziesz w dokumentacji WC.

P.S.

Nie wiem dlaczego wszyscy zaczęli kombinować z podmianą w bazie danych, jeżeli o wiele łatwiej to wykonać za pomocą odczytuj i ponownego zapisu niektórych wartości z WC. Ten plugin jest tak rozbudowany, że to było oczywistością, że ma dużo potrzebnych funkcji. Tym bardziej, że jest to w standardzie (te z taxami również).

  • Lubię to! 3
  • Dzięki! 1
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert
2 godziny temu, arces napisał:

Nie wiem dlaczego wszyscy zaczęli kombinować z podmianą w bazie danych

Bo tak było wygodniej. Szczególnie, że dostaliśmy tak mało danych wejściowych :P

Dziwnie zamieniło te ceny. Z intów zrobiło floaty... Spróbuj może tak jak pisze @arces - napisz funkcję naprawiającą ceny w pliku functions.php i odpal ją przy wejściu na stronę.

  • Lubię to! 2
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert

Jeżeli chcesz gotowca, to jak się domyślasz trzeba za to sypnąć trochę groszem.

Podpowiedziałem Ci mniej więcej jak to zrobić, trochę wysiłku i znajdziesz rozwiązanie o ile nie jesteś "klikaczem WP", a rzeczywiście programistą.

  • Lubię to! 2
  • Dzięki! 1
Odnośnik do odpowiedzi
Udostępnij na innych stronach

@arces W pliku functions.php dodałem taki kod i dalej nie działa. Możesz powiedzieć co robię źle i czy w poprawnym pliku użyłem podaną funkcję?

try
{
	$pdo = new PDO('mysql:host=xxxx;dbname=xxxx', 'xxxx', 'xxxx');

	$query = $pdo-> prepare('SELECT post_id, meta_value FROM wp_postmeta WHERE meta_key = _regular_price');
	$query -> execute();
	
	foreach ($query as $value) {
		update_post_meta($value['post_id'], '_price', $value['meta_value']);
	}
}

catch (PDOException $error)
{
	echo $error;
}
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert

Napisałem, że masz wykorzystać do tego Woocommerce, a nie bezpośrednio zapytanie do bazy danych.

Druga sprawa, że jeśli masz to na WP, to po co łączysz się z bazą danych, jeśli bezpośrednio masz dostęp do bazy za pomocą funkcji wbudowanych w WP?

  • Lubię to! 2
  • Dzięki! 1
Odnośnik do odpowiedzi
Udostępnij na innych stronach

@arces Dzięki za pomoc. Dodałem ten kod do pliku wp-settings.php i zmieniło mi prawidłowo wszystkie dane.

Jakby ktoś kiedyś potrzebował pomocy to należy wkleić ten kod do pliku wp-settings.php:

try
{
	$pdo = new PDO('mysql:host=xxxx;dbname=xxxx', 'xxxx', 'xxxx');

	$query = $pdo-> prepare("SELECT post_id, meta_value FROM wp_postmeta WHERE meta_key = '_regular_price'");
	$query -> execute();

	foreach ($query as $value) {
		update_post_meta($value['post_id'], '_price', $value['meta_value']);
	}
}

catch (PDOException $error)
{
	echo $error;
}
  • Lubię to! 1
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert

To i tak nie powinno wyglądać w ten sposób co zrobiłeś, bo bardzo łatwo o błąd. Z dokumentacji Woocommerce dało się to zrobić praktycznie bez żadnych powikłań.

  • Lubię to! 2
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • 2 tygodnie później...

Problem wciąż nierozwiązany? Dodaj swoją odpowiedź

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto. Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...