2017-01-28 2 views
3

Я нашел код для добавления существующего продукта:Динамически вычислить цену продукта на основе пользовательских значений полей при добавлении к корзине

global $woocommerce; 
$woocommerce->cart->add_to_cart(16); 

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

  1. Возраст
  2. Качество

рассчитать цену продукта по формуле возраста *качественный.

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

Можно ли динамически устанавливать цену продукта на основе расчетных значений пользовательских полей?

Благодаря

ответ

2

Для КОРЗИНЫ пунктов (когда продукт добавлен к корзине), можно установить пользовательские динамическую расчетную цену, основанную на продукт пользовательских значений полей.

1) Сначала мы добавим в отдельных страницах продукта ваших 2 пользовательских полей (здесь нормального text input поле и поле select) для "Age" и "Quality":

// Add product custom fields inside the product add-to-cart form 
add_action('woocommerce_before_add_to_cart_button', 'custom_data_hidden_fields'); 
function custom_data_hidden_fields() { 
    echo '<div class="imput_fields custom-imput-fields"> 
     <label class="age_prod">Age: <br><input type="text" id="age_prod" name="age_prod" value="" /></label> 
     <label class="quality_prod">Quality: <br> 
      <select name="quality_prod" id="quality_prod"> 
       <option value="1" selected="selected">1</option> 
       <option value="2">2</option> 
       <option value="3">3</option> 
       <option value="4">4</option> 
       <option value="5">5</option> 
      </select> 
     </label> 
    </div><br>'; 
} 

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

// Save product custom fields values after submission into the cart item data 
add_action('woocommerce_add_cart_item_data', 'save_custom_data_hidden_fields', 10, 2); 
function save_custom_data_hidden_fields($cart_item_data, $product_id) { 

    $data = array(); 

    if(isset($_REQUEST['age_prod'])) { 
     $cart_item_data['custom_data']['age'] = $_REQUEST['age_prod']; 
     $data['age'] = $_REQUEST['age_prod']; 
    } 

    if(isset($_REQUEST['quality_prod'])) { 
     $cart_item_data['custom_data']['quality'] = $_REQUEST['quality_prod']; 
     $data['quality'] = $_REQUEST['quality_prod']; 
    } 

    // below statement make sure every add to cart action as unique line item 
    $cart_item_data['custom_data']['unique_key'] = md5(microtime().rand()); 
    WC()->session->set('price_calculation', $data); 

    return $cart_item_data; 
} 

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

Я сделал временный расчет, чтобы показать, что код работает должным образом.

Здесь В приведенном ниже коде вам нужно будет подстроить расчет в соответствии с вашими потребностями (так как вы не сообщаете об этом в своем вопросе).
Как вы увидите ниже, это простой шаг, чтобы сделать свой собственный расчет, поскольку вы получаете свои собственные значения полей для каждой позиции корзины, а также оригинальную цену продукта.

Вот код, который сделает этот динамический расчет на основе пользовательских значений полей:

// Replace the item price by your custom calculation 
add_action('woocommerce_before_calculate_totals', 'add_custom_item_price', 10); 
function add_custom_item_price($cart_object) { 

    foreach ($cart_object->get_cart() as $item_values) { 

     ## Get cart item data 
     $item_id = $item_values['data']->id; // Product ID 
     $original_price = $item_values['data']->price; // Product original price 

     ## Get your custom fields values 
     $age = $item_values['custom_data']['age']; 
     $quality = $item_values['custom_data']['quality']; 

     // CALCULATION FOR EACH ITEM: 
     ## Make HERE your own calculation to feet your needs <== <== <== <== 
     $new_price = $original_price + (($age * 0.1) + $quality); 

     ## Set the new item price in cart 
     $item_values['data']->price = $new_price; 
    } 
} 

код идет в function.php файл вашей активной темы ребенка (или темы), или же в любом файл плагина.

Код проверен и работает отлично.

ОТОБРАЖЕНИЕ CUSTOM ЦЕНА НА ОДНОЙ СТРАНИЦЕ ПРОДУКТА:

Read this to understand how override the WoocCommerce templates via your theme

За то, что вам нужно будет отредактировать шаблон single-product/price.php.

И вам нужно будет добавить javascript/jQuery на эту страницу, чтобы обновить продукт, когда клиент установит некоторые значения в пользовательских полях вашего продукта.
Но это еще один вопрос.


Связанные ответ: WooCommerce - Adding a custom price to each product in cart

Смежные вопросы