Woocommerce Если товар в этой категории принадлежит, удалите его - PullRequest
1 голос
/ 14 апреля 2020

У меня есть страница, на которой пользователь заполняет форму и создает собственный продукт woocommerce

У пользователя может быть только один этот тип продукта, поэтому я сделал его так, чтобы продукт был помещен в категорию "цитаты"

Однако, чтобы убедиться, что они еще не попали в корзину, у меня есть скрипт, который очищает корзину перед добавлением продукта

//check if product already in cart

WC()->cart->empty_cart(true);
WC()->session->set('cart', array());
if ( WC()->cart->get_cart_contents_count() == 0 ) {

// if no products in cart, add it
WC()->cart->add_to_cart( $product_id );

}
    wp_redirect( home_url('/checkout/') ); exit;  

Но так как есть "аддон" Я тоже не хочу, чтобы какой-либо из этих товаров был удален из корзины, только товары, отнесенные к категории "цитата"

Я видел много способов удалить указанный c товар из корзины, но я не то, где вы можете удалить товары, принадлежащие к категории.

Я придумал ниже, используя Исключить определенные категории при автоматическом добавлении товаров в корзину WooCommerce

foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
        // Get product id
        $prod_id = $cart_item['data']->get_id();

$category = quotes;

if( has_term( $category, 'product_cat', $prod_id ) ) {

 WC()->cart->remove_cart_item($prod_id);

}
}

    wp_redirect( home_url('/checkout/') ); exit;

и

    global $woocommerce;
    $items = $woocommerce->cart->get_cart();

        foreach($items as $item => $values) { 
            $prod_id =  wc_get_product( $values['data']->get_id()); 
$category = quotes;

if( has_term( $category, 'product_cat', $prod_id ) ) {

 WC()->cart->remove_cart_item($prod_id);

}
}

Но это тоже не работает.

Может кто-нибудь помочь, пожалуйста

РЕДАКТИРОВАТЬ:

Продукт создан через HT ML / JQUERY форма

Вот PHP внизу формы

// Add the shortcode to WordPress. 
add_shortcode('vehicle-quote', 'vehicle_quote');

function vehicle_quote_add_post(){
    if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == 'post' ){
        if ( !is_user_logged_in() )
            return;
        global $current_user;

        $user_id        = $current_user->ID;
        $post_title     = $_POST['post-title'];
        $post_content   = $_POST['posttext'];
        $tags           = $_POST['tags'];

        $length = filter_var($_POST['outlengthquestion'], FILTER_SANITIZE_STRING);
        $timefor = filter_var($_POST['outtimefor'], FILTER_SANITIZE_STRING);
        $essential = filter_var($_POST['outessential'], FILTER_SANITIZE_STRING);
        $contents = filter_var($_POST['outcontents'], FILTER_SANITIZE_STRING);
        $sterio = filter_var($_POST['outsterio'], FILTER_SANITIZE_STRING);


    global $error_array;
        $error_array = array();

        if (empty($post_title)) $error_array[]='Please add a title.';


        if (count($error_array) == 0){

            $post_id = wp_insert_post( array(
                'post_author'   => $user_id,
                'post_title'    => $post_title,
                'post_type'     => 'product',
                'meta_input' => array(
                'timefor_period' => $timefor,
                'length_level' => $length,          
                'essential' => $essential,
                'contents' => $contents,
                'sterioprotect' => $sterio,

            ),
        'post_status'   => 'publish'
        ) 
        );          



// select ID
$numberAsString = number_format($price, 2);
$product_id = $post_id;
      wp_set_object_terms( $post_id, 'Quotes', 'product_cat' );
      update_post_meta($post_id, '_regular_price', $numberAsString );
      add_post_meta($post_id, '_price', $numberAsString );
      add_post_meta($post_id, '_stock_status', 'instock' );
      add_post_meta($post_id, '_manage_stock', 'yes');
      add_post_meta ($post_id, '_stock', 1);





add_action( 'woocommerce_before_calculate_totals', 'remove_from_cart', 10, 1 );
//check if product already in cart


WC()->cart->add_to_cart( $product_id );

/*}  */
    wp_redirect( home_url('/checkout/') ); exit;  


        } else {

        }
    }
}

add_action('init','vehicle_quote_add_post');

Ответы [ 2 ]

1 голос
/ 14 апреля 2020
function remove_from_cart( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

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

    /********** SETTINGS **********/
    $remove_categories = array( 'quotes' ); // Remove these categories

    /********** LOOP THROUGH CART ITEMS **********/

    foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
        // Get product id
        $product_id = $cart_item['product_id'];

        // Check if product belongs to a certain category
        if( has_term( $remove_categories, 'product_cat', $product_id ) ) {
            $cart->remove_cart_item( $cart_item_key );
        }
    }
}
add_action( 'woocommerce_before_calculate_totals', 'remove_from_cart', 10, 1 );
1 голос
/ 14 апреля 2020

Для удаления предмета из корзины вы должны использовать $cart_item_key вместо $prod_id

foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {

     WC()->cart->remove_cart_item( $cart_item_key );

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