Добавить бесплатный товар в корзину woocommerce, но только в определенные даты - PullRequest
0 голосов
/ 10 июля 2020

У меня есть магазин, и мы хотим, чтобы наши покупатели получали товар бесплатно. Я нашел код, который работает нормально. НО есть ли способ запускать код только в определенные даты? У нас впереди праздничная неделя, и акция должна быть доступна в понедельник и вторник и с четверга по воскресенье.

function aapc_add_product_to_cart() {
    global $woocommerce;
    
    $cart_total = 50;   

    if ( $woocommerce->cart->total >= $cart_total ) {
        if ( ! is_admin() ) {
            $free_product_id = 272877;  // Product Id of the free product which will get added to cart
            $found      = false;

            //check if product already in cart
            if ( sizeof( WC()->cart->get_cart() ) > 0 ) {
                foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
                    $_product = $values['data'];
                    if ( $_product->get_id() == $free_product_id )
                        $found = true;                  
                }
                // if product not found, add it
                if ( ! $found )
                    WC()->cart->add_to_cart( $free_product_id );
            } else {
                // if no products in cart, add it
                WC()->cart->add_to_cart( $free_product_id );
            }        
        }
    }        
}

add_action( 'template_redirect', 'aapc_add_product_to_cart' );


function remove_free_product_from_cart() {

// Run only in the Cart or Checkout Page
if( is_cart() || is_checkout() ) {

$prod_to_remove = 272877; // Product ID of Free Product

$no_any_product_check = false;

$cart = WC()->cart->get_cart();

if ( sizeof( $cart ) == 1 ) {

// Check in the cart if any other product is present or not

foreach ( WC()->cart->cart_contents as $prod_in_cart ) {
// Get the Variation or Product ID
$prod_id = ( isset( $prod_in_cart['variation_id'] ) && $prod_in_cart['variation_id'] != 0 ) ? $prod_in_cart['variation_id'] : $prod_in_cart['product_id'];

if ( $prod_to_remove == $prod_id ) {
$free_pro_cart_id = WC()->cart->generate_cart_id( $prod_id );
$no_any_product_check = true;
}
}
// If any product is not present then remove the free product.
if ( $no_any_product_check ) {
unset( WC()->cart->cart_contents[ $free_pro_cart_id ] );
}

}
}
}
add_action( 'template_redirect', 'remove_free_product_from_cart' );

1 Ответ

0 голосов
/ 11 июля 2020

Вы можете добавить следующее прямо в верхней части ваших двух функций:

if ( !in_array( date('N'), array( 1,2,4,5,6,7 ) ) ) return;

Это остановит выполнение ваших хуков, если текущий день недели (представленный численно от 1 до 7) отсутствует в указанном массиве.

Таким образом, вы можете установить, для каких дней недели вы хотите, чтобы ваш код запускался (1 = понедельник, 7 = воскресенье). В приведенном выше примере ваш код будет работать в понедельник и вторник и с четверга по воскресенье.

Вы также можете просто проверить среду в вашем случае:

if ( date('N') == 3 ) return;

Но я подумал, что вы, возможно, захотите использовать это позже и указать другие дни недели, в которые должен запускаться ваш код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...