El plugin de Woocommerce orders muestra siempre el selector de recogida o envío, solo nos interesa cuando son productos de reserva. Además permite añadir productos que no son de reserva, por lo que tenemos que eliminarlos.
Añadimos este código al function.php del tema hijo.
//Quitar elegir fecha recogida si no hay productos de reserva function reserva(){ //Recuperamos los productos del carrito, si hay uno con categoría Reserva rellenamos variable reservado $reservado = null; $prodreserva = null; $productosnormales = array(); $reservaCat = 135; foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) { $terms = get_the_terms ( $cart_item['product_id'], 'product_cat' ); foreach ( $terms as $term ) { $cat_id = $term->term_id; if($cat_id == $reservaCat){ $reservado = 1; $prodreserva = 1; break; }else{ $prodreserva = 0; } } //Guardamos en array todos los productos que no sean de categoría reserva if($prodreserva != 1){ $productosnormales[] = $cart_item['product_id']; } } //Eliminamos del carrito los productos que no sean de reserva, cuando si que existe al menos uno con reserva if($reservado == 1){ foreach ($productosnormales as $producto){ foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) { if ( $cart_item['product_id'] == $producto ) { WC()->cart->remove_cart_item( $cart_item_key ); } } echo '<p class="mensaje_borrar_producto">No se pueden combinar productos reservables con no reservables. Se ha eliminado el producto <strong>'.$product->get_name().'</strong> de tu carrito.</p>'; } } //Construimos la caja con clase, para poder ocultar con css function divAbrir(){ echo '<style>'; echo '.producto_reservado #wc-od{ display:none; }'; echo '</style>'; echo '<div class="producto_reservado">'; } function divCerrar(){ echo '</div>'; } function divAbrirNo(){ echo '<style>'; echo '.producto_no_reservado{ display:none; }'; echo '</style>'; echo '<div class="producto_no_reservado">'; } if($reservado != 1){ //Si no hay producto de reserva, ocultamos la caja de seleccionar fecha de reserva add_action('woocommerce_checkout_before_customer_details', 'divAbrir'); add_action('woocommerce_checkout_after_customer_details', 'divCerrar'); }else{ //Si hay un producto de reserva, ocultamos la caja por defecto de elegir hora para recoger add_action('woocommerce_before_order_notes', 'divAbrirNo'); add_action('woocommerce_after_order_notes', 'divCerrar'); } } add_action('woocommerce_before_checkout_form','reserva'); //Si no hay producto de reserva hacemos el campo no requerido function norequerido($fields){ $reservado = null; foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) { $reservaCat = 135; $terms = get_the_terms ( $cart_item['product_id'], 'product_cat' ); foreach ( $terms as $term ) { $cat_id = $term->term_id; if($cat_id == $reservaCat){ $reservado = 1; break; } } } if($reservado != 1){ unset($fields['delivery']['delivery_date']); unset($fields['delivery']['delivery_time_frame']); unset($fields['delivery_date_field']); } return $fields; } add_action( 'woocommerce_checkout_fields', 'norequerido');