Hola.
Prueba este código:
function limit_cart_items_from_category ( $passed, $product_id )
{
// Accept when cart is empty
if( WC()->cart->is_empty() ) return $passed;
// HERE your product categories in this array (can be names, slugs or Ids)
$categories = array('Music');
$found = $current = false;
// Check the current product
if( has_term( $categories, 'product_cat', $product_id ) ){
$current = true;
global $woocommerce;
$woocommerce->cart->empty_cart();
}
return $passed;
}
add_filter( 'woocommerce_add_to_cart_validation', 'limit_cart_items_from_category',10,3 );
Tiene asignada la categoría ‘Funerario’ en el momento en que añades un producto de esa categoría se vacía el carrito y deja sólo este último. En los productos de las otras categorías no hace nada.
También tienes este otro código (copiado directamente de stackoverflow.com) que te añade una casilla a cada producto para que cuando lo selecciones te envíe directamente al checkout, si lo usas junto con el otro puedes hacer que en cuanto un cliente añada un producto de la categoría Funerario al carrito se borren los demás y lo envíe a la finalización del pedido:
/**
* Plugin Name: WC Redirect to checkout
* Plugin URI: http://stackoverflow.com/q/32962653/383847
* Description: Redirect to checkout for certain products
* Version: 1.0
* Author: Kathy Darling
* Author URI: http://kathyisawesome.com
* Requires at least: 3.8
* Tested up to: 3.9
* WC requires at least: 3.1.0
* WC tested up to: 4.0.1
*
* Text Domain: kia-redirect-to-checkout
* Domain Path: /languages/
*
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
/**
* Add text inputs to product metabox
*/
function kia_add_to_wc_metabox(){
global $post;
echo '<div class="options_group">';
// Suggested Price
echo woocommerce_wp_checkbox( array(
'id' => '_redirect_to_checkout',
'label' => __( 'Redirect to checkout', 'kia-redirect-to-checkout' ) ,
'description' => __( 'When this item is added to the cart, re-direct the customer to checkout immediately.', 'kia-redirect-to-checkout' )
)
);
echo '</div>';
}
add_action( 'woocommerce_product_options_general_product_data', 'kia_add_to_wc_metabox' );
/**
* Save extra meta info
*
* @param WC_Product $product
*/
function kia_process_wc_meta_box( $product ) {
if ( isset( $_POST['_redirect_to_checkout'] ) ) {
$product->update_meta_data( '_redirect_to_checkout', 'yes' );
} else {
$product->update_meta_data( '_redirect_to_checkout', 'no' );
}
}
add_action( 'woocommerce_admin_process_product_object', 'kia_process_wc_meta_box' );
/**
* Redirect to checkout
*
* @param WC_Product $product
*/
function kia_add_to_cart_redirect( $url, $product ) {
// If product is one of our special products.
if ( kia_maybe_redirect_cart( $product ) ) {
// Remove default cart message.
wc_clear_notices();
// Redirect to checkout.
$url = wc_get_checkout_url();
}
return $url;
}
add_filter( 'woocommerce_add_to_cart_redirect', 'kia_add_to_cart_redirect', 10, 2 );
/**
* Check if an item has custom field.
*
* @param WC_Product $product
*/
function kia_maybe_redirect_cart( $product ) {
return wc_string_to_bool( $product instanceof WC_Product && $product->get_meta( '_redirect_to_checkout', true ) );
}
Puedes insertar el código junto con el anterior en el archivo functions.php de tu tema hijo o en un plugin de personalizaciones como Code Snippets. Si no es exactamente lo que querías por lo menos te puede servir de base.
Quedamos a la espera de tus comentarios y, por favor, recuerda cerrar el debate marcándolo como resuelto cuando así lo consideres, de esta forma nos ayudas a mantener el foro al día.