Checkbox de Términos y condiciones condicional en WooCommerce

Snippet de código de WooCommerce que nos va a permitir añadir un checkbox o casilla de aceptación a la página de checkout o de confirmación del pedido, y hacerlo de forma condicional, en función de los productos que haya en el carrito.


por

Es posible que por el tipo de productos que vendas, necesites que los términos y condiciones de tu tienda online sean diferentes para un tipo u otro de categoría de productos o productos en concreto, también que tengas que mostrar un checkbox de aceptación de condiciones adicionales.

Hoy vamos a ver un snippet de código de WooCommerce que nos va a permitir añadir un checkbox o casilla de aceptación a la página de checkout o de confirmación del pedido, y hacerlo de forma condicional, en función del producto o categoría.

1. Condicional por producto

En este ejemplo tenemos dos páginas de términos y condiciones, en este caso en concreto la página con ID 57, que es la página estándar de condiciones, y una segunda, la de ID 61, que son condiciones específicas para el producto con ID 13.

Lo que hace esta función es crear un checkbox adicional en la página de pedido y comprobar si el producto 13 está en el carrito, y si es así muestra la otra página de condiciones.

add_action( 'woocommerce_review_order_before_submit', 'checkout_checkbox_conditional' );

function checkout_checkbox_conditional() {
    	$page_id 	= 	57; // Página por defecto para términos y condiciones
    	$notice 	= 	__( 'He leído y estoy de acuerdo con [additional-terms]', 'themedomain' );
	$product_id = 13; // ID de producto de ejemplo para el que mostramos otras condiciones
	$in_cart = false;
	foreach( WC()->cart->get_cart() as $cart_item ) {
	   $product_in_cart = $cart_item['product_id'];
	   if ( $product_in_cart === $product_id ) $in_cart = true;
	}
 
   	 if ( $in_cart ) {
$page_id = 61; //Página de terminos y condiciones para el producto específico
    	if ( ! isset( $page_id ) || empty( $page_id ) ) {
    		return NULL;
    	} 
    	if ( FALSE !== strpos( $notice, '[additional-terms]' ) ) {
    		$notice =	str_replace( '[additional-terms]', '<a href="' . esc_url( get_permalink( $page_id ) ) . '" target="_blank"> ' . esc_html( get_the_title( $page_id ) ) . '</a>', $notice );
		} // End If Statement
    	woocommerce_form_field( 'woo_additional_terms', array(
		    'type'          => 		'checkbox',
		    'class'         => 		array( 'form-row woo-additional-terms' ),
		    'label_class'   => 		array( 'woocommerce-form__label woocommerce-form__label-for-checkbox checkbox' ),
		    'input_class'   => 		array( 'woocommerce-form__input woocommerce-form__input-checkbox input-checkbox' ),
		    'required'      => 		TRUE,
		    'label'         => 		wp_kses_post( $notice )
		) );
}
}

2. Condicional por categoría

En este segundo ejemplo comprobamos si alguno de los productos del carrito pertenece a una categoría en concreto, y si es así, mostramos la otra página de términos y condiciones.

add_action( 'woocommerce_review_order_before_submit', 'checkout_checkbox_conditional' );

function checkout_checkbox_conditional() {
    	$page_id 	= 	57; // Página por defecto para términos y condiciones
    	$notice 	= 	__( 'He leído y estoy de acuerdo con [additional-terms]', 'woo-additional-terms' );

	$in_cart = false;
	foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
	$product = $cart_item['data'];
    
		//Comprobamos si alguno de los productos de la cesta es de la categoría 'suscripciones'
    		if ( has_term( 'suscripciones', 'product_cat', $product->id ) ) { 
        	$in_cart = true; 
        	break;
    		}
	}
 
   	 if ( $in_cart ) {
         
         $page_id = 61; //Página de terminos y condiciones para la categoría específica
    	if ( ! isset( $page_id ) || empty( $page_id ) ) {
    		return NULL;
    	} 
    	if ( FALSE !== strpos( $notice, '[additional-terms]' ) ) {
    		$notice =	str_replace( '[additional-terms]', '<a href="' . esc_url( get_permalink( $page_id ) ) . '" target="_blank"> ' . esc_html( get_the_title( $page_id ) ) . '</a>', $notice );
		} // End If Statement
    	woocommerce_form_field( 'woo_additional_terms', array(
		    'type'          => 		'checkbox',
		    'class'         => 		array( 'form-row woo-additional-terms' ),
		    'label_class'   => 		array( 'woocommerce-form__label woocommerce-form__label-for-checkbox checkbox' ),
		    'input_class'   => 		array( 'woocommerce-form__input woocommerce-form__input-checkbox input-checkbox' ),
		    'required'      => 		TRUE,
		    'label'         => 		wp_kses_post( $notice )
		) );
    }
}

¿Eres implementador o desarrollador WordPress?

En la Zona DPW encontrarás más recursos, tutoriales, plantillas, y una biblioteca de snippets para poder utilizar en tu día a día y ganar tiempo en tu trabajo:

ACCEDER AHORA

Comentarios

2 respuestas a «Checkbox de Términos y condiciones condicional en WooCommerce»

  1. Avatar de Jose

    |

    Hola, me sucede una cosa y no se como modificarlo, el checkbox de mi pagina de checkout tiene fondo blanco y el pipe o icono de check, también es blanco, como puedo modificar el color de uno de ellos?

    1. Avatar de esther

      |

      Hola Jose,
      El checkbox nativo del navegador suele ser blanco pero con border negro o gris, según el navegador. Si no se ve bien puedes mirar de modificar el color de fondo con CSS o ver que estilos se están aplicando al input y ajustarlos, también con CSS.

      Saludos!