Как добавить продукт в корзину при посещении страницы Specifi c в WooCommerce? - PullRequest
1 голос
/ 18 февраля 2020

Приведенный ниже код отлично работает, когда в вашем магазине только один товар. Но как мне применить это к каждому продукту в моем магазине и к вновь созданным продуктам без необходимости go кодировать каждый раз, когда создается новый продукт (назначить переменную $ product_id с идентификатором вновь созданного продукта) .

Предположим, у меня в магазине есть продукты A, B, C. Когда я захожу на страницу продукта A, продукт A необходимо автоматически добавить в корзину, а когда я захожу на страницу продукта B корзина должна быть опорожнена / сброшена / необходимо удалить A, и только продукт B должен быть добавлен в корзину и так далее. Я использую Woocommerce на одной странице оформления заказа, поэтому все это происходит на странице одного продукта.

/*
 * Add item to cart on visit
 */
function add_product_to_cart() {
    if ( ! is_admin() ) {
        global $woocommerce;
        $product_id = 64;
        $found = false;
        //check if product already in cart
        if ( sizeof( $woocommerce->cart->get_cart() ) > 0 ) {
            foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
                $_product = $values['data'];
                if ( $_product->id == $product_id )
                    $found = true;
            }
            // if product not found, add it
            if ( ! $found )
                $woocommerce->cart->add_to_cart( $product_id );
        } else {
            // if no products in cart, add it
            $woocommerce->cart->add_to_cart( $product_id );
        }
    }
}
add_action( 'init', 'add_product_to_cart' );

Например, ссылка

1 Ответ

0 голосов
/ 18 февраля 2020

Полагаю, вы имели в виду это? добавленный комментарий в коде объясняет каждый шаг.

ПРИМЕЧАНИЕ: этот код не будет работать, если вы проверите его как admin, is_admin в условии if

n

/*
 * Add item to cart on visit
 */
function add_product_to_cart() {
    // not admin & is_product - Returns true on a single product page
    if ( !is_admin() && is_product() ) {
        global $woocommerce;

        $product_id = get_the_ID();

        $found = false;

        // check if cart contains products
        if ( sizeof( $woocommerce->cart->get_cart() ) > 0 ) {

            // total items in the cart
            $count = $woocommerce->cart->cart_contents_count;

            // check if product already in cart
            foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
                $_product = $values['data'];
                if ( $_product->id == $product_id ) {
                    $found = true;
                }
            }

            // if product not found, add it, because the cart was not empty, we will empty it first
            if ( ! $found ) {
                // Empties the cart
                $woocommerce->cart->empty_cart();

                // Add product to cart
                $woocommerce->cart->add_to_cart( $product_id );
            } elseif ( $found && $count > 1 ) { // product is found, but cart also contains other products
                // Empties the cart
                $woocommerce->cart->empty_cart();

                // Add product to cart
                $woocommerce->cart->add_to_cart( $product_id );             
            }
        } else {
            // if no products in cart, add it
            $woocommerce->cart->add_to_cart( $product_id );
        }
    }
}
add_action( 'wp', 'add_product_to_cart' );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...