Введите часть искомого слова, названия или фразы...
↑ ↓
  1. Новые темы озаглавленные с маленькой буквы - удаляются без предупреждения!
  2. Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!

Woocommerce, каждому товару своя валюта

Тема в разделе "Плагины для WooCommerce", создана пользователем pagemaster, 7 окт 2015.

  1. pagemaster

    pagemaster

    Сообщения:
    30
    Симпатии:
    11
    Баллы:
    8
    Здравствуйте, столкнулся с проблемой поиска плагина или функционала, который бы позволил указывать каждому товару свою валюту и стоимость в этой же валюте. Кроме этого все цены на сайте должны быть только в 1 валюте, а все остальные валюты вбитые вручную должны конвертироваться в основную валюту сайта, к примеру, по курсу ЦБ России.

    То есть будут товары с ценами в долларах, евро и рублях, но нужно чтобы на самом сайте выводилось все в рублях по курсу текущему курсу ЦБ.

    Или напишите встречали ли вы что то хотя бы частично похожее по функционалу.
     
  2. D&B

    D&B Администратор Команда форума Местный

    Сообщения:
    3.279
    Симпатии:
    726
    Баллы:
    113
  3. pagemaster

    pagemaster

    Сообщения:
    30
    Симпатии:
    11
    Баллы:
    8
    видел его, платные решения не подходят, разве что платные версии от Woo, они встречаются нуленные. В общем ищу или бесплатные\нуленные плагины или примеры php кода.
     
  4. D&B

    D&B Администратор Команда форума Местный

    Сообщения:
    3.279
    Симпатии:
    726
    Баллы:
    113
    Удачи ;)
     
    • Согласен Согласен x 2
  5. pagemaster

    pagemaster

    Сообщения:
    30
    Симпатии:
    11
    Баллы:
    8
    спасибо, нуленные конвертеры я уже находил, они вполне нормально работают, вот только они конвертируют основную валюту в другие, а как сделать через настройки woocommerce, чтобы основная валюта была везде разной, не понятно... Может как то через доп.поля можно указывать другие валюты?
     
  6. pagemaster

    pagemaster

    Сообщения:
    30
    Симпатии:
    11
    Баллы:
    8
    вот интересная статья как добавить произвольное поле в Woocommerce, что если создать 3 таких поля (руб., доллары, евро) и вписывать туда цену с админки и если поле не пустое - выводить на сайте. Дальше берем значение с поля (если оно евро или доллар) и умножаем на переменную с курсом этой валюты ЦБ России (я встречал мини-скрипты подгружающие данные о курсе валют с ЦБ). Полученное значение и будет наша цена в рублях (наша основная цена), вот только как её присвоить глобальной цене woocommerce? Какая переменная за это отвечает?
     
  7. ADv

    ADv Местный

    Сообщения:
    430
    Симпатии:
    110
    Баллы:
    43
    Посмотрите это Калькулятор товара в интерфейсе интернет магазина
     
    • Нравится Нравится x 1
  8. pagemaster

    pagemaster

    Сообщения:
    30
    Симпатии:
    11
    Баллы:
    8
  9. pagemaster

    pagemaster

    Сообщения:
    30
    Симпатии:
    11
    Баллы:
    8
    оказалось что не совсем то что нужно))
    в общем подскажите пожалуйста как на странице товара изменить основную цену (regular_price), то есть подставить в нее значение со своей переменной? Ну и чтобы дальше без каких либо изменений перезаписанная цена шла дальше в корзину и на оформление заказа.
    Можно даже чтобы перезаписывалась цена на уровне БД.
     
  10. pagemaster

    pagemaster

    Сообщения:
    30
    Симпатии:
    11
    Баллы:
    8
    В общем вот мой говно-код, который добавляет на страницу изменения товара woocommerce еще 3 поля для валюты и потом конвертирует значение заполненного поля (то есть заполняем только 1 поле) по курсу ЦБ России в рубли.
    [​IMG]
    PHP:
    function wc_rubprice_product_field() {
    woocommerce_wp_text_input( array( 'id' => '_rub_price''class' => 'wc_input_price short''label' => __'RUB''woocommerce' ) ) );
    }
    add_action'woocommerce_product_options_pricing''wc_rubprice_product_field' );


    function 
    wc_usdprice_product_field() {
    woocommerce_wp_text_input( array( 'id' => '_usd_price''class' => 'wc_input_price short''label' => __'USD''woocommerce' ) ) );
    }
    add_action'woocommerce_product_options_pricing''wc_usdprice_product_field' );


    function 
    wc_europrice_product_field() {
    woocommerce_wp_text_input( array( 'id' => '_euro_price''class' => 'wc_input_price short''label' => __'EUR''woocommerce' ) ) );
    }
    add_action'woocommerce_product_options_pricing''wc_europrice_product_field' );


    function 
    wc_myprice_save_product$product_id ) {

    if ( ( 
    $_POST['_rub_price'] ) ) {
    if ( 
    is_numeric$_POST['_rub_price'] ) )
    update_post_meta$product_id'_rub_price'$_POST['_rub_price'] );
    } else 
    delete_post_meta$product_id'_rub_price' );



    if ( ( 
    $_POST['_usd_price'] ) ) {
    if ( 
    is_numeric$_POST['_usd_price'] ) )
    update_post_meta$product_id'_usd_price'$_POST['_usd_price'] );
    } else 
    delete_post_meta$product_id'_usd_price' );


    if ( ( 
    $_POST['_euro_price'] ) ) {
    if ( 
    is_numeric$_POST['_euro_price'] ) )
    update_post_meta$product_id'_euro_price'$_POST['_euro_price'] );
    } else 
    delete_post_meta$product_id'_euro_price' );
    }
    add_action'save_post''wc_myprice_save_product' );


    function 
    wc_myprice_show() {
    global 
    $product$post;
    // Ничего не предпринимаем для вариативных товаров
    //if ( $product->product_type <> 'variable' ) {
    $RUB get_post_meta$product->id'_rub_price'true );
    $USD get_post_meta$product->id'_usd_price'true );
    $EUR get_post_meta$product->id'_euro_price'true );
    // woocommerce_price( $RUB )

    // Формируем сегодняшнюю дату 
        
    $date date("d/m/Y"); 
        
    // Формируем ссылку 
        
    $link "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date"
        
    // Загружаем HTML-страницу 
        
    $fd fopen($link"r"); 
        
    $text=""
        if (!
    $fd) echo "Запрашиваемая страница не найдена"
        else 
        { 
          
    // Чтение содержимого файла в переменную $text 
          
    while (!feof ($fd)) $text .= fgets($fd4096); 
        } 
        
    // Закрыть открытый файловый дескриптор 
        
    fclose ($fd); 
       
      
    // Получаем текущие курсы валют в rss-формате с сайта www.cbr.ru 
      
    $content $text
      
    // Разбираем содержимое, при помощи регулярных выражений 
      
    $pattern "#<Valute ID=\"([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i"
      
    preg_match_all($pattern$content$outPREG_SET_ORDER); 
      
    $dollar ""
      
    $euro ""
      foreach(
    $out as $cur
      { 
        if(
    $cur[2] == 840$dollar str_replace(",",".",$cur[4]); 
        if(
    $cur[2] == 978$euro   str_replace(",",".",$cur[4]); 
      }

      
    // проверяем заполнено ли поле, если да, то умножаем на курс и записываем в $custom_price
    if (($RUB != "") && ($RUB != 0)) {
        
    $custom_price $RUB;
    }
    if ((
    $USD != "") && ($USD != 0)) {
        
    $custom_price $USD $dollar;
    }
    if ((
    $EUR != "") && ($EUR != 0)) {
        
    $custom_price $EUR $euro;
    }
    round($custom_price2); // округляем до сотых, чтобы в regular_price не записывались огромные дроби

    $regular_price get_post_meta($post->ID'_price'true); //получаем текущую цену товара

    //if ($regular_price != $ $custom_price) { // проверяем совпадает ли текущая цена с нашей новой, если нет, то перезаписываем её
    update_post_meta$post->ID'_regular_price'$custom_price );
    update_post_meta$post->ID'_price'$custom_price );   

    //можно вывести нашу custom_price для проверки
     // echo '<div class="woocommerce_msrp">';
     // _e( 'RUB : ', 'woocommerce' );
     // echo '<span class="woocommerce-rrp-price RUB">' . $RUB . '</span>';
     // echo '</div>';

     // echo '<div class="woocommerce_msrp">';
     // _e( 'USD : ', 'woocommerce' );
     // echo '<span class="woocommerce-rrp-price USD">' . $USD . '</span>';
     // echo '</div>';

     // echo '<div class="woocommerce_msrp">';
     // _e( 'EUR : ', 'woocommerce' );
     // echo '<span class="woocommerce-rrp-price EUR">' . $EUR . '</span>';
     // echo '</div>';
    }

    //}
    //}
    add_action'woocommerce_single_product_summary''wc_myprice_show'); 
    // Дополнительно: Для вывода на страницах архивов (в товарных категориях, например)
    add_action'woocommerce_after_shop_loop_item_title''wc_myprice_show' );
    я больше чем уверен что его можно и нужно оптимизировать, так что если кто то поможет его оптимизировать, буду очень благодарен =)
     
    Последнее редактирование: 17 ноя 2015
    • Нравится Нравится x 3
  11. maxfire

    maxfire

    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Получилось что нибудь сделать? Тоже нужно такое решение!
     
  12. pagemaster

    pagemaster

    Сообщения:
    30
    Симпатии:
    11
    Баллы:
    8
    Да, код работает:
    добавилось 3 поля для валют: рубль, евро, доллар
    нужно указывать только 1 валюту и она будет автоматически конвертироваться по курсу ЦБ России и записываться в _regular_price - основную цену, которая и выводится на странице товара.
    Минус моего кода в том, что при каждом открытии категории\страницы с товаром срабатывает функция конвертации, то есть может быть нагрузка на сервер... в идеале проверку курса нужно сделать через крон, чтобы курс обновлялся несколько раз в день, а не при каждом открытии страницы как сейчас.
     
  13. maxfire

    maxfire

    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Тоесть этот код уже рабочий?Куда его нужно вставить заранее блогадарен!
     
  14. pagemaster

    pagemaster

    Сообщения:
    30
    Симпатии:
    11
    Баллы:
    8
    прикрепил код, что точно работает (сейчас у меня на сайте), он почти такой же как на форуме (выше), но немного изменен.
    Его нужно вставлять в самый конец файла functions.php, который находится в папке вашей темы (/wp-content/themes/ваша_тема/functions.php)
    Только не забывайте на странице редактировании товара нужно указывать ТОЛЬКО 1 цену (смотрите картинку)
     

    Вложения:

    • Screenshot_9.png
      Screenshot_9.png
      Размер файла:
      27,9 КБ
      Просмотров:
      42
    • currencies.txt
      Размер файла:
      5 КБ
      Просмотров:
      57
    • Нравится Нравится x 4
  15. maxfire

    maxfire

    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Отлично работает!А возможно ли чтоб к автоматически к итоговой рублевой стоимость добовлялось 3% ?
     
  16. pagemaster

    pagemaster

    Сообщения:
    30
    Симпатии:
    11
    Баллы:
    8
    перед строкой с round($custom_price, 2); допишите $custom_price = ($custom_price * 0,03) + $custom_price;
    где 0,03 - это 3%
     
    • Нравится Нравится x 1
  17. maxfire

    maxfire

    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Просто потрясающе все работает!!!
     
  18. pagemaster

    pagemaster

    Сообщения:
    30
    Симпатии:
    11
    Баллы:
    8
    спасибо)) вот только если будет много одновременных пользователей на сайте, то может быть слишком большая нагрузка на сервер, смотрите чтобы хостер не жаловался и не закрыл сайт. Ну а в общем код работает отлично и цены всегда актуальные по курсу ЦБ.
     
  19. maxfire

    maxfire

    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Вопрос возможно ли какое-то дальнейшее сотрудничество с вами? Можно в личку
     
  20. aNg

    aNg

    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    6
    А если для гривны, и можно без парсинга... что изменить нужно?