Здравствуйте! У меня есть вопрос касательно добавления двух цен на товар через ACF. Корзина не будет использоваться, и заявки будут отправляться через простую форму. Как я могу автоматически конвертировать эти два поля с ценами в зависимости от курса ЦБ РФ, если валюта товара - USD, и переводить её в RUB по актуальному курсу?
Здравствуйте!
Для того чтобы изменять значения полей ACF (Advanced Custom Fields) в базе данных, вы можете использовать функции предоставляемые ACF и WordPress, такие как `update_field()` и `get_field()`. Также вам потребуется доступ к курсу валют и способ, которым вы будете обновлять значения. В вашем случае, если валюта товара - USD, и вам нужно конвертировать её в RUB по актуальному курсу, вы можете следовать следующим шагам:
### Шаги для автоматической конвертации цен
1. **Получение курса валют**:
Для получения актуального курса вы можете использовать API, например, API Центробанка РФ или другие сервисы, которые предоставляют курсы валют. Существует много бесплатных и платных решений.
Пример запроса для получения курса через API ЦБ:
```php
function get_exchange_rate_usd_to_rub() {
$response = wp_remote_get('https://www.cbr.ru/scripts/XML_daily.asp');
if (is_wp_error($response)) {
return null;
}
$xml = simplexml_load_string($response['body']);
foreach ($xml->Valute as $valute) {
if ($valute->CharCode == 'USD') {
return floatval($valute->Value);
}
}
return null;
}
```
2. **Обновление цен в ACF**:
Далее, вы можете использовать полученный курс для обновления значений полей ACF. Например, если у вас есть поля `price_usd` и `price_rub`, вы можете сделать что-то вроде этого:
```php
function update_product_prices($post_id) {
// Получаем курс USD -> RUB
$exchange_rate = get_exchange_rate_usd_to_rub();
if ($exchange_rate) {
// Получаем цену в USD
$price_usd = get_field('price_usd', $post_id);
if ($price_usd) {
// Конвертируем цену в RUB
$price_rub = $price_usd * $exchange_rate;
// Обновляем поле ACF
update_field('price_rub', $price_rub, $post_id);
}
}
}
```
3. **Автоматизация процесса**:
Чтобы этот процесс происходил автоматически, вы можете вызвать функцию `update_product_prices()` в нужные моменты, например:
- При сохранении записи через `save_post`.
- По расписанию с помощью `wp_cron`, если вам нужно обновлять курс регулярно.
Пример добавления к хуку `save_post`:
```php
add_action('save_post', 'update_product_prices');
```
### Подведение итогов
Таким образом, вы можете автоматически обновлять значения полей ACF в зависимости от текущего курса валют. Не забудьте протестировать ваш код и убедиться, что все работает корректно. Надеюсь, это поможет вам в решении вашей задачи.
Все сделал просто и удобно: <br/> 1. Создал в ACF поля с ценами <br/> 2. В Wp All Import в function editor вставил следующий код <br/> <pre><code><?php
function GetDollar(){
if(isset($_COOKIE["dollar"])) {
$dollar = $_COOKIE["dollar"];
}
else {
//валюты
$valutes = simplexml_load_file("http://www.cbr.ru/scripts/XML_daily.asp");
$dollar = 70; //по умолчанию
if(!empty($valutes)){
foreach ($valutes->Valute as $valute) {
if ($valute->CharCode == 'USD') { //тип валюты
$dollar = round(str_replace(',','.',$valute->Value), 2); //ее значение
SetCookie("dollar",$dollar,time()+3600*12);
}
}
}
}
return $dollar;
}
function round_price( $price = null, $multiplier = 1 ) {
if ( !empty( $price ) ) {
$price = preg_replace("/[^0-9,.]/", ",", $price);
return ( round ( $price * $multiplier, 2 ));
}
}
?></code></pre> <br/> 3. Вставил в соответствие полей ACF при импорте <br/> <code>[round_price({undefined6[1]},GetDollar())]</code>
1. Получить курс USD, <a href="https://snipp.ru/php/getting-quotes" rel="nofollow">например</a> <br/> 2. <a href="https://developer.wordpress.org/reference/hooks/save_post/" rel="nofollow">Во время сохранения</a> записи рассчитать цену в RUB, используя курс из п.1 и <a href="https://www.advancedcustomfields.com/resources/update_field/" rel="nofollow">обновить ACF поле</a>
Напишите скрипт, который, по крону обновляет цены раз в сутки, к примеру. <br/> Поля ACF, это мета поля к записи <br/> <a href="https://misha.agency/wordpress/update_post_meta.html" rel="nofollow">https://misha.agency/wordpress/update_post_meta.html</a> <br/> <br/> Или <a href="https://www.advancedcustomfields.com/resources/update_field/" rel="nofollow">по ссылке</a> , что дали выше...