Вообщем пока копался, всё стало работать.
Есть предположения что нужно обязательно выставить цену на товар, даже 0, и тогда он будет появляться в корзине.
На всякий случай приведу код ниже, вдруг когда нить кому нить пригодится:
function productAlreadyInCart($gift_id) {
global $woocommerce;
$items = $woocommerce->cart->get_cart();
foreach($items as $item => $values) {
$_product = $values['data']->get_id();
if ($_product === $gift_id) return true;
}
return false;
}
function addGiftToCart() {
$gift_id = 2299;
if ( WC()->cart->get_cart_contents_count() !== 0 ) {
if ( !productAlreadyInCart($gift_id) ) {
wc_print_notice( __( 'Мы дарим Вам подарок!', 'woocommerce' ), 'notice' );
WC()->cart->add_to_cart( $gift_id );
}
}
}
add_action( 'woocommerce_check_cart_items', 'addGiftToCart' );