Доступ к настраиваемой глобальной переменной на Woocommerce, спасибо - PullRequest
2 голосов
/ 09 июля 2020

Я пытаюсь установить глобальную переменную как флаг. Я хочу использовать это в шаблоне thankyou. php, чтобы отображать настраиваемое сообщение, когда заказанных товаров нет в наличии. Это не работает.

Мой код в функциях. php:

<?php
global $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;    
    } 

В шаблоне спасибо. php Я добавляю это:

 <?php 
global $flag_custom_order;
 if ($flag_custom_order) {
 echo"Some text.";
}
?>

Спасибо

1 Ответ

1 голос
/ 09 июля 2020

Поскольку корзина опустошается после размещения другой, значение переменной $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>';
    }
?>
...