在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');

但这只能呼应Else语句。

我是不是做错了什么?

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

更新了。

对于产品类型,你可以用以下方法来实现 WC_Product 方法:

  • 要获得产品类型,你将使用 get_type() 办法
  • 核对 IF语句中的产品类型,您将使用 is_type() 办法

请看本答案的最后,如何获得。WC_Product 对象实例。

自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

相关的。获取订单项目和WC_Order_Item_Product在WooCommerce 3中。


补充 - 如何获得 WC_Product 对象 is_type() get_type() 方法)

有时你不能在全球范围内获得产品类型......因为它取决于 WC_Product 对象。

1) 从动态产品ID 变量(当你没有$product对象时。

$product = wc_get_product( $product_id );

$product = wc_get_product( get_the_id() );

2) 来自 $product 全局变量 在单个产品页面上 (以及循环内的产品档案页):

global $product;

// Check that WC_Product instance $product variable is defined and accessible
if ( ! is_a( $product, 'WC_Product' ) ) {
    $product = wc_get_product( get_the_id() );

3) 在购物车的项目。

// 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();
}
© www.soinside.com 2019 - 2024. All rights reserved.