You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress/Woo技术需求:仅展示用户指定分类的已购商品

解决方案

要让这个短代码只展示特定分类的已购商品,你可以通过添加分类参数过滤的方式实现,修改后的代码如下:

add_shortcode( 'my_purchased_products', 'bbloomer_products_bought_by_curr_user' );
   
function bbloomer_products_bought_by_curr_user( $atts ) {
    // 接收短代码参数,默认分类为空(兼容原有功能)
    $atts = shortcode_atts( array(
        'category' => '', // 可直接设置默认分类slug,比如'books'
    ), $atts );

    // 获取当前用户
    $current_user = wp_get_current_user();
    if ( 0 == $current_user->ID ) return;
   
    // 获取用户已支付的订单(已完成+处理中)
    $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() ),
    ) );
   
    // 遍历订单收集商品ID
    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 );

    // 如果指定了分类,过滤出该分类下的商品ID
    if ( ! empty( $atts['category'] ) ) {
        $filtered_ids = array();
        // 支持多个分类,用逗号分隔
        $categories = explode( ',', $atts['category'] );
        foreach ( $product_ids as $id ) {
            // 检查商品是否属于目标分类
            if ( has_term( $categories, 'product_cat', $id ) ) {
                $filtered_ids[] = $id;
            }
        }
        $product_ids = $filtered_ids;
    }

    // 如果过滤后没有商品,返回提示文本
    if ( empty( $product_ids ) ) {
        return '<p>暂无该分类的已购商品</p>';
    }

    $product_ids_str = implode( ",", $product_ids );
   
    // 传入商品ID到WooCommerce的products短代码
    return do_shortcode("[products ids='$product_ids_str']");
}

关键修改说明

  • 新增短代码参数:添加了category参数,调用时可指定分类slug(多个分类用逗号分隔)
  • 分类过滤逻辑:用has_term()函数检查每个已购商品是否属于目标分类,仅保留符合条件的商品ID
  • 兼容原有功能:不指定category参数时,代码会和原来一样显示所有已购商品
  • 空状态处理:过滤后无符合条件的商品时,返回提示文本避免页面空白

使用示例

  • 展示分类slug为books的已购商品:
    [my_purchased_products category="books"]
    
  • 同时展示books和electronics两个分类的已购商品:
    [my_purchased_products category="books,electronics"]
    

内容的提问来源于stack exchange,提问作者Zeon Timar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 20:30:46