我正在尝试显示所有愿望清单,woocommerce插件的产品。此外,我想使wishlist可以排序,所以我将它连接到数据库,如果没有给定唯一ID的行,它将按类别无组织显示所有产品。
如果有唯一ID,则应显示其中的所有项目。现在它显示$ row如下:
Array (
[0] => 237
[1] => 243
[2] => 266
)
Array (
[0] => 237
[1] => 243
[2] => 266
)
Array (
[0] => 237
[1] => 243
[2] => 266
)
由于3个产品属于同一类别,因此会同时显示3个产品。
<?php
// db conn
$mysqli = new mysqli(
"localhost",
"root",
"root",
"nest"
);
// new wishist
$wishlist = new WC_Wishlists_Wishlist( $_GET['wlid'] );
// get products from wishlist
$wishlist_items = WC_Wishlists_Wishlist_Item_Collection::get_items( $wishlist->id, true );
// counter - useless at the moment
$counter = 0;
// loop through all products
foreach ( $wishlist_items as $wishlist_item_key => $item ) {
$counter++;
// get product id
$product_id = apply_filters( 'woocommerce_cart_item_product_id', $item['product_id'], $item, $wishlist_item_key );
// get categories
$cats = get_the_terms($product_id, 'product_cat');
// loop categories
foreach ($cats as $cat) {
// get slug
$product_cat = $cat->slug;
}
// wishlist id is set in the database as a primary key - unique.
$wlid_cats = $product_cat . $wishlist->id;
// query with results
$result = $mysqli->query("
SELECT list
FROM sortable
WHERE wlid_cats = '$wlid_cats' "
);
// results parsed into $row
$row = $result->fetch_array(MYSQLI_NUM);
if (isset($row)) {
// change string to array
$row = implode(' ', $row);
// split array item[0] into diff items.
$row = preg_split("/[\s,]+/", $row);
}
// get product data
$_product = wc_get_product( $item['data'] );
if ( $_product->exists() && $item['quantity'] > 0 ) {
$product_permalink = apply_filters( 'woocommerce_cart_item_permalink', $_product->is_visible() ? $_product->get_permalink( $item ) : '', $item, $wishlist_item_key );
// $cate is a function parameter which asks for the category to be displayed
if ($product_cat == $cate && empty($row)) {
?>
<!--Saved for Jquery reasons - POST to db-->
<p style="display: none" id="<?= $wishlist->id ?>" class="<?= $wishlist->id ?> "><?= $cate ?></p>
<li class="product-thumbnail" type="<?= $cate ?>" id="product-<?= $product_id ?>">
<?php
// gets thumbnail and displays it
$thumbnail = apply_filters('woocommerce_cart_item_thumbnail', $_product->get_image(), $item, $wishlist_item_key);
echo $wlid_cats;
if (!$product_permalink) {
echo $thumbnail;
} else {
printf('<a href="%s">%s</a>', esc_url($product_permalink), $thumbnail);
}
?>
</li>
<?php
} elseif (!empty($row)) {
// where I'm stuck
print_r($row);
}
}
} ?>
如何将输出合并为仅获取一个数组而不是3?
答案 0 :(得分:0)
制作新的全球数组
$narray = array();
然后在你的情况
elseif (!empty($row)) {
// where I'm stuck
$narray[] = $row; // add the array
}
$result = array_map("unserialize", array_unique(array_map("serialize", $narray)));
print_r($result);
答案 1 :(得分:0)
我试图在这里解决问题。 不应该查询
$result = $mysqli->query("
SELECT list
FROM sortable
WHERE wlid_cats = '$wlid_cats' "
);
让类别列表不仅仅是一个类别,如果有重复类别,它会对其进行排序。
重新阅读你的问题并尝试解决这个问题。
因此,在第12行,您已经拥有了这些项目的ID,现在您需要通过“可排序”对其进行排序。表
所以一个查询(如果这只是普通的sql)会是这样的。
//订单的itemIds
$order = "itemId=3 DESC,itemId=1 DESC,itemId=5 DESC,itemId=6 DESC,category DESC";
$query = "SELECT * FROM items WHERE itemID IN (myItems) ORDER BY ".$order;
也许我在这里错过了这一点,但是sql是健全的。