0
votes

In the account area of my woocommerce shopping site you can click 'orders' and see your order i.e. completed, cancelled, on hold etc etc.

However when you click 'collection' (a page I have made within the account area) I want it to display only 'completed' items.

I have tried to put the following code into the functions.php but with no luck:

(ref - https://businessbloomer.com/woocommerce-display-products-purchased-user/)

add_shortcode( 'my_products', 'bbloomer_user_products_bought' );

function bbloomer_user_products_bought() {
global $product, $woocommerce, $woocommerce_loop;
$columns = 3;
$current_user = wp_get_current_user();
$args = array(
    'post_type'             => 'product',
    'post_status'           => 'publish',
    'meta_query'            => array(
        array(
            'key'           => '_visibility',
            'value'         => array('catalog', 'visible'),
            'compare'       => 'IN'
        )
    )
);
$loop = new WP_Query($args);

ob_start();

woocommerce_product_loop_start();

Loop part

while ( $loop->have_posts() ) : $loop->the_post();
$theid = get_the_ID();
if ( wc_customer_bought_product( $current_user->user_email, $current_user->ID, $theid ) ) {
wc_get_template_part( 'content', 'product' ); 
} 
endwhile; 

woocommerce_product_loop_end();

woocommerce_reset_loop();
wp_reset_postdata();

return '<div class="woocommerce columns-' . $columns . '">' . ob_get_clean() . '</div>';
}

and then adding the shortcode:

[my_products]

when you click the collection link it does not display anything - well generates a div with nothing in it!

Is there a better way of doing this or a alternative?

1

1 Answers

0
votes

Replace your $args with bellow code

$args = array(
    'post_type'             => 'shop_order',
    'post_status'           => 'wc-completed'
);

Then let me know the result. Thanks