'ids' ] ); if ( is_wp_error( $brand_ids ) ) return false; return in_array( (int) MPB_CONTACT_BRAND_ID, array_map( 'intval', (array) $brand_ids ), true ); } add_filter( 'woocommerce_add_to_cart_validation', 'mpb_block_add_to_cart_for_brand', 10, 3 ); function mpb_block_add_to_cart_for_brand( $passed, $product_id, $quantity ) { if ( mpb_product_is_contact_brand( $product_id ) ) { wc_add_notice( __( 'Ce produit n\'est pas disponible à la vente en ligne. Merci de contacter la boutique au ' . MPB_CONTACT_PHONE, 'mpb' ), 'error' ); return false; } return $passed; } add_filter( 'woocommerce_is_purchasable', 'mpb_brand_not_purchasable', 10, 2 ); function mpb_brand_not_purchasable( $purchasable, $product ) { if ( ! $product ) return $purchasable; if ( mpb_product_is_contact_brand( $product->get_id() ) ) { return false; } return $purchasable; } add_filter( 'woocommerce_product_single_add_to_cart_text', 'mpb_custom_add_to_cart_text', 10, 2 ); add_filter( 'woocommerce_product_add_to_cart_text', 'mpb_custom_add_to_cart_text', 10, 2 ); add_filter( 'woocommerce_loop_add_to_cart_text', 'mpb_custom_add_to_cart_text', 10, 2 ); function mpb_custom_add_to_cart_text( $text, $product = null ) { if ( ! $product ) { global $product; } if ( ! $product || ! is_object( $product ) ) return $text; if ( mpb_product_is_contact_brand( $product->get_id() ) ) { return 'Contacter la boutique'; } return $text; } add_action( 'woocommerce_before_single_product_summary', 'mpb_maybe_replace_single_add_to_cart', 1 ); function mpb_maybe_replace_single_add_to_cart() { global $product; if ( ! $product ) return; if ( ! mpb_product_is_contact_brand( $product->get_id() ) ) return; remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 ); remove_action( 'woocommerce_simple_add_to_cart', 'woocommerce_simple_add_to_cart', 30 ); remove_action( 'woocommerce_variable_add_to_cart', 'woocommerce_variable_add_to_cart', 30 ); remove_action( 'woocommerce_grouped_add_to_cart', 'woocommerce_grouped_add_to_cart', 30 ); remove_action( 'woocommerce_external_add_to_cart', 'woocommerce_external_add_to_cart', 30 ); add_action( 'woocommerce_single_product_summary', 'mpb_render_contact_button', 30 ); } function mpb_render_contact_button() { printf( '%2$s', esc_attr( MPB_CONTACT_PHONE ), esc_html__( 'Contacter la boutique', 'mpb' ) ); } add_action( 'wp_enqueue_scripts', 'mpb_enqueue_contact_brand_script', 20 ); function mpb_enqueue_contact_brand_script() { $cache_key = 'mpb_contact_brand_product_ids_' . MPB_CONTACT_BRAND_ID; $product_ids = get_transient( $cache_key ); if ( false === $product_ids ) { $product_ids = get_posts( [ 'post_type' => [ 'product', 'product_variation' ], 'post_status' => 'publish', 'posts_per_page' => -1, 'fields' => 'ids', 'tax_query' => [ [ 'taxonomy' => 'product_brand', 'field' => 'term_id', 'terms' => MPB_CONTACT_BRAND_ID, 'include_children' => false, ], ], ] ); $product_ids = array_map( 'intval', (array) $product_ids ); $product_ids = array_unique( $product_ids ); $product_ids = array_values( $product_ids ); set_transient( $cache_key, $product_ids, 12 * HOUR_IN_SECONDS ); } wp_register_script( 'mpb-contact-brand', '', [], null, true ); wp_enqueue_script( 'mpb-contact-brand' ); wp_localize_script( 'mpb-contact-brand', 'mpbContactBrand', [ 'productIds' => $product_ids, 'phone' => MPB_CONTACT_PHONE, 'phoneHref' => 'tel:' . MPB_CONTACT_PHONE, 'label' => 'Contacter la boutique', ] ); } add_action( 'save_post_product', 'mpb_clear_contact_brand_cache' ); add_action( 'deleted_post', 'mpb_clear_contact_brand_cache' ); add_action( 'set_object_terms', 'mpb_clear_contact_brand_cache' ); add_action( 'edited_product_brand', 'mpb_clear_contact_brand_cache' ); add_action( 'delete_product_brand', 'mpb_clear_contact_brand_cache' ); function mpb_clear_contact_brand_cache() { delete_transient( 'mpb_contact_brand_product_ids_' . MPB_CONTACT_BRAND_ID ); } add_action( 'wp_footer', 'mpb_contact_brand_replacement_js', 100 ); function mpb_contact_brand_replacement_js() { ?> } add_action( 'wp_head', 'mpb_contact_button_css' ); function mpb_contact_button_css() { ?> https://ma-premiere-boutique.com/page-sitemap.xml 2026-04-23T13:39:04+00:00 https://ma-premiere-boutique.com/product-sitemap.xml 2026-04-23T18:24:50+00:00 https://ma-premiere-boutique.com/product_cat-sitemap.xml 2026-04-23T18:24:50+00:00