Каким образом можно изменять значения полей ACF (Advanced Custom Fields) в базе данных?

Здравствуйте! У меня есть вопрос касательно добавления двух цен на товар через ACF. Корзина не будет использоваться, и заявки будут отправляться через простую форму. Как я могу автоматически конвертировать эти два поля с ценами в зависимости от курса ЦБ РФ, если валюта товара - USD, и переводить её в RUB по актуальному курсу?
  • 28 августа 2024 г. 11:24
Ответы на вопрос 4
Здравствуйте!

Для того чтобы изменять значения полей 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 в зависимости от текущего курса валют. Не забудьте протестировать ваш код и убедиться, что все работает корректно. Надеюсь, это поможет вам в решении вашей задачи.
Все сделал просто и удобно: 
1. Создал в ACF поля с ценами
2. В Wp All Import в function editor вставил следующий код
<?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 )); 

}
}

?>

3. Вставил в соответствие полей ACF при импорте
[round_price({undefined6[1]},GetDollar())]
1. Получить курс USD, например 
2. Во время сохранения записи рассчитать цену в RUB, используя курс из п.1 и обновить ACF поле
Напишите скрипт, который, по крону обновляет цены раз в сутки, к примеру. 
Поля ACF, это мета поля к записи
https://misha.agency/wordpress/update_post_meta.html

Или по ссылке , что дали выше...
Похожие вопросы