programing

WooCommerce에서 카트에 추가하기 전에 카트를 비웁니다.

stoneblock 2023. 3. 10. 21:02

WooCommerce에서 카트에 추가하기 전에 카트를 비웁니다.

저는 WP Job manager를 Woo Subscriptions와 함께 사용하고 있습니다.

지금:

  1. 처음에 패키지(Woo Subscription)를 선택했습니다.
  2. 그리고 모든 세부사항을 추가했다.
  3. 하지만 제출하지 않았다.
  4. 사이트에 돌아왔기 때문에 다시 구입하려면 패키지를 선택해야 합니다.그래서 패키지를 선택하고 세부사항을 기입한 후 결제 패키지로 이동했습니다.
  5. 현재 카트에는 패키지가 모두 있습니다(처음 구매하지 않고 선택한 패키지와 최근 선택한 패키지).
  6. 가장 최근에 선택한 것이 카트에 있고 가장 먼저 선택한 것이 가장 최근에 선택한 것이 바로 삭제되도록 이 문제를 수정하려면 어떻게 해야 합니까?

Woocommerce 모든 제품을 카트에서 삭제하고 현재 제품을 카트에 추가하려고 시도했지만 도움이 되지 않았습니다.

업데이트됨 (2가지 다른 방법으로):

다음 작업을 수행해야 합니다.

add_filter( 'woocommerce_add_to_cart_validation', 'remove_cart_item_before_add_to_cart', 20, 3 );
function remove_cart_item_before_add_to_cart( $passed, $product_id, $quantity ) {
    if( ! WC()->cart->is_empty() )
        WC()->cart->empty_cart();
    return $passed;
}

코드는 기능합니다.php 파일(또는 테마의 액티브한 아이 테마).AJAX 애드 투 카트 및 일반 애드 투 카트 모두 테스트 및 작동 가능...


또는 마지막으로 추가한 항목을 카트에 보관하는 다음과 같은 다른 항목을 사용할 수 있습니다.

// Keep only last cart item
add_action( 'woocommerce_before_calculate_totals', 'keep_only_last_cart_item', 30, 1 );
function keep_only_last_cart_item( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    $cart_items = $cart->get_cart();

    if( count( $cart_items ) > 1 ){
        $cart_item_keys = array_keys( $cart_items );
        $cart->remove_cart_item( reset($cart_item_keys) );
    }
}

코드가 기능합니다.php 파일(또는 테마의 액티브한 아이 테마).테스트 완료 및 동작

사이트 데이터베이스로 이동하여 테이블 'wp_woocommerce_sessions'를 찾아 'session_id' 열에 0 값이 포함되어 있는지 확인합니다.

  1. 이 0개의 엔트리 레코드를 모두 삭제합니다.
  2. 'session_id' 열을 프라이머리로 만듭니다.
  3. make 'session_id' 컬럼이 자동으로 증가합니다.

언급URL : https://stackoverflow.com/questions/49382193/empty-cart-before-add-to-cart-in-woocommerce