/ Сайтостроение / Плагины / Конвертировать цену в рубли

Конвертировать цену в рубли

25.06.2019

203

Предположим, что есть товары, цена которых у продавца в долларах, но при этом на сайте мы хотим продавать эти товары за рубли по сегодняшнему курсу, чтобы не усложнять функционал мультивалютностью.

Получаем актуальный курс валюты

function get_currency_cb($code_valute = 'USD', $time_cash = '60' ) {
    if ($code_valute != 'USD' && $code_valute != 'EUR') $code_valute = 'USD';
    if ($time_cash <= 0) $time_cash = 60; // время кеширования в минутах
 
    $name_cash = 'cash_kurs_cb';
    $cached = get_transient($name_cash);
    if ($cached !== false && $cached['code'] == $code_valute) {
        $kurs_cb = $cached;
        return $kurs_cb;
    } 
    else {
        libxml_use_internal_errors(true);
        $kurs_cb_xml = simplexml_load_file("http://www.cbr.ru/scripts/XML_daily.asp");
        if ($kurs_cb_xml === false) {
            echo "Ошибка загрузки XML\n";
            foreach(libxml_get_errors() as $error) {
                echo "\t", $error->message;
            }
            $kurs_cb = $cached;
            return $kurs_cb;
        } else {
            foreach ($kurs_cb_xml->Valute as $valute) {
                if ((string)$valute->CharCode == $code_valute) {
                    $kurs_cb['date'] = (string)$kurs_cb_xml['Date'];
                    $kurs_cb['kurs'] = (string)$valute->Value;
                    $kurs_cb['code'] = $code_valute;      
                    break;
                }
            }
            $kurs_cb['kurs'] = round(str_replace(',','.',$kurs_cb['kurs']),2);
            set_transient($name_cash, $kurs_cb, MINUTE_IN_SECONDS * $time_cash);
            return $kurs_cb;
        }
    }
}

Заводим поле Валюта

add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' );
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );

function woo_add_custom_general_fields() {

	global $woocommerce, $post;
	
	$kurs_cb = get_currency_cb('USD');
	$cinfo = 'Курс доллара на '.$kurs_cb['date'].' — '.$kurs_cb['kurs'].' руб.';

	echo '<div class="options_group">'; 

	woocommerce_wp_text_input( 
	array( 
	'id' => '_shop_currency', 
	'label' => __( 'Цена в долларах ($)', 'woocommerce' ), 
	'placeholder' => '', 
	'desc_tip' => 'true', 
	'description' => $cinfo
	) 
	); 

	echo '</div>';
}

function woo_add_custom_general_fields_save( $post_id ){
	$woocommerce_shop_currency = $_POST['_shop_currency'];
	if( !empty( $woocommerce_shop_currency ) ) update_post_meta( $post_id, '_shop_currency', esc_attr( $woocommerce_shop_currency ) );
	else delete_post_meta( $post_id, '_shop_currency', esc_attr( $woocommerce_shop_currency ) );
}

Обновляем поле Цена (в рублях)

При создании или обновлении товара, если заполнено поле Валюта, то происходит расчет стоимости товара в рублях по курсу и обновляет стандартное поле цена.

// Обновляем цену в рублях при заполненном поле валюта
// Работает как при создании нового товара, так и при обновлении

add_action( 'woocommerce_update_product', 'mp_sync_on_product_save', 10, 1 );
function mp_sync_on_product_save($post_id) {
	$woocommerce_shop_currency = $_POST['_shop_currency'];
	if ( !empty($woocommerce_shop_currency) ) {
		$kurs_cb = get_currency_cb('USD');
		//$kurs = '64';
		$newprice = round($woocommerce_shop_currency * $kurs_cb['kurs']);
		update_post_meta($post_id, '_regular_price', $newprice);
	}
}

Ежедневное обновление цен

Естественно не удобно было бы обходить ежедневно все товары, чтобы обновить стоимость (в связи с изменением курса), поэтому создаем функцию обновляющую все позиции с валютой. Создаем шаблон страницы:

<?php global $post;

$args = array(
'posts_per_page' => -1,
'post_type' => 'product'
);

$myposts = get_posts( $args );
				
foreach( $myposts as $post ) : setup_postdata($post);
				
	$woocommerce_shop_currency = get_post_meta($post->ID, '_shop_currency', true);

	if(!empty($woocommerce_shop_currency)){

		$kurs_cb = get_currency_cb('USD');
		//$kurs = '64';
		$newprice = round($woocommerce_shop_currency * $kurs_cb['kurs']);
		update_post_meta($post->ID, '_regular_price', $newprice);
						
	echo '<h3>'.$post->post_title.'</h3>';

	}

endforeach; wp_reset_postdata(); ?>

Получившийся URL страницы добавляем в CRON (1-2 раза в сутки).

Тэги:

Поделится информацией с друзьями

  • Похожие записи
  • Комментарии
  • Вложения
Категория товаров NEW

Категория товаров NEW

Если у нас большой интернет-магазин с множеством подкатегорий, и периодически появляются новые, то дополнительное внимание к этому можно привлечь лэйблом NEW. По дате мы этот функционал реализовать не сможем т.к. Читать далее »

Шаг количества товара

Шаг количества товара

Шаг количества товара или кратность в некоторых сферах интернет торговли является важной составляющей. Рассмотрим варианты создания данного функционала. Quantities and Units for WooCommerce Плагин Quantities and Units for WooCommerce (3,000+) Читать далее »

/
Бонусная система

Бонусная система

Система лояльности покупателей — один из сильнейших маркетинговых инструментов. Рассмотрим бонусная систему как один из вариантов реализации системы лояльности. Будем начислять за покупки (либо любые другие действия) балы, которыми покупатель Читать далее »

Добавить комментарий

Пока нет комментариев. Будь первым!

Конвертировать цену в рубли
Подгрузка отдельных блоков на странице
Рекомендации для васПодгрузка отдельных блоков на страницеOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.