2017-06-11 3 views
0

Haben Sie eine Funktion in meiner Funktionen.phpWie wird die Menge in einem Einkaufswagen in einem ausgewählten Artikel aktualisiert?

Dies wird die Quantie Eingabe in das Dropdown mit den spezifischen Werten ändern.

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>'; 
} 

Das Problem mit dieser Funktion ist, dass es so gut und setzt standardmäßig auf 1.

Benutzer Fall auch quanity wechselt in Warenkorb auf Dropdown:

Benutzer wählt 1.5 Menge des Produkts, die Kosten 10 $ auf der einzelnen Produktseite. Dann geht es zur Kasse. Dann im Warenkorb gibt es einen Preis von 15 $ und die Menge ist 1.

Ich sehe zwei Möglichkeiten, es zu beheben.

Man enthält die Funktion nur für einzelne Seite, aber nicht sicher, wie es gemacht wird. Versucht mit if $ product-> type == 'product' innerhalb der Funktion, aber da diese die ursprüngliche überschreibt, wird das Dropdown auf der Warenkorbseite überhaupt nicht angezeigt.

Am besten aktualisieren Sie das Dropdown-Menü mit dem ausgewählten Betrag/Wert im Warenkorb.

Alle Tipps oder Hilfe wäre willkommen.

Vielen Dank im Voraus!

EDIT: var_dump ($ Daten) Ausgabe;

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

nachdem der Wert in den Warenkorb gelegt, die input_value Aktualisierprozesses schweben:

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

Kann der Benutzer nur ganze Zahlen auswählen oder möchten Sie Dezimalwerte unterstützen? – sjdaws

+0

Benutzer sollte Dezimalstellen ja verwenden können. – Giedrius

+0

Können Sie die Werte für jede Variable ausgeben, insbesondere "$ step"? – sjdaws

Antwort

0

Da Sie Dezimalzahlen unterstützen müssen, auch Ihre Schritt benötigen Dezimalstellen zu unterstützen oder zumindest legen Sie den ausgewählten Wert als ein Wert.

Wert erstellen speziell für was auch immer der Benutzer ausgewählt, wenn Zählung es umgeht ($step 1, $data['input_value'] eine Dezimalzahl ist):

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>'; 
} 

Alternativ können Sie den Schritt ändern Dezimalstellen sein:

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

Ich habe einige Tests durchgeführt, und ich bekomme die gleiche Ausgabe. Die Preise sind abgerundet. Fall: Ich nehme 2.5 in den Warenkorb Menge dropdwon wird immer noch 1, und der Preis wird für 2.0, das ist genau die gleiche Ausgabe, die ich für den vorherigen Code hatte. – Giedrius

+0

Was ist in $ data ['input_value'] 'wenn Sie 2.5 auswählen? – sjdaws

+0

scheint wie es ist immer 1 – Giedrius

Verwandte Themen