为了账号安全,请及时绑定邮箱和手机立即绑定

访问 Woocommerce 上的自定义全局变量谢谢

访问 Woocommerce 上的自定义全局变量谢谢

PHP
一只斗牛犬 2023-07-21 16:09:48
我正在尝试将全局变量设置为标志。我想在thankyou.php 模板中使用它来在订购的商品没有库存时显示自定义消息。这不起作用。我在functions.php中的代码:<?phpglobal $woocommerce;global $flag_custom_order;$flag_custom_order=false;$items = $woocommerce->cart->get_cart();foreach($items as $item => $values) {     $_product =  wc_get_product( $values['data']->get_id());     $stock=$_product->get_stock_quantity();    if ($stock <= '0') :        $flag_custom_order=true;    endif;    } 在模板中thankyou.php我添加了这个:
查看完整描述

1 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

    由于购物车一旦放入其他商品就会被清空,因此$flag_custom_order变量的值将始终显示false在“收到订单(谢谢)”页面上。


functions.php相反,您可以在活动主题的文件中使用以下内容(这将在下订单时、保存数据之前将其保存为自定义订单元数据):


add_action( 'woocommerce_checkout_create_order', 'action_wc_checkout_create_order',  10, 2  );

function action_wc_checkout_create_order( $order, $data ) {

    $has_backordered_items = false;

    

    if( ! WC()->cart->is_empty() ) {

        foreach(WC()->cart->get_cart() as $cart_item ) { 

            if ( $cart_item['data']->get_stock_quantity() <= 0 ) {

                $has_backordered_items = true;

                break;

            }    

        }

    }

    

    if( $has_backordered_items ) {

        $order->update_meta_data( '_has_backordered_items', $has_backordered_items );

    }

}

然后在thankyou.php模板文件中,您将使用以下内容(当WC_Order对象存在时):


<?php 

    if ( $order->get_meta('_has_backordered_items') ) {

        echo '<p>' . __("This order has backordered items.") . '</p>';

    }

?>


查看完整回答
反对 回复 2023-07-21
  • 1 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信