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

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

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

  1. Ria

    Ria

    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    6
    Задача такая:
    1. Вывести в админке только поле "Валюта": woocommerce_wp_text_input( array( 'id' => '_curency_price', 'class' => 'wc_input_curency_price short', 'label' => __( 'Валюта', 'woocommerce' ) ) );
    2. Вывести это значение на страницах категорий возле .$product->price вместо get_currency_symbol()

    Помогите пожалуйста, как правильно прописать в functions.php и каким запросом выводить на страницах магазина. P.S. пересчет по курсам не нужен!
     
  2. searchingman

    searchingman Местный

    Сообщения:
    1.634
    Симпатии:
    553
    Баллы:
    113
    Если у Вас будет выведена для разных товаров разная валюта, то как Вы будете добавлять товары в корзину?
    Или у Вас просто каталог без добавления в корзину и оформления заказа?
     
  3. Ria

    Ria

    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    6
    Да, все верно - у меня нет корзины - просто каталог :)
     
  4. tuxfighter

    tuxfighter Местный

    Сообщения:
    680
    Симпатии:
    105
    Баллы:
    43
    а зачем тогда вуу?
     
  5. Ria

    Ria

    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    6
    Ну.... :) Нужно так :)
     
  6. Ria

    Ria

    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    6
    Подскажите пожалуйста, что именно нужно оставить для моей задачи в этом коде (что бы лишнего ничего не было), и как потом правильно значение этого одного поля вывести? Спасибо
    Код:
    function wc_myprice_product_field() {
    woocommerce_wp_text_input( array( 'id' => '_my_price', 'class' => 'wc_input_price short', 'label' => __( 'Стоимость', 'woocommerce' ) ) ); // добавляем поле "Стоимость"
    woocommerce_wp_text_input( array( 'id' => '_curency_price', 'class' => 'wc_input_curency_price short', 'label' => __( 'Валюта', 'woocommerce' ) ) ); // добавляем поле "Валюта", где указываем только RUB, USD или EUR, по желанию можно добавить новые значения или переделать это поле в выпадающий список
    }
    add_action( 'woocommerce_product_options_pricing', 'wc_myprice_product_field' );
    
    
    function wc_myprice_save_product( $product_id ) {
    if ( ( $_POST['_my_price'] ) ) {
    if ( is_numeric( $_POST['_my_price'] ) )
    update_post_meta( $product_id, '_my_price', $_POST['_my_price'] );
    } else delete_post_meta( $product_id, '_my_price' );
    
    if ( ( $_POST['_curency_price'] ) ) {
    update_post_meta( $product_id, '_curency_price', $_POST['_curency_price'] );
    } else delete_post_meta( $product_id, '_curency_price' );
    }
    add_action( 'save_post', 'wc_myprice_save_product' );
    
    
    function wc_myprice_show() {
    global $product, $post;
    // Ничего не предпринимаем для вариативных товаров
    //if ( $product->product_type <> 'variable' ) {
    $my_price = get_post_meta( $product->id, '_my_price', true );
    $curency = get_post_meta( $product->id, '_curency_price', true );
    // woocommerce_price( $RUB )
    
    $blogtime = current_time('mysql'); // записываем текущее время и дату
    list( $today_year, $today_month, $today_day, $hour, $minute, $second ) = split( '([^0-9])', $blogtime ); //сохраняем отдельно значения даты, часов, минут и т.д.
    
    if ($hour == 7 || $hour == 12 || $hour == 17 || $hour == 22 || $hour == 1 || $hour == 4) { // указываем на протяжении каких часов мы обновляем (перезаписываем) курс на новый
    $data="var=go";
    $fp = fsockopen("ВАШ_ДОМЕН", 80, $errno, $errstr, 10); // открыть указанный хост по 80 порту
    $out = "POST /currency/НАЗВАНИЕ_ФАЙЛА_СКРИПТА.php HTTP/1.1\n"; // открыть данный скрипт
    $out .= "Host: ВАШ_ДОМЕН\n";
    $out .= "Referer: ВАШ_ДОМЕН/\n";
    $out .= "User-Agent: Opera\n";
    $out .= "Content-Type: application/x-www-form-urlencoded\n";
    $out .= "Content-Length: ".strlen($data)."\n\n";
    $out .= $data."\n\n";
    fputs($fp, $out); // отправка данных принимающему скрипту
    fclose($fp);   
    }
     
    // открываем файл с курсом валют и записываем в массив
    $lines = file('http://ВАШ_ДОМЕН/currency.txt');
    
        if ($lines) {       
    // проверяем заполнено ли поле, если да, то умножаем на курс и записываем в $custom_price
    if ($curency == "RUB")
    {
        $custom_price = $my_price;
    }
    
    if ($curency == "USD")
    {
        $custom_price = $my_price * $lines[0];
    }
    
    if ($curency == "EUR")
    {
        $custom_price = $my_price * $lines[1];
    }
    $custom_price = round($custom_price, 2); // округляем до сотых, чтобы в regular_price не записывались огромные дроби
    
    update_post_meta( $post->ID, '_regular_price', $custom_price );
    update_post_meta( $post->ID, '_price', $custom_price );   
        }
    }
    
    add_action( 'woocommerce_get_regular_price', 'wc_myprice_show', 10 );
     
  7. Ria

    Ria

    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    6
    Подскажите пожалуйста, ничего понять не могу :( Добавляем в админку поля:
    Код:
    function wc_myprice_product_field() {
    woocommerce_wp_text_input( array( 'id' => '_my_price', 'class' => 'wc_input_price short', 'label' => __( 'Стоимость', 'woocommerce' ) ) ); // добавляем поле "Стоимость"
    woocommerce_wp_text_input( array( 'id' => '_curency_price', 'class' => 'wc_input_price short', 'label' => __( 'Валюта', 'woocommerce' ) ) ); // добавляем поле "Валюта", где указываем только RUB, USD или EUR, по желанию можно добавить новые значения или переделать это поле в выпадающий список
    }
    add_action( 'woocommerce_product_options_pricing', 'wc_myprice_product_field' );
    
    
    function wc_myprice_save_product( $product_id ) {
    if ( ( $_POST['_my_price'] ) ) {
    if ( is_numeric( $_POST['_my_price'] ) )
    update_post_meta( $product_id, '_my_price', $_POST['_my_price'] );
    } else delete_post_meta( $product_id, '_my_price' );
    
    if ( ( $_POST['_curency_price'] ) ) {
    update_post_meta( $product_id, '_curency_price', $_POST['_curency_price'] );
    } else delete_post_meta( $product_id, '_curency_price' );
    }
    add_action( 'save_post', 'wc_myprice_save_product' );
    
    
    add_action( 'woocommerce_get_regular_price', 'wc_myprice_show', 10 );
    Потом в wc-formatting-functions.php мне нужно вывести то значение которое я сохранил в поле (при редактировании товара)
    Код:
    sprintf( $price_format, '<span class="woocommerce-Price-currencySymbol">' . get_woocommerce_currency_symbol( $currency ) . '</span>', $price );
    Как мне это значение вывести вместо ' . get_woocommerce_currency_symbol( $currency ) . ' ?
     
  8. Ssssory

    Ssssory

    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Кто-нибудь знает какой action отвечает за вывод woocommerce_product_options_pricing для вариативного товара?
    Никак не могу найти в документации.
    Или ссылочку дайте, где можно почитать про нутро вариативного товара. Английский не пугает, просто не удаётся найти то, что нужно.
     
  9. Ssssory

    Ssssory

    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Разобрался. Что-то вроде:
    PHP:
    function save_product_variation$variation_id$i ){
        
    $variation_custom_data_usd $_POST['variation_custom_data_usd'][$i];
        
    $variation_custom_data_eur $_POST['variation_custom_data_eur'][$i];
      if( 
    $variation_custom_data_usd != "" ||  $variation_custom_data_eur != "" || $variation_custom_data_usd != ||  $variation_custom_data_eur != ){

        
    // save custom data usd
        
    if ( $variation_custom_data_usd != '' || $variation_custom_data_usd != ) {
            
            
    $custom_data_usd $variation_custom_data_usd;       
            
    update_post_meta$variation_id'_custom_usd'$custom_data_usd );
            
    $custom_data_usd *= 60//fix curs usd
            
    update_post_meta$variation_id'_regular_price'$custom_data_usd );
            
    update_post_meta$variation_id'_price'$custom_data_usd );
            
        }else {
    update_post_meta$variation_id'_custom_usd'"" );}
            
        if (  
    $variation_custom_data_eur != '' || $variation_custom_data_eur != 0   ) { // save custom data eur
            
            
    $custom_data_eur $variation_custom_data_eur;       
            
    update_post_meta$variation_id'_custom_eur'$custom_data_eur );
            
    $custom_data_eur *= 75//fix curs eur
            
    update_post_meta$variation_id'_regular_price'$custom_data_eur );   
            
    update_post_meta$variation_id'_price'$custom_data_eur );       
        }else {
    update_post_meta$variation_id'_custom_eur'"" ); }
      }
    }
    Говнокод, конечно. Как будет время, буду облагораживать.
     
  10. Яна Шолойко

    Яна Шолойко

    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Добрый день. Мне нужно было добавить в статус товара пункт "Под заказ", на этом форуме я нашла код
    Код:
    function add_custom_stock_type() {
        ?>
        <script type="text/javascript">
        jQuery(function(){
            jQuery('._stock_status_field').not('.custom-stock-status').remove();
        });
        </script>
        <?php
    
        woocommerce_wp_select( array( 'id' => '_stock_status', 'wrapper_class' => 'hide_if_variable custom-stock-status', 'label' => __( 'Stock status', 'woocommerce' ), 'options' => array(
            'instock' => __( 'In stock', 'woocommerce' ),
            'outofstock' => __( 'Out of stock', 'woocommerce' ),
            'onrequest' => __( 'под заказ', 'woocommerce' ), // The new option !!!
        ), 'desc_tip' => true, 'description' => __( 'Controls whether or not the product is listed as "in stock" or "out of stock" on the frontend.', 'woocommerce' ) ) );
    }
    add_action('woocommerce_product_options_stock_status', 'add_custom_stock_type');
    function save_custom_stock_status( $product_id ) {
        update_post_meta( $product_id, '_stock_status', wc_clean( $_POST['_stock_status'] ) );
    }
    add_action('woocommerce_process_product_meta', 'save_custom_stock_status',99,1);
    
    function woocommerce_get_custom_availability( $data, $product ) {
        switch( $product->stock_status ) {
            case 'instock':
                $data = array( 'availability' => __( 'In stock', 'woocommerce' ), 'class' => 'in-stock' );
            break;
            case 'outofstock':
                $data = array( 'availability' => __( 'Out of stock', 'woocommerce' ), 'class' => 'out-of-stock' );
            break;
            case 'onrequest':
                $data = array( 'availability' => __( 'под заказ', 'woocommerce' ), 'class' => 'on-request' );
            break;
        }
        return $data;
    }
    add_action('woocommerce_get_availability', 'woocommerce_get_custom_availability', 10, 2);
    он мне помог, но не совсем. Хотелось бы сделать так, что бы при статусе "Под заказ" была еще кнопка "Заказать", при нажатии на которую товар добавлялся бы в корзину и можно было бы оформить заказ. Автору писала, но он молчит. Буду очень благодарна если кто-нибудь сможет помочь.