在收到的Woocommerce订单的if语句中使用产品类型(谢谢)

时间:2018-09-10 09:30:43

标签: php wordpress woocommerce product orders

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

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

awk

我已经可以使用它了

state

但这只会回显Else语句。

我在做错什么吗?

1 个答案:

答案 0 :(得分:2)

已更新:

由于Woocommerce 3,您的代码有些过时且有一些错误……还要记住,一个订单可以包含很多物品,因此需要打破循环(保留第一个物品)。

您可以通过以下方式直接使用专用过滤器挂钩woocommerce_thankyou_order_received_text

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;
}

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

  

$order

相关:Get Order items and WC_Order_Item_Product in Woocommerce 3


添加-如何获取WC_Product对象 (使用 is_type() 方法)

  

您无法全局获取产品类型,因为它取决于WC_Product对象

     

1)来自动态产品ID 变量(当您没有$ product对象时:

$product = wc_get_product( $product_id );
     

$product = wc_get_product( get_the_id() );
     

2)在购物车商品中:

// Loop throught cart items
foreach( WC()->cart->get_cart() as $cart_item ){
    $product = $cart_item['data'];
}
     

3)订购商品:

// Loop through order items
foreach ( $order->get_items() as $item ) {
    $product = $item->get_product();
}