Ние създаваме уебсайтове за теб и твоят бизнес. За информация и запитвания: +359 876 700 417

Как да покажем всички продукти, поръчани от даден потребител в неговия профил в WooCommerce

15.05.2019

Как да покажем всички продукти, поръчани от даден потребител в неговия профил в WooCommerce

Искаш ли, когато даден потребител е влязъл в своя профил, той да може да вижда списък на всички закупени от него продукти, например в раздел „Моят профил“?

Тогава си попаднал на правилното място, защото тук, ще ти покажем, как може да направиш точно това. Наслади се!

ВАЖНО: винаги използвай child тема в WordPress!

За да постигнеш това, което описахме по-горе, и което видиждаш на изображението, всичко, което трябва да направиш е да копираш кода по-долу във functions.php на своята тема или child тема.

/**
 * @snippet       Display All Products Purchased by User via Shortcode - WooCommerce
 * @author        Smarty Studio
 * @autor_url     https://smartystudio.net
 * @compatible    Woo 3.5.7
 */
  
add_shortcode( 'my_products', 'ss_user_products_bought' );
  
function ss_user_products_bought() {
  
    global $product, $woocommerce, $woocommerce_loop;
    $columns = 3;
  
    // GET USER
    $current_user = wp_get_current_user();
  
    // GET USER ORDERS (COMPLETED + PROCESSING)
    $customer_orders = get_posts( array(
        'numberposts' => -1,
        'meta_key'    => '_customer_user',
        'meta_value'  => $current_user->ID,
        'post_type'   => wc_get_order_types(),
        'post_status' => array_keys( wc_get_is_paid_statuses() ),
    ) );
  
    // LOOP THROUGH ORDERS AND GET PRODUCT IDS
    if ( ! $customer_orders ) return;
    $product_ids = array();
    foreach ( $customer_orders as $customer_order ) {
        $order = wc_get_order( $customer_order->ID );
        $items = $order->get_items();
        foreach ( $items as $item ) {
            $product_id = $item->get_product_id();
            $product_ids[] = $product_id;
        }
    }
    $product_ids = array_unique( $product_ids );
  
    // QUERY PRODUCTS
    $args = array(
       'post_type' => 'product',
       'post__in' => $product_ids,
    );
    $loop = new WP_Query( $args );
  
    // GENERATE WC LOOP
    ob_start();
    woocommerce_product_loop_start();
    while ( $loop->have_posts() ) : $loop->the_post();
    wc_get_template_part( 'content', 'product' ); 
    endwhile; 
    woocommerce_product_loop_end();
    woocommerce_reset_loop();
    wp_reset_postdata();
  
    // RETURN CONTENT
    return '<div class="woocommerce columns-' . $columns . '">' . ob_get_clean() . '</div>';
  
}

Но какво прави този код? Много е просто. Взимаме всички поръчки на даден потребител, преминаваме през тях, като след това взимаме продуктите, вътре в тези поръчки и ги показваме.

За още по-голямо твое улеснение, направихме и shortcode, който да добавиш в страницата, която показва профила на потребителя. Не забравяй, че този shortcode ще работи само когато потребителят е влязъл в своя профил, така че например страницата „Моят профил“ би била идеална за целта.

[my_products]

Това е! Вече потребителите на твоят WooCommerce онлайн магазин, ще могат да виждат поръчаните от тях продукти в своя профил. Наслади се!

WordPress , ,