• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Woocommerce, каждому товару своя валюта

pagemaster

Форумчанин
А если для гривны, и можно без парсинга... что изменить нужно?
без парсинга это вы о чем? Этот код просто добавляет 3 доп.поля для ввода цены, чтобы переделать под гривну нужно просто поле рубля переименовать под гривну. Так же, в вашем случае, нужно подтягивать курс уже с ЦБ Украины и умножать значения иностранных валют на курс ЦБ. В общем нужно переделывать =) простого переименования поля не хватит, так как доллары и евро будут переводится в рубли.
 

aNg

Форумчанин
без парсинга это вы о чем? Этот код просто добавляет 3 доп.поля для ввода цены, чтобы переделать под гривну нужно просто поле рубля переименовать под гривну. Так же, в вашем случае, нужно подтягивать курс уже с ЦБ Украины и умножать значения иностранных валют на курс ЦБ. В общем нужно переделывать =) простого переименования поля не хватит, так как доллары и евро будут переводится в рубли.
я о том что мне не нужно подтягивать курсы, а достаточно задать его вручную (пускай даже в том же function.php)... тоесть я просто в поле долары записываю значение, оно умножается на константу и перезаписывает поле с ценой в гривне.
 

pagemaster

Форумчанин
тогда там нужно лишь удалить половину кода, который берет курс, переименовать поле рубля в гривну и присвоить переменной $custom_price значение курса, ну и получается убрать поле с евро =) все просто, если хоть немного знаете php
 

aNg

Форумчанин
тогда там нужно лишь удалить половину кода, который берет курс, переименовать поле рубля в гривну и присвоить переменной $custom_price значение курса, ну и получается убрать поле с евро =) все просто, если хоть немного знаете php
Все получилось, только вот теперь не работает функция распродажи, это я что то не так сделал или у всех так?
 

pagemaster

Форумчанин
Все получилось, только вот теперь не работает функция распродажи, это я что то не так сделал или у всех так?
попробуйте перед кодом перезаписи цены дописать условие :
Код:
$sale_price = get_post_meta($post->ID, '_sale_price', true);
if (!$sale_price) {
//код перезаписи цены
}
правда могу ошибаться с _sale_price, возможно не то поле или называется по другому))
 

Greezlee

Новичок
Спасибо за решение!
Нашел парочку ошибок, делюсь исправлением:
1. Чтобы округление до сотых работало, нужно строку:
Код:
round($custom_price, 2); // округляем до сотых, чтобы в regular_price не записывались огромные дроби
заменить на:
Код:
$custom_price = round($custom_price, 2); // округляем до сотых, чтобы в regular_price не записывались огромные дроби

2. Когда меняешь в админке кастомную цену (например USD) и сохраняешь товар, то при первом открытии товара, показывается старая цена записанная, в _regular_price и _price, и только после обновления страницы начинает отображаться рассчитанная по курсу цена.
Я так понимаю, что происходит это из-за того, что на save_post Вы не повесили хук, который бы сразу обновлял стандартные цены при сохранении товара. Не подскажите решение? (в хуках не силен).
 

Vitulechek

Новичок
Здравствуйте! Может есть у кого опыт по женитьбе этого кода с интеграцией 1с (плагин WooCommerce and 1C:Enterprise (1С:Предприятие) Data Exchange). Не выгружает на сайт. В программинге не силен. Помогите, люди добрые!
 

Greezlee

Новичок
Здравствуйте! Может есть у кого опыт по женитьбе этого кода с интеграцией 1с (плагин WooCommerce and 1C:Enterprise (1С:Предприятие) Data Exchange). Не выгружает на сайт. В программинге не силен. Помогите, люди добрые!

А что именно не выгружает на сайт? Цены или товары вообще?
 

pagemaster

Форумчанин
2. Когда меняешь в админке кастомную цену (например USD) и сохраняешь товар, то при первом открытии товара, показывается старая цена записанная, в _regular_price и _price, и только после обновления страницы начинает отображаться рассчитанная по курсу цена.
Я так понимаю, что происходит это из-за того, что на save_post Вы не повесили хук, который бы сразу обновлял стандартные цены при сохранении товара. Не подскажите решение? (в хуках не силен).
Все верно, этот косяк я поправил позже (еще не выкладывал новый код)
Код:
add_action( 'woocommerce_get_regular_price', 'wc_myprice_show', 10 );
И, кстати, позже появилась проблема - сайт не мог получать курс от ЦБ России, видимо его забанили, пришлось все переделывать и выводить во внешний скрипт, который записывал курс в txt файл и только в определенные часы. Это помогло уменьшить нагрузку и избежать бан.
 

pagemaster

Форумчанин
Вот последняя версия "выносного" скрипта, который можно разместить на любом сервере.
functions.txt - код, который добавляем в конец вашего functions, который находится в папке с шаблоном;
get_currency.txt- код скрипта, который при запуске создает файл currency.txt с курсом доллара и евро

P.S. Не забываем в коде с файла functions.txt изменить домен расположения скрипта get_currency.

Ну и в functions.txt читайте комментарии к коду, там написано что теперь мы добавляем только 2 поля в woocommerce: это Стоимость и Валюта. В стоимость пишем число, в валюту указываем только RUB, USD или EUR, по желанию можно добавить новые значения или переделать это поле в выпадающий список для удобства. Сделал так, чтобы было удобнее обновлять эти поля через плагин WP All Import, а именно прайс Яндекс Маркета, где приходится указывать валюту.

P.S.S. Ну и в functions я сделал самую простую версию запуска "по времени", её можно запросто удалить, а вместо неё запускать скрипт get_currency по крону.

P.S.S.S. Кому сильно помог, не откажусь от материальной поддержки)) ну или за денежку помогу все настроить у вас на сайте.
 

Вложения

  • functions.txt
    3.6 KB · Просмотры: 318
  • get_currency.txt
    1.5 KB · Просмотры: 275
Последнее редактирование:

mijamur

Новичок
Кто может подсказать. у меня функция конвертации работает только если руками создам файл txt с курсум валют а скрипт get_currency.php не создает его. просто белый экран показывает echo строчки я в нем раскоментировал убрал if ($_POST) { стал показывать курс и файл создался))

интересно чо сразу не создается время запуска ждет?
Блин, у меня вопрос. Когда он цены меняет на всех товарах?

все вопросы снимаю) научился пользоваться. спасибо огромное очень полезная штука
 
Последнее редактирование:

jamaster

Форумчанин
спасибо автору за проделанную работу) выше всяких похвал! но вот есть пожелание, кто сталкивался с проблемой при импорте через плагин Woo All Import Woo add-on там в шаблонах как можно вывести эти поля а то там базовое поле regular price, допольнительных полей нетю ( а хотелось видеть и там эти 3 поля
 

jamaster

Форумчанин
кстати после добавления вашего кода! начали пропадать цены ранее добавленных товаров!!!
 

sav33

Новичок
Так, по-моему все решается так .Цену нужно прописывать не в поле "Базовая цена", а в появившихся после установки допа к коду , полях:Рубли в рублях, еврики в евро, а баксы в баксах.Тогда вроде все работает корректно.
ЗЫ.Кстати после обновления странички , цена из поля Рубль прописывается и в поле Базовая цена.Посмотрим, что будет дальше
 
Последнее редактирование:

Igorloki

Новичок
не правильно что-то написал. все отлично работает.
$lines = file('http://'); с этой строчкой проблемы были я в if запихал. это из-за хостинга я так понял
А можешь пример показать? На примере вашего, рабочего, часть кода функции и где расположены файлы currency
 
Сверху Снизу