Расчет цены товара в корзине на основе выбранного настраиваемого поля «дни» в Woocommerce.Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Расчет цены товара в корзине на основе выбранного настраиваемого поля «дни» в Woocommerce.

Сообщение Anonymous »

В Woocommerce я использую настраиваемые поля для расчета цены продукта на основе кода этой темы: Отображать настраиваемые поля продукта как элементы заказа в Woocommerce 3.

// Add a custom field before single add to cart
add_action('woocommerce_before_add_to_cart_button', 'custom_product_price_field', 5);

function custom_product_price_field() {
echo '
Rental
Start Date:

Period Rental:

choosen period
2 days
4 days

';
}

// Get custom field value, calculate new item price, save it as custom cart item data
add_filter('woocommerce_add_cart_item_data', 'add_custom_field_data', 20, 3);

function add_custom_field_data($cart_item_data, $product_id, $variation_id) {
if (isset($_POST['rental_date']) && !empty($_POST['rental_date'])) {
$cart_item_data['custom_data']['date'] = $_POST['rental_date'];
}
if (isset($_POST['custom_price']) && !empty($_POST['custom_price'])) {
$_product_id = $variation_id > 0 ? $variation_id : $product_id;
$product = wc_get_product($_product_id); // The WC_Product Object
$base_price = (float) $product - > get_regular_price(); // Product reg price
$custom_price = (float) sanitize_text_field($_POST['custom_price']);

$cart_item_data['custom_data']['base_price'] = $base_price;
$cart_item_data['custom_data']['new_price'] = $base_price/100 * 15 * $custom_price;
$cart_item_data['custom_data']['rental'] = $custom_price;
}
if (isset($cart_item_data['custom_data']['new_price']) || isset($cart_item_data['custom_data']['date'])) {
$cart_item_data['custom_data']['unique_key'] = md5(microtime().rand()); // Make each item unique
}
return $cart_item_data;
}

// Set the new calculated cart item price
add_action('woocommerce_before_calculate_totals', 'extra_price_add_custom_price', 20, 1);

function extra_price_add_custom_price($cart) {
if (is_admin() && !defined('DOING_AJAX'))
return;

foreach($cart - > get_cart() as $cart_item) {
if (isset($cart_item['custom_data']['new_price']))
$cart_item['data'] - > set_price((float) $cart_item['custom_data']['new_price']);
}
}

// Display cart item custom price details
add_filter('woocommerce_cart_item_price', 'display_cart_items_custom_price_details', 20, 3);

function display_cart_items_custom_price_details($product_price, $cart_item, $cart_item_key) {
if (isset($cart_item['custom_data']['base_price'])) {
$product = $cart_item['data'];
$base_price = $cart_item['custom_data']['base_price'];
$product_price = wc_price(wc_get_price_to_display($product, array('price' => $base_price))).
'
';
if (isset($cart_item['custom_data']['rental'])) {
$product_price. = $cart_item['custom_data']['rental'] == '2' ? __("2 days") : __("4 days");
}
}
return $product_price;
}

// Display in cart item the selected date
add_filter('woocommerce_get_item_data', 'display_custom_item_data', 10, 2);

function display_custom_item_data($cart_item_data, $cart_item) {
if (isset($cart_item['custom_data']['date'])) {

$cart_item_data[] = array(
'name' => __("Chosen date", "woocommerce"),
'value' => date('d.m.Y', strtotime($cart_item['custom_data']['date'])),
);
}
if (isset($cart_item['custom_data']['rental'])) {
$cart_item_data[] = array(
'name' => __("Period Rental", "woocommerce"),
'value' => $cart_item['custom_data']['rental'] == '2' ? __("2 days") : __("4 days"),
);
}
return $cart_item_data;
}


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

Если пользователь выберет «2 дня», то расчет будет таким... $base_price/100 * 15 * value=2

Если пользователь выберет «4 дня», то расчет будет таким... $base_price/100 * 15 * value=4

Как это сделать?

ОБНОВЛЕНИЕ: Извините, забыл добавить последнее код, который ты мне дал. Как быть с ним?

// Save and display custom field in orders and email notifications (everywhere)
add_action( 'woocommerce_checkout_create_order_line_item', 'custom_fields_update_order_item_meta', 20, 4 );
function custom_fields_update_order_item_meta( $item, $cart_item_key, $values, $order ) {
if ( isset( $values['custom_data']['date'] ) ){
$date = date( 'd.m.Y', strtotime( $values['custom_data']['date'] ) );
$item->update_meta_data( __( 'Choosen Date', 'woocommerce' ), $date );
}
if ( isset( $values['custom_data']['rental'] ) ){
$rental = $values['custom_data']['rental'] == '2' ? __("2 days") : __("4 days");
$item->update_meta_data( __( 'Period Rental', 'woocommerce' ), $rental );
}
}


Подробнее здесь: https://stackoverflow.com/questions/520 ... oocommerce
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»