所以我做了很多环顾网络,无法找到解决方案......
基本上我要做的就是显示用户在商店购买的所有产品的产品循环,就像显示普通产品一样。
如果你仍然不明白这可能会帮助你明白我的意思..
以下是WooCommerce文档中的示例产品循环...
<ul class="products">
<?php
$args = array(
'post_type' => 'product',
'posts_per_page' => 12
);
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
while ( $loop->have_posts() ) : $loop->the_post();
woocommerce_get_template_part( 'content', 'product' );
endwhile;
} else {
echo __( 'No products found' );
}
wp_reset_postdata();
?>
</ul><!--/.products-->
那么,如果我想基本上显示相同的产品循环,但过滤掉它,以便它只显示用户已购买的产品。
老实说,我不知道这个去哪里,我相信还有其他人在过去做过这方面的研究,所以也许这会帮助一群人!
提前致谢!
答案 0 :(得分:9)
您可以采取至少两种不同的方法来解决此问题。
首先是从每个帖子中获取产品,然后从每个产品中获取产品ID,然后使用if语句过滤使用wc_customer_bought_product或woocommerce_customer_bought_product(如果您使用的是旧的WooCommerece)。
第二种方法是传递正确的参数来过滤WP_Query,使其仅包含用户购买的订单,然后仅按这些订单过滤产品。有关第二种方法的更多信息,请访问Get All User Orders and Products bought by user in WooCommerce based shop (archive.org)。
第一种方法的一个例子就像是
<!-- code started -->
<ul class="products">
<?php
$user_id = get_current_user_id();
$current_user= wp_get_current_user();
$customer_email = $current_user->email;
$args = array(
'post_type' => 'product',
'posts_per_page' => 12
);
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
while ( $loop->have_posts() ) : $loop->the_post(); $_product = get_product( $loop->post->ID );
if (wc_customer_bought_product($customer_email, $user_id,$_product->id)){
woocommerce_get_template_part( 'content', 'product' );
}
endwhile;
} else {
echo __( 'No products found' );
}
wp_reset_postdata();
?>
</ul><!--/.products-->
答案 1 :(得分:-2)
不确定这是否会对您有所帮助,但WooThemes开发了plugin来支持购买历史记录。