我想要实现的是一种基于所有订单中的项目sku搜索我们的woocommerce订单的方法。一旦搜索到sku,它将显示包含搜索查询的skus的所有订单中的所有项目,并将提供有关它的数据。
我已经非常接近但不确定这里出了什么问题。
搜索代码:
<form action="url.php" method="get">
Order Number <input type="text" name="orderNumber" /><br />
<form action="url.php" method="get">
SKU <input type="text" name="itemSku" /><br />
<input type="submit" />
</form>
这里是代码,目前只设置为通过搜索mysql数据库并组合共享共同行“order_item_id”的两个表中的数据,根据订单号返回项目:
<?php
$search_ordernumber = $_GET["orderNumber"];
$search_sku = $_GET["itemSku"];
$con=mysqli_connect("****","****","****","****");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
echo "<table border='1'>
<tr>
<th>Order ID</th>
<th>Item</th>
<th>OIK</th>
<th>Quantity</th>
<th>Tax Class</th>
<th>Product ID</th>
<th>Variation ID</th>
<th>Subtotal</th>
<th>Tax</th>
<th>Subtotal Tax</th>
<th>Color</th>
<th>Size</th>
</tr>";
$moreresult = mysqli_query($con,"SELECT *
FROM wp_woocommerce_order_items AS t1
INNER JOIN wp_woocommerce_order_itemmeta AS t2 ON t1.order_item_id = t2.order_item_id WHERE order_id='$search_ordernumber'");
while($rows = mysqli_fetch_array($moreresult)) {
echo "<tr>";
echo "<td>" . $rows['order_id'] . "</td>";
echo "<td>" . $rows['order_item_name'] . "</td>";
echo "<td>" . $rows['order_item_id'] . "</td>";
//echo "<td>" . $rows['meta_key'] . "</td>";
echo "<td>" . $rows['meta_value'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_close($con);
?>
以下是订单号搜索“3003”的当前给定结果,您可以看到它将每个项目重复为一个新行(它似乎是基于它为每个meta_value复制一个新行而引起的)每个项目):http://tinyurl.com/npml5jn
非常感谢你!
答案 0 :(得分:0)
您不需要针对任何此类运行自定义mySQL查询。像这样放弃你的数据库信誉并不酷。
首先,在Wordpress / WooCommerce中运行查询似乎有些倒退。有一个名为WC_Order的类,可以让你根据需要提取数据。
$order = new WC_Order('3003');
这会返回一个对象,我们可以做各种整洁的事情 - 特别是获取订单项。
$items = $order->get_items();
这将返回按此顺序购买的所有商品/产品的数组。
偏斜数据将与产品相关联,而不是与订单或订单项元数据相关联。根据所安装的扩展,在创建订单时,可能会或可能不会将倾斜等信息添加到订单商品元。获得它的一种可靠方法是运行一个函数来根据订单商品的产品ID获取后元数据。
// The '&' symbol allows us to store data back to the array
foreach ( $items as &$item ) :
$productID = $item['product_id'];
//get an array of all the
$sku = get_post_meta($productID, 'sku', true);
$item['sku'] = array( 'productID' => $productID, 'sku' => $sku );
endforeach;
然后,您可以遍历$items
以显示您需要的内容。
<table>
<tr>
<th>Product ID</th>
<th>SKU</th>
</tr>
<?php foreach( $items as $item ) : ?>
<tr>
<td><?php echo $item['product_id']; ?></td>
<td><?php echo $item['sku']; ?></td>
</tr>
<?php endforeach; ?>
</table>
如果您尝试访问Wordpress插件之外的数据到主题,我会查看WooCommerce REST API。希望这会有所帮助。