WooCommerce订阅-获取特定订阅的产品

Cas*_*ton 2 php wordpress product woocommerce woocommerce-subscriptions

有没有办法从得到$product$subscription

感谢这篇文章,我知道$subscription我可以得到$order

$order = $subscription->order;
Run Code Online (Sandbox Code Playgroud)

这有可能吗?

$product = $subscription->product;
Run Code Online (Sandbox Code Playgroud)

要么:

$product = $order->product;
Run Code Online (Sandbox Code Playgroud)

小智 8

从 woocommerce 订阅完整代码中获取产品以及使用示例:

if ( sizeof( $subscription_items = $subscription->get_items() ) > 0 ) {
    foreach ( $subscription_items as $item_id => $item ) {
        $product = $item->get_product();

        //Examples of use
        $product->get_id();
        $product->get_sku();
        $product->get_image('post-thumbnail', ['class' => 'alignleft'], false); // main image

        $product_id = wcs_get_canonical_product_id( $item ); // get product id directly from item
    }
}
Run Code Online (Sandbox Code Playgroud)


Sha*_*ill 5

可以从订阅或匹配的订单中获取产品,因为订阅对象是WC_Order该类的扩展。

$subscription_products = $subscription->get_items();
$order_products = $subscription->order->get_items();
Run Code Online (Sandbox Code Playgroud)

在您提供订阅服务的大多数情况下,这两种服务都是等效的,或者$order_products至少应包含中找到的所有产品$subscription_products

一个明显的例外是您手动创建订阅时。没有订单将附加到订阅,因此$subscription->order可能不是有效的WC_Order对象。


小智 4

是的,如果您有“订阅 ID”,您可以获得如下对象:

$subscription = new WC_Subscription( $the_id );
Run Code Online (Sandbox Code Playgroud)

当您已有 $subscription 对象时:

$related_orders_ids_array = $subscription->get_related_orders();
Run Code Online (Sandbox Code Playgroud)

然后循环遍历相关订单数组。

foreach ( $related_orders_ids_array as $order_id ) {

    $order = new WC_Order( $order_id );
    $items = $order->get_items();
Run Code Online (Sandbox Code Playgroud)

然后,如果您循环浏览订单项目,则可以访问产品信息:

    foreach ( $items as $product ) {

        var_dump( $product );

    }

}
Run Code Online (Sandbox Code Playgroud)