Se por algum motivo você quer restringir o carrinho a apenas um produto por vez, você pode usar este pequeno código abaixo:


<?php
/***
* limpar carrinho – apenas um produto por vez
*/
add_filter( 'woocommerce_add_to_cart_validation', 'only_one_in_cart' );
function only_one_in_cart( $cart_item_data ) {
WC()->cart->empty_cart();
return $cart_item_data;
}

view raw

functions.php

hosted with ❤ by GitHub

Basicamente ele vai limpar o carrinho antes de adicionar um novo item. Aí não há exibição de nenhuma mensagem, mas você pode facilmente adicionar um aviso ao cliente com a função wc_add_notice(), para que ele não pense que é um erro.

Além disso, no comportamento descrito acima o novo produto é que ficará no carrinho. Utilizando os mesmos filtros é possível personalizar para que o novo item que seja bloqueado. Vai da sua criatividade e necessidade.

Este é um exemplo básico que pode ser adaptado  a regras futuras.