In WooCommerce, a volte si ha l’esigenza di inserire nel catalogo prodotti che non sono acquistabili ma devono comunque essere visibili sul sito. Pensiamo, ad esempio, a prodotti esclusivi, su ordinazione, o disponibili solo a determinate condizioni. In questi casi, potrebbe essere utile mostrare i prodotti nel catalogo senza però permettere di aggiungerli al carrello.
Aggiungere nuovi campo nel backend di WooCommerce
Iniziamo con l’aggiungere due opzioni personalizzate nella scheda di configurazione avanzata di ogni prodotto, per poter scegliere se nascondere il pulsante “Aggiungi al carrello” e il prezzo.
// Aggiunge una checkbox per nascondere il pulsante "Aggiungi al carrello" nella scheda prodotto
function appihw_advanced_setting_hide_add_to_cart_button() {
woocommerce_wp_checkbox( array(
'id' => '_appihw_hide_add_to_cart_button',
'label' => __('Hide add to cart button', 'appiapp_hide_price_button'),
));
}
add_action( 'woocommerce_product_options_advanced', 'appihw_advanced_setting_hide_add_to_cart_button' );
// Aggiunge una checkbox per nascondere il prezzo nella scheda prodotto
function appihw_advanced_setting_hide_price() {
woocommerce_wp_checkbox( array(
'id' => '_appihw_hide_price',
'label' => __('Hide product price', 'appiapp_hide_price_button'),
));
}
add_action( 'woocommerce_product_options_advanced', 'appihw_advanced_setting_hide_price' );
Queste impostazioni vengono salvate come metadati del prodotto al momento dell’aggiornamento della scheda prodotto:
function appihw_save_settings( $post_id ) {
$hide_add_to_cart = isset( $_POST['_appihw_hide_add_to_cart_button'] ) ? 'yes' : 'no';
update_post_meta( $post_id, '_appihw_hide_add_to_cart_button', $hide_add_to_cart );
$hide_price = isset( $_POST['_appihw_hide_price'] ) ? 'yes' : 'no';
update_post_meta( $post_id, '_appihw_hide_price', $hide_price );
}
add_action( 'woocommerce_process_product_meta', 'appihw_save_settings' );
Nascondere il prezzo del prodotto
Con le impostazioni salvate, possiamo procedere a nascondere il prezzo del prodotto nella pagina del singolo prodotto e nel loop di WooCommerce:
function appihw_hide_price( $price, $product ) {
$product_id = $product->is_type( 'variation' ) ? $product->get_parent_id() : $product->get_id();
if( get_post_meta( $product_id, '_appihw_hide_price', true ) === 'yes' ) {
return ''; // Nasconde il prezzo
}
return $price;
}
add_filter( 'woocommerce_get_price_html', 'appihw_hide_price', 10, 2 );
Impedire l’aggiunta del prodotto nel carrello
Oltre a nascondere il pulsante “Aggiungi al carrello”, dobbiamo anche disabilitare l’azione di aggiunta al carrello per questi prodotti, con un messaggio per informare l’utente:
function appihw_disable_add_to_cart( $passed, $product_id, $quantity ) {
if( get_post_meta( $product_id, '_appihw_hide_add_to_cart_button', true ) === 'yes' ) {
$passed = false;
wc_add_notice( __( 'This product cannot be added to the cart.', 'woocommerce' ), 'error' );
}
return $passed;
}
add_filter( 'woocommerce_add_to_cart_validation', 'appihw_disable_add_to_cart', 10, 3 );
Nascondere il pulsante “Aggiungi al Carrello” nel loop e nella scheda prodotto
Ora possiamo intervenire sul pulsante “Aggiungi al carrello” sia nel loop dei prodotti che nella pagina del singolo prodotto:
// Rimuove il pulsante nel loop dei prodotti
function appihw_remove_add_to_cart_link( $link, $product ) {
if( get_post_meta( $product->get_id(), '_appihw_hide_add_to_cart_button', true ) === 'yes' ) {
return ''; // Nasconde il pulsante
}
return $link;
}
add_filter( 'woocommerce_loop_add_to_cart_link', 'appihw_remove_add_to_cart_link', 10, 2 );
// Rimuove il pulsante nella scheda del singolo prodotto se il tema supporta l'hook
function appihw_hide_add_to_car_button() {
global $product;
if( get_post_meta( $product->get_id(), '_appihw_hide_add_to_cart_button', true ) === 'yes' ) {
if ( has_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart' ) ) {
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
}
}
}
add_action( 'woocommerce_single_product_summary', 'appihw_hide_add_to_car_button', 1 );
Compatibilità con i temi
Alcuni temi Gutenberg non utilizzano woocommerce_template_single_add_to_cart
, quindi inseriamo il pulsante con un div
e lo nasconsiamo:
// Nasconde il pulsante "Aggiungi al carrello" in temi che non supportano l'hook standard
function appihw_wrap_div_before_add_to_cart_button() {
global $product;
if( get_post_meta( $product->get_id(), '_appihw_hide_add_to_cart_button', true ) === 'yes' ) {
echo '<div style="display:none;">';
}
}
add_action( 'woocommerce_before_add_to_cart_button', 'appihw_wrap_div_before_add_to_cart_button', 10 );
function appihw_wrap_div_after_add_to_cart_button() {
global $product;
if( get_post_meta( $product->get_id(), '_appihw_hide_add_to_cart_button', true ) === 'yes' ) {
echo '</div>';
}
}
add_action( 'woocommerce_after_add_to_cart_button', 'appihw_wrap_div_after_add_to_cart_button', 10 );
Lascia un commento