• Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!

Решено Разные валюты в ценах на товары

Ria

Форумчанин
#1
Подскажите, можно ли как-то организовать следующее, на пример есть товары, но нужно указать цены в разных валютах: Товар 1: цена 10 евро; Товар 2: цена 10 руб.; Товар 3 цена 10 usd;
Выходит что каждого товара должна быть своя валюта в общем списке
 

Ria

Форумчанин
#2
P.S. либо устроило бы следующее: можно ли на странице добавления товара в поле
Базовая цена самому вводить (текст для валюты), к примеру 8 usd 8 руб. (в общим разрешить вводить буквы в поле), а сам символ валюты я просто уберу для отображения
 

Ria

Форумчанин
#4
Тему "Woocommerce, каждому товару своя валюта" почитайте. На базе нее можно набросать решение.
Спасибо, сейчас ознакомлюсь, подскажите пожалуйста, по моему посту второму в этой теме: "
устроило бы следующее: можно ли на странице добавления товара в поле
Базовая цена самому вводить (текст для валюты), к примеру 8 usd 8 руб. (в общим разрешить вводить буквы в поле), а сам символ валюты я просто уберу для отображения"

Можно как-то разрешить вводить буквы/символы в поле базовая цена? Мне этот вариант был бы в идеале

Или еще лучше - добавить пустое поле для текста и выводить его рядом с ценой в одну строчку
 

Ria

Форумчанин
#5
Сам задаю вопросы, а потом сам себе даю ответы :) В общим так, добавил я дополнительное поле на странице добавления товара в админке, вывожу его, все работает, остаеться вопрос: как можно разрешить в это поле вводить буквы и символы, а то запрашивает только ввод цифр. (сделал по примеру который нашел здесь на форуме): http://wpincode.com/proizvolnye-polya-v-woocommerce/
 

searchingman

Гуру
Местный
#6
Сам задаю вопросы, а потом сам себе даю ответы :) В общим так, добавил я дополнительное поле на странице добавления товара в админке, вывожу его, все работает, остаеться вопрос: как можно разрешить в это поле вводить буквы и символы, а то запрашивает только ввод цифр. (сделал по примеру который нашел здесь на форуме): http://wpincode.com/proizvolnye-polya-v-woocommerce/
В теме для прочтения есть ответ как снять ограничение на цифры с помощью передаваемого класса.
 

Ria

Форумчанин
#7
Спасибо, получилось, а не подскажите, в каком файле подправить нужно что бы именно в строке Базовая цена можно было текст ввести? Не могу найти что-то(
 

searchingman

Гуру
Местный
#8
Вносить в "базовая цена" что-то кроме цифр не совсем верно. Поле может использоваться не только для показа цены, но и для операций сравнения и т.д. Т.е. в этом поле должно быть только числовое значение.
Добавьте дополнительное поле и назовите его "Валюта товара", в которое вносите валюту товара (USD, EUR и т.д.).
При выводе цены у товара анализируйте поле валюта и пересчитывайте цену по нужному курсу валюты.
Тема Автоматический пересчет цен по курсу Вам в помощь.
 

Ria

Форумчанин
#9
Ребята, помогите пожалуйста разобраться, ничего не могу понять и ничего не выходит: как это все сделать?

1. Вывести в админке товара только одно дополнительное поле (например: "Валюта"!!!)

2. Вывести это значение в товарах (например как выводиться символ валют get_currency_symbol() ) как правильно этот запрос сформировать для доп.поля?

Помогите пожалуйста, как правильно прописать в functions.php (это дополнительное поле ОДНО) и каким запросом выводить на страницах магазина. P.S. пересчет по курсам не нужен! Только ОДНО ПОЛЕ и его вывод!!!
 

Ria

Форумчанин
#10
Начал с самого начала :) Уже есть подвижки, добавляем произвольное поле с вводом текста и сохраняем его:
Код:
add_action( 'woocommerce_product_options_general_product_data', 'wc_rooms_product_field' );
  function wc_rooms_product_field() {
  woocommerce_wp_text_input( array( 'id' => 'rooms', 'class' => 'wc_input_curency_price short', 'label' => __( 'Валюта', 'woocommerce' ) . ' ' ) );
  }
 
add_action( 'save_post', 'wc_rooms_save_product' );
  function wc_rooms_save_product( $product_id ) {
    // Если это автосохранение, то ничего не делаем, сохраняем данные только при нажатии на кнопку Обновить
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
    if ( isset( $_POST['rooms'] ) ) { update_post_meta( $product_id, 'rooms', $_POST['rooms'] );
  } else delete_post_meta( $product_id, 'rooms' );
  }
Все ок! Поле добавилось, значение сохранилось! То что нужно!
Далее есть проблемка, например если я добавлю в price.php в эту строчку:
Код:
<p class="price"><?php echo $product->get_price_html(); ?></p>
например так:
Код:
<p class="price"><?php echo $product->get_price_html(); ?> <?php echo '<span class="woocommerce-price">' .get_post_meta( $product->id, 'rooms', true ); '</span>'; ?></p>
То у меня все отлично выводит (именно то значение которое я написал в доп.текстовое поле.

Так вот проблема, мне нужно это же значение прописать в wc-formatting-functions.php в эту строчку:
Код:
    $formatted_price = ( $negative ? '-' : '' ) . sprintf( $price_format, '<span class="woocommerce-Price-currencySymbol">' . get_woocommerce_currency_symbol( $currency ) . '</span>', $price );
Вместо <span class="woocommerce-Price-currencySymbol">' . get_woocommerce_currency_symbol( $currency ) . '</span>
я добавляю <span class="woocommerce-price">' .get_post_meta( $product->id, 'rooms', true ). '</span>

И тут ничего не происходит - не выводит здесь текст из доп. поля. Подскажите пожалуйста, как поправить нужно?
 

Ria

Форумчанин
#11
Начал с самого начала :) Уже есть подвижки, добавляем произвольное поле с вводом текста и сохраняем его:
Код:
add_action( 'woocommerce_product_options_general_product_data', 'wc_rooms_product_field' );
  function wc_rooms_product_field() {
  woocommerce_wp_text_input( array( 'id' => 'rooms', 'class' => 'wc_input_curency_price short', 'label' => __( 'Валюта', 'woocommerce' ) . ' ' ) );
  }
 
add_action( 'save_post', 'wc_rooms_save_product' );
  function wc_rooms_save_product( $product_id ) {
    // Если это автосохранение, то ничего не делаем, сохраняем данные только при нажатии на кнопку Обновить
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
    if ( isset( $_POST['rooms'] ) ) { update_post_meta( $product_id, 'rooms', $_POST['rooms'] );
  } else delete_post_meta( $product_id, 'rooms' );
  }
Все ок! Поле добавилось, значение сохранилось! То что нужно!
Далее есть проблемка, например если я добавлю в price.php в эту строчку:
Код:
<p class="price"><?php echo $product->get_price_html(); ?></p>
например так:
Код:
<p class="price"><?php echo $product->get_price_html(); ?> <?php echo '<span class="woocommerce-price">' .get_post_meta( $product->id, 'rooms', true ); '</span>'; ?></p>
То у меня все отлично выводит (именно то значение которое я написал в доп.текстовое поле.

Так вот проблема, мне нужно это же значение прописать в wc-formatting-functions.php в эту строчку:
Код:
    $formatted_price = ( $negative ? '-' : '' ) . sprintf( $price_format, '<span class="woocommerce-Price-currencySymbol">' . get_woocommerce_currency_symbol( $currency ) . '</span>', $price );
Вместо <span class="woocommerce-Price-currencySymbol">' . get_woocommerce_currency_symbol( $currency ) . '</span>
я добавляю <span class="woocommerce-price">' .get_post_meta( $product->id, 'rooms', true ). '</span>

И тут ничего не происходит - не выводит здесь текст из доп. поля. Подскажите пожалуйста, как поправить нужно?
Дайте пожалуйста совет) Как правильно вывести это значение в wc-formatting-functions.php?

Просто показывать поле на самом сайте работает:

Код:
/*************Показываем поле на самом сайте********/
add_action( 'woocommerce_single_product_summary', 'wc_rooms_show', 15 );
  function wc_rooms_show() { global $product;
    // Ничего не предпринимаем для вариативных товаров
    if ( $product->product_type <> 'variable' ) {$rooms = get_post_meta( $product->id, 'rooms', true );
      echo '<div style="width: 72%; height: 0; border-bottom: 1px dotted violet;">&nbsp;</div> <div class="woocommerce_msrp">';
      _e( 'Валюта: ', 'woocommerce' );
      echo '<span class="woocommerce-rooms-price">' . woocommerce_clean( $rooms ) . '</span>';
      echo '</div>';
    }
  }
Пробовал и так: $rooms = get_post_meta( $product->id, 'rooms', true ) - все равно пусто(