Модератор
Юрій
(@yube)
Код на форуме надо оформлять как код, используя кнопку code
или обратные апострофы. Конечно, если хотите, чтобы его кто-то прочитал.
Торможение возникает из-за того, что сервер за каждой ценой бегает на сайт приватбанка. Курс меняется, слава богам, не слишком часто, так что можно его получать, скажем, раз в час по хрону и сохранять в transient cache. Да, плагин придется немного переписать.
Можете сбросить пример как правильно работать с transient cache?
Модератор
Юрій
(@yube)
Транзитное кэширование в высоконагруженных проектах WordPress — WP Magazine
В принципе можно обойтись и без хрона. Изредка будет небольшая задержка у одно из посетителей, что не критично. Но небольшой она будет ровно до тех пор, пока приват будет исправно отвечать. Так что асинхронное получение курса более надежное решение, хотя и более трудоемкое.
Спасибо очень помогли, все работает, нужно еще один совет. С вариационным товаром проблема, на странице корзины цена не перемножаеться на курс гривни. Подскажите что-нибудь?
<?php
/**
* @package Pro-plugin(exchange usa -> uah)
* @version 1.0.0
*/
/*
Plugin Name: Курс валюти Долар = Гривня
Plugin URI:
Description: Задання валюти в доларах вивід в гривнях, за курсом приват банку
Author: Andriy Prots
Version: 1.0.0
Author URI: pro-football.com.ua
*/
function option_install(){
}
function option_unistall(){
}
register_activation_hook(__FILE__,'opinions_install');
register_deactivation_hook(__FILE__,'opinions_unistall');
add_action ('admin_menu', 'dynamic_price_button');
//Simple product
add_filter( 'woocommerce_get_price', 'change_price', PHP_INT_MAX - 100, 2 );
add_filter( 'woocommerce_get_sale_price', 'change_price', PHP_INT_MAX - 100, 2 );
add_filter( 'woocommerce_get_regular_price', 'change_price', PHP_INT_MAX - 100, 2 );
// Variations product
add_filter( 'woocommerce_variation_prices_price', 'change_price', PHP_INT_MAX - 100, 2 );
add_filter( 'woocommerce_variation_prices_regular_price', 'change_price', PHP_INT_MAX - 100, 2 );
add_filter( 'woocommerce_variation_prices_sale_price', 'change_price', PHP_INT_MAX - 100, 2 );
exted();
change_price($this);
function exted(){
global $my_curses;
$data = file_get_contents('https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5');
$curses = json_decode($data, true);
$my_curses = strval($curses[2]['sale']);
$cached = get_transient( 'exchange' );
set_transient( 'exchange', $my_curses, 12 * HOUR_IN_SECONDS );
return $my_curses;
}
function change_price ($this) {
// $my_curses->exted($my_curses);
$int = $this;
if ($GLOBALS['my_curses']!='') {
return $int*$GLOBALS['my_curses'];
} else return $int;
}
Модератор
Юрій
(@yube)
Увы, не подскажу 🙁
p.s. ненавижу вариации! )