WordPress/Woo-仅显示用户从已定义类别购买的订单

f4t66c6m  于 2022-10-24  发布在  WordPress
关注(0)|答案(1)|浏览(124)

我正在显示用户购买的产品与以下短码,但我需要它只显示某个定义的类别的产品,而不是每种产品,帮助将非常感谢,谢谢。

add_shortcode( 'my_purchased_products', 'bbloomer_products_bought_by_curr_user' );

function bbloomer_products_bought_by_curr_user() {

    // GET CURR USER
    $current_user = wp_get_current_user();
    if ( 0 == $current_user->ID ) return;

    // 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 );
    $product_ids_str = implode( ",", $product_ids );

    // PASS PRODUCT IDS TO PRODUCTS SHORTCODE
    return do_shortcode("[products ids='$product_ids_str']");

}
dba5bblo

dba5bblo1#

$items Foreach循环的一个简单条件就可以做到这一点。更改这一点:

foreach ( $items as $item ) {
    $product_id = $item->get_product_id();
    $product_ids[] = $product_id;
}

对此:

foreach ( $items as $item ) {
    $product_id = $item->get_product_id();
    if( has_term( array( 'one-category', 'another-category' ), 'product_cat', $product_id ) ) {
        $product_ids[] = $product_id;
    }
}

该代码仅显示属于one-categoryanother-category产品类别的产品。您可以定义一个产品类别插件,也可以根据需要定义任意多个。

相关问题