• Здравствуйте нужна помощь с плагином, администратор задает цену товара в долларах а пользователям выводится в гривнах. Но есть одна проблема очень долго грузиться страница с товарами. Как уменшить загрузку страниц?

    Код плагина:

    <?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');
    
    //Simple product
    add_filter( 'woocommerce_get_price', 'change_price');
    
    function change_price ($this) {
        $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']);
    
        $int = $this;
    
        if ($my_curses!='') {
            return $int*$my_curses;
        } else  return  $int;
    }
    • Тема изменена 7 лет назад пользователем SeVlad. Причина: Оформляйте, пож, код как следует
Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Модератор Юрій

    (@yube)

    Код на форуме надо оформлять как код, используя кнопку code или обратные апострофы. Конечно, если хотите, чтобы его кто-то прочитал.

    Торможение возникает из-за того, что сервер за каждой ценой бегает на сайт приватбанка. Курс меняется, слава богам, не слишком часто, так что можно его получать, скажем, раз в час по хрону и сохранять в transient cache. Да, плагин придется немного переписать.

    Автор protsport4991

    (@protport4991)

    Можете сбросить пример как правильно работать с transient cache?

    Модератор Юрій

    (@yube)

    Транзитное кэширование в высоконагруженных проектах WordPress — WP Magazine

    В принципе можно обойтись и без хрона. Изредка будет небольшая задержка у одно из посетителей, что не критично. Но небольшой она будет ровно до тех пор, пока приват будет исправно отвечать. Так что асинхронное получение курса более надежное решение, хотя и более трудоемкое.

    Автор protsport4991

    (@protport4991)

    Спасибо очень помогли, все работает, нужно еще один совет. С вариационным товаром проблема, на странице корзины цена не перемножаеться на курс гривни. Подскажите что-нибудь?

    <?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;
    }
    • Ответ изменён 7 лет назад пользователем protsport4991.
    • Ответ изменён 7 лет назад пользователем protsport4991.
    Модератор Юрій

    (@yube)

    Увы, не подскажу 🙁

    p.s. ненавижу вариации! )

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Тема «Помощь с плагином» закрыта для новых ответов.