我目前正在处理一个WordPress项目,其中有一个使用WooCommerce组成的网上商店,作为一个实践项目,我决定为客户创建退款系统,以便他们可以向其发送“退款请求”网站管理员接受还是拒绝。
退款标签分为3个不同的页面,在第一页上,客户通过输入姓名,邮政编码和订单号来确认订单,在第二页上,客户可以选择要订购的产品,输入数量,然后选中产品的复选框,则它们的数量。第三页只是确认页,客户也可以在该页中发送消息,然后按“发送请求”按钮。按下按钮后,来自请求选项卡的信息将插入到名为wp_refundrequests的自定义表中,该表用于在管理页面上显示所有请求。
我的问题是,在第二页上,客户应该选择要退款的某些产品的数量,总是在我的代码中显示最大数量,而我无法确定如何处理为了使其正常工作,只用用户输入的金额即可。
这是第二页的代码,这里的问题是:
<div class="Etusivu">
<form action="" method="post" style="border:0px solid #ccc">
<legend><b>Product refund</b></legend>
<div class="step">
<legend>Step 2/3</legend>
</div>
<br />
<p class="important">Order information</p>
<br />
<div class="valitse">
<p class="important">Choose all of the products you want to refund.</p>
</div>
<hr>
<script>
//function for making a checkbox to check all checkboxes
function toggle(source) {
checkboxes = document.getElementsByName('productinfo[]');
for(var i=0, n=checkboxes.length;i<n;i++) {
checkboxes[i].checked = source.checked;
}
}
</script>
<input type='checkbox' onClick='toggle(this)' />
<p class="selectall">Select all products</p>
<label>The order:</p>
<br />
<?php
//Gets and displays data based on certain variables from the database, connects quantity and product name into one string in
$order = wc_get_order( $ordernumber );
foreach ($order->get_items() as $item ){
$unitprice = $item->get_total() / $item->get_quantity();
// This is the part that currently gets the quantity value for the next page/the refund request
echo "<input type='checkbox' name='productinfo[]' value='" . " " . $item->get_name() . " , " . $item->get_quantity() . " QTY" . " | " . $item->get_total() ."'>";
echo '<p>';
echo __('Product name: ' ) . $item->get_name() . '<br>';
if($item->get_quantity() > 1) {
echo "Quantity: " . "<input type='number' name='numberqty' value='" . $item->get_quantity() . "'max='" .$item->get_quantity() . "' min='1' > " . "<br/>";
}
else {
echo __('Quantity: ' ) . $item->get_quantity() . '<br>';
}
if ($item->get_quantity() > 1) {
echo __('Product price: ') . $unitprice . '€' . '<br/>';
}
echo __('Products total: ' ) . wc_price($item->get_total()) . '</p>' . '<br/>';
}
echo '<p>'. __('Order total: ') . $order->get_total() . '</p>';
?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="submit" id='check' value="Next"/>
<script>
//Checks if any checkboxes have been checked, if not, displays an error
function checkBoxCheck() {
if($('input[name="productinfo[]"]:checked').length) {
console.log("at least one checked");
return true;
}
else {
alert("Select at least 1 product.");
return false;
}
}
//runs the script for checking the checkboxes
$('#check').on('click', checkBoxCheck);
</script>
</label>
<input type="hidden" name="page" value="2">
</form>
<br />
</div>
</body>
</html>
<?php
编辑:因此,为了更清楚一点,这里的问题是我正在建立一个系统,客户可以使用该系统退回第2/3页上的某些当前我遇到问题的产品,用户可以查看他的订单中包括的所有产品,并且所有产品都有自己的复选框,因此用户可以选择要退款的产品。现在,当用户选择一个产品并按下“下一步”时,下一页3/3会显示所选信息。该页面上显示的值是产品名称,产品价格和产品QUANTITY。但是,QUANTITY的金额始终与客户订购的金额相同,并且在2/3页(用户选择要退款的产品的位置)上,我希望能够输入我要退款的产品数量退款,并在复选框数组中具有此值。
例如。我已经购买了5条电缆,但是我只想退还其中2条,所以我在输入字段中输入了2。
答案 0 :(得分:1)
首先,您必须更改以下内容:
echo "<input type='checkbox' name='productinfo[]' value='" . " " . $item->get_name() . " , " . $item->get_quantity() . " QTY" . " | " . $item->get_total() ."'>";
到
echo "<input type='checkbox' class='" . $item->get_id() . "checkBox' name='productinfo[]' value='" . " " . $item->get_name() . " , " . $item->get_quantity() . " QTY" . " | " . $item->get_total() ."'>";
这:
if($item->get_quantity() > 1) {
echo "Quantity: " . "<input type='number' name='numberqty' value='" . $item->get_quantity() . "'max='" .$item->get_quantity() . "' min='1' > " . "<br/>";
}
对此:
if($item->get_quantity() > 1) {
echo "Quantity: " . "<input type='number' class='" . $item->get_id() . "' name='numberqty' value='" . $item->get_quantity() . "'max='" .$item->get_quantity() . "' min='1' onchange='changeCheckBoxValue(this.className)'> " . "<br/>";
}
如果您的商品上没有get_id(),请使用任何唯一标识符。
以下这段代码负责触发更改复选框值的事件
onchange='changeCheckBoxValue(this.className)
最后在代码中添加以下功能:
function changeCheckBoxValue(className) {
var checkBox = document.getElementsByClassName(className + 'checkBox')[0];
var currentValue = checkBox.value;
var wantedAmount = document.getElementsByClassName(className)[0].value;
checkBox.value = currentValue .replace(new RegExp('[0-9]* QTY'),wantedAmount + ' QTY');
}
这将更新复选框的值
祝你好运