Удалить один конкретный элемент корзины при добавлении другого в WooCommerce - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь реализовать функцию, позволяющую обновлять товар в корзине с помощью пользовательских атрибутов (отображается в полях ввода в представлении продукта).

Моя стратегия заключается в удалении существующего товара путем добавления ссылки. на странице корзины вот так:

/ product / my-product /? edit_item = 7326b7ed789bc9ae1ddfe97fd0abcf72 (ключ)

Затем я хочу удалить этот продукт, как только пользователь нажмет на кнопку «добавить»в корзину ".

Я пробовал это решение здесь (первый ответ):

Удалить определенный элемент корзины при добавлении в корзину определенного продукта в Woocommerce

и этот (также первый ответ):

Wordpress. WooCommerce. Хук действия ДО добавления в корзину

и у меня есть этот код сейчас:

function so_validate_add_cart_item( $passed, $product_id, $quantity, $variation_id = '', $variations= '' ) {
GLOBAL $woocommerce;
$keytoremove=$_GET['edit_item'];

    // do your validation, if not met switch $passed to false
    if ( 1 != 2 ){
        $passed = true;
        // $woocommerce->cart->remove_cart_item($keytoremove);      
        wc_add_notice( __( $keytoremove. ' was removed', 'textdomain' ), 'notice' );
    }
    return $passed;

}
add_filter( 'woocommerce_add_to_cart_validation', 'so_validate_add_cart_item', 10, 5 );

Проблема в том, что я не могу получить доступ к переменной ... $ _GET ['edit_item']пустой. Поэтому я получаю уведомление «был удален». Добавление скрытого поля формы также не помогло.

Как я могу получить доступ к этой переменной? Спасибо!

1 Ответ

0 голосов
/ 19 октября 2019

Теперь я сохранил ключ продукта для удаления в сеансе и удалил его после удаления. Выглядит это так:

Я определил переменную сеанса:

$_SESSION['keytoremove'] = $_GET['edit_item'];

и позже моя функция выполняет следующее:

function so_validate_add_cart_item( $passed, $product_id, $quantity, $variation_id = '', $variations= '' ) {

GLOBAL $woocommerce;

if ( isset ($_SESSION['keytoremove']) ) {
    $keytoremove=$_SESSION['keytoremove'];
    $passed = true;
    $woocommerce->cart->remove_cart_item($keytoremove);
    wc_add_notice( __( $keytoremove. ' was removed from the cart', 'textdomain' ), 'notice' );
    unset ($_SESSION["keytoremove"]);
    }
return $passed;
}

add_filter( 'woocommerce_add_to_cart_validation', 'so_validate_add_cart_item', 10, 5 );

Протестировано и работает. Может быть, есть лучшее решение, исключающее использование $ _SESSION-Vars?

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