Разные цены для детей в Woocommerce - PullRequest
1 голос
/ 29 февраля 2020

Я создаю сайт туристического агентства, и клиенту нужны две разные цены на каждый продукт. Один для детей, другой для взрослых.

Например, цена продукта для взрослых составляет 100 долларов, а для детей - 90 долларов. Итак, на странице одного продукта я хочу два поля ввода: «Количество взрослых» и «Количество детей», и я хочу, чтобы он вычислял цену на основе количества, введенного пользователем.

Так, например, если пользователь набирает «2 взрослых» и «1 ребенок», общая сумма корзины должна составлять $ 290

Может кто-нибудь подсказать, как это сделать?

Я знаю, как создать кастом поле для детской цены в админке товара и поля ввода на странице одного товара, но я не знаю, как сделать расчет и показать его в корзине.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 29 февраля 2020

Я думал об использовании вариантов продукта, но я хочу, чтобы пользователь мог добавлять оба количества в корзину одновременно, без добавления первых взрослых и после детей.

Я довольно новичок в программировании, поэтому я точно не знаю лучших практик для достижения того, чего я хочу, но вот что я попробовал до сих пор:

Создано дополнительное поле для получения скидка для детей на странице администрирования продукта. Таким образом, цена для взрослых составит, например, 100 долларов, а дети получат скидку в 10 долларов.

/* create field in product advanced */
function create_child_discount_field() {
    $args = array(
    'id' => 'child_discount',
    'label' => __( 'Discount for children', 'cfwc' ),
    'class' => 'custom-field',
    );
    woocommerce_wp_text_input( $args );
}
add_action( 'woocommerce_product_options_advanced', 'create_child_discount_field' );

/* save field */
function save_child_discount_field( $post_id ) {
    $product = wc_get_product( $post_id );
    $title = isset( $_POST['child_discount'] ) ? $_POST['child_discount'] : '';
    $product->update_meta_data( 'child_discount', sanitize_text_field( $title ) );
    $product->save();
}
add_action( 'woocommerce_process_product_meta', 'save_child_discount_field' );

Созданные поля ввода на странице продукта выглядят так:

add_action( 'woocommerce_before_add_to_cart_button', 'custom_qty_fields', 5 );

function custom_qty_fields(){
        echo '<div class="custom-field">
                <p>Quantity of adults:</p>
                <input type="text" name="qty_adults" value="" title="Qty Adults">
             </div>
             <div class="custom-field">
                <p>Quantity of children:</p>
                <input type="text" name="qty_children" value="" title="Qty Children">
             </div>';
}

Теперь, когда я не Не знаю, как отправить эти поля количества и вычислить значение, вот что я сделал:

Я скрыл исходное поле количества Woocommerce, используя css (непрозрачность: 0), и использовал jquery для вычисления количества детей + кол-во взрослых, а затем установите результат в поле скрытого количества woocommerce. Допустим, например, что пользователь вводит 5 взрослых и 2 детей, jquery вычислит 5 + 2 и установит 7 в поле стандартного количества woocommerce, поэтому общее количество в корзине будет равно 7.

Тогда я хочу вычислить количество детей, умноженное на поле скидки для детей, установленное в продукте, и установить значение в качестве скидки, используя действие для расчета сборов в корзине:

add_action('woocommerce_cart_calculate_fees' , 'add_discount_for_children');

function add_discount_for_children( WC_Cart $cart ){

    $discount = ??? //no clue on how to do that :(

    $cart->add_fee( 'Discount for children', -$discount);
}

Я действительно не Я знаю лучшие практики для достижения этой цели, и я, вероятно, делаю это очень плохо, но я надеюсь, что вы, ребята, сможете лучше понять, что я хочу, и укажете мне правильное направление.

Еще раз спасибо!

0 голосов
/ 29 февраля 2020

Я думаю, вы можете использовать варианты продукта для того же результата. Вы можете определить 2 варианта, Взрослый и Детский, каждый со своими указанными c ценами. Смотри, это было сделано на тестовой площадке.

https://i.stack.imgur.com/446c5.png Определить варианты.

https://i.stack.imgur.com/6Se8h.png Ребенок

https://i.stack.imgur.com/hr2QE.png Взрослый

Будет отображаться так:

enter image description here

Если это не работает для вас Пожалуйста, предоставьте больше информации о вашей проблеме и настройке W c. Например, код и ошибки, которые вы нашли. Это поможет нам помочь вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...