2017-06-11 21 views
0

在我的functions.php中有一個功能如何將購物車中的品質更新爲選定的品種?

這會將量輸入更改爲具有特定值的下拉列表。

function woocommerce_quantity_input($data) { 
    global $product; 
    $defaults = array(
    'input_name' => $data['input_name'], 
    'input_value' => $data['input_value'], 
    'max_value' => apply_filters('woocommerce_quantity_input_max', '', $product), 
    'min_value' => apply_filters('woocommerce_quantity_input_min', '', $product), 
    'step' => apply_filters('woocommerce_quantity_input_step', '1', $product), 
    'style' => apply_filters('woocommerce_quantity_style', 'float:left; margin-right:10px;', $product) 
); 
    if (! empty($defaults['min_value'])) 
    $min = $defaults['min_value']; 
    else $min = 1; 
    if (! empty($defaults['max_value'])) 
    $max = $defaults['max_value']; 
    else $max = 20; 
    if (! empty($defaults['step'])) 
    $step = $defaults['step']; 
    else $step = 1; 
    $options = ''; 
    for ($count = $min; $count <= $max; $count = $count+$step) { 
    $selected = $count === $defaults['input_value'] ? ' selected' : ''; 
    $options .= '<option value="' . $count . '"'.$selected.'>' . $count . '</option>'; 
    } 
    echo '<div class="quantity_select" style="' . $defaults['style'] . '"><select name="' . esc_attr($defaults['input_name']) . '" title="' . _x('Qty', 'Product quantity input tooltip', 'woocommerce') . '" class="qty">' . $options . '</select></div>'; 
} 

具有這種功能的問題是,它也改變控管數量在車到下拉以及和套默認爲1

用戶情況下:

用戶選擇1.5量的產品,成本的單個產品頁面上10美元。然後繼續結帳。然後在購物車中有15美元的價格和數量是1.

我看到了修復它的兩種方法。

一個是隻包含單個頁面的功能,但不知道它是如何完成的。試着用$ product-> type =='product'在函數內部進行嘗試,但因爲這覆蓋了原來的那個,所以下拉菜單根本就不會顯示在購物車頁面上。

最好的方法是使用購物車中選定的金額/值更新下拉菜單。

任何提示或幫助,將不勝感激。

在此先感謝!編輯: var_dump($ data)output;

array(4) { ["input_name"]=> string(43) "cart[ec3686cdd117b8c6b8992f22e04a415b][qty]" ["input_value"]=> int(1) ["max_value"]=> NULL ["min_value"]=> string(1) "0" } 1 

購物車中的將input_value更新後的值變爲浮動:

array(4) { ["input_name"]=> string(43) "cart[ec3686cdd117b8c6b8992f22e04a415b][qty]" ["input_value"]=> float(2.2) ["max_value"]=> NULL ["min_value"]=> string(1) "0" } 2.2 
+0

用戶是否應該只能選擇整數或是否要支持十進制值? – sjdaws

+0

用戶應該可以使用小數點是。 – Giedrius

+0

你可以甩掉每個變量的值,尤其是'$ step'? – sjdaws

回答

0

既然你需要支持小數,你一步也需要支持小數或至少插入選擇的值作爲一個值。

創建值專門爲任何用戶選擇,如果計數繞過它($step是1,$data['input_value']是一個十進制):

function woocommerce_quantity_input($data) 
{ 
    global $product; 

    $defaults = array(
     'input_name' => $data['input_name'], 
     'input_value' => $data['input_value'], 
     'max_value' => apply_filters('woocommerce_quantity_input_max', '', $product), 
     'min_value' => apply_filters('woocommerce_quantity_input_min', '', $product), 
     'step'  => apply_filters('woocommerce_quantity_input_step', '1', $product), 
     'style'  => apply_filters('woocommerce_quantity_style', 'float:left; margin-right:10px;', $product), 
    ); 

    // Work out values 
    $min = !empty($defaults['min_value']) ? $defaults['min_value'] : 1; 
    $max = !empty($defaults['max_value']) ? $defaults['max_value'] : 20; 
    $step = !empty($defaults['step']) ? $defaults['step'] : 1; 

    $options = ''; 

    $lastValue = 0; 
    for ($count = $min; $count <= $max; $count = $count + $step) { 
     // Check if input value is between last value and current value, if it is create a value specifically for the selected value 
     if ($defaults['input_value'] > $lastValue && $defaults['input_value'] < $count) { 
      $options .= '<option value="' . $defaults['input_value'] . '" selected="selected">' . $defaults['input_value'] . '</option>'; 
     } 

     $selected = $count === $defaults['input_value'] ? ' selected="selected"' : ''; 
     $options .= '<option value="' . $count . '"'.$selected.'>' . $count . '</option>'; 

     // Update last value to current value 
     $lastValue = $count; 
    } 

    echo '<div class="quantity_select" style="' . $defaults['style'] . '"><select name="' . esc_attr($defaults['input_name']) . '" title="' . _x('Qty', 'Product quantity input tooltip', 'woocommerce') . '" class="qty">' . $options . '</select></div>'; 
} 

或者,也可以改變步驟是小數:

$step = !empty($defaults['step']) ? $defaults['step'] : 0.1; 
+0

我做了一些測試,我得到了相同的輸出。價格向下取整。案例:我在購物車數量上拿到2.5,dropdwon仍然會顯示1,價格將爲2.0,這與我以前的代碼具有相同的輸出。 – Giedrius

+0

當你選擇2.5時,'$ data ['input_value']'是什麼? – sjdaws

+0

看起來像它總是1 – Giedrius

相關問題