为WooCommerce产品订单返回和编译MYSQL数据

时间:2014-09-10 17:33:54

标签: php mysql wordpress woocommerce

我想要实现的是一种基于所有订单中的项目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

非常感谢你!

1 个答案:

答案 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。希望这会有所帮助。