在WooCommerce中获取和使用产品类型

问题描述 投票:1回答:1

[我正在从事一个项目,但我一直坚持将Woocommerce产品类型设置为'简单','可变','分组'或'外部'...

我想实现的目标:在“谢谢”页面上,显示“ 谢谢。已收到您的订单。”。如果产品是“简单的”,我想在此处显示特定文本,而产品是可变的,分组的或外部的,则要显示其他文本,例如:

if (product->get_type() == 'simple') {// (for simple product)
      //show a text
}else {// (for variable, grouped and external product) 
      //show another text
}

我已经可以使用此:

function custome_tank_you_text($order_id) {
    $order = new WC_Order( $order_id );
    $items = $order->get_items();

    foreach ( $items as $item ) {
        $product = wc_get_product( $item['product_id'] );

        $product->get_type();
    }

    if( $product == 'simple'){ ?>
        <p class="woocommerce-notice woocommerce-notice--success woocommerce-thankyou-order-received"><?php echo apply_filters( 'woocommerce_thankyou_order_received_text', __( 'Thank you for topping up your wallet. It has been updated!', 'woocommerce' ), $order ); ?></p>
    <?php
    } else {?>
    <p class="woocommerce-notice woocommerce-notice--success woocommerce-thankyou-order-received"><?php echo apply_filters( 'woocommerce_thankyou_order_received_text', __( 'Thank you. Your order has been received!', 'woocommerce' ), $order ); ?></p>
    <?php
    }
}
add_shortcode('thank-u-msg', 'custome_tank_you_text');

但是这只会回应其他的陈述。

我做错什么了吗?

php wordpress woocommerce product orders
1个回答
3
投票

更新:

对于产品类型,可以使用以下WC_Product methods

  • 要获取产品类型,您将使用WC_Product方法
  • 检查 IF语句中的产品类型,您将使用get_type()方法

请参见此答案的末尾如何获取is_type()对象实例。

现在,由于WooCommerce 3,您的代码有些过时,并且有一些错误……还要记住,一个订单可以包含很多项目,因此需要打破循环(保留第一个项目)。您可以通过以下方式直接使用专用过滤器挂钩WC_Product

woocommerce_thankyou_order_received_text

代码进入您的活动子主题(或活动主题)的function.php文件。经过测试并可以正常工作。

add_filter( 'woocommerce_thankyou_order_received_text', 'custom_thankyou_order_received_text', 20, 2 ); function custom_thankyou_order_received_text( $thankyou_text, $order ){ // Loop through order items foreach ( $order->get_items() as $item ) { // Get an instance of the WC_Product Object from the WC_Order_Item_Product $product = $item->get_product(); if( $product->is_type('simple') ){ $thankyou_text = __( 'Thank you for topping up your wallet. It has been updated!', 'woocommerce' ); } else { $thankyou_text = __( 'Thank you. Your order has been received!', 'woocommerce' ); } break; // We stop the loop and keep the first item } return $thankyou_text; }

相关:$order


添加-如何获取Get Order items and WC_Order_Item_Product in WooCommerce 3对象 (使用)>WC_Productis_type()方法]

有时您无法全局获取产品类型,因为它取决于is_type()对象。

1] 来自动态产品ID

变量(当您没有$ product对象时:
get_type()

get_type()

2)来自WC_Product全局变量

在单个产品页面上(以及在循环内的产品归档页面上):
$product = wc_get_product( $product_id );

3)在购物车中的物品:

$product = wc_get_product( get_the_id() );

3)订购商品:

$product
© www.soinside.com 2019 - 2024. All rights reserved.