' : '';
} );
@@ -795,7 +798,7 @@
} );
/**
- * Galerie produit : styles des vignettes et du bouton zoom.
+ * Galerie produit : styles des vignettes, puis formulaire d'achat (sélecteurs, quantité, bouton).
* Le CSS natif WooCommerce ne s'applique qu'à l'intérieur de `.woocommerce div.product` ;
* notre modèle Oxygen rend la galerie dans `.ni-fiche-galerie`, on reproduit donc l'essentiel.
*/
@@ -810,10 +813,36 @@
. '.ni-fiche-galerie .flex-control-thumbs li{flex:0 0 calc(25% - 6px);margin:0;cursor:pointer}'
. '.ni-fiche-galerie .flex-control-thumbs img{display:block;width:100%;height:auto;opacity:.55;transition:opacity .2s}'
. '.ni-fiche-galerie .flex-control-thumbs img.flex-active,.ni-fiche-galerie .flex-control-thumbs img:hover,.ni-fiche-galerie .flex-control-thumbs img:focus-visible{opacity:1}'
- . '.ni-fiche-galerie .woocommerce-product-gallery__trigger{position:absolute;top:12px;right:12px;z-index:9;width:36px;height:36px;background:#fff;border-radius:50%;text-indent:-9999px;overflow:hidden;box-shadow:0 1px 4px rgba(0,0,0,.2)}'
- . '.ni-fiche-galerie .woocommerce-product-gallery__trigger::before{content:"";position:absolute;top:9px;left:9px;width:10px;height:10px;border:2px solid #161616;border-radius:50%;box-sizing:content-box}'
- . '.ni-fiche-galerie .woocommerce-product-gallery__trigger::after{content:"";position:absolute;top:20px;left:22px;width:2px;height:9px;background:#161616;border-radius:2px;transform:rotate(-45deg)}'
- . '.ni-fiche-galerie .woocommerce-product-gallery__trigger:focus-visible{outline:2px solid #161616;outline-offset:2px}'
+ . '.ni-fiche-galerie .woocommerce-product-gallery__trigger,.ni-fiche-galerie .zoomImg{display:none!important}'
+ . '.ni-fiche-galerie .woocommerce-product-gallery__image a{pointer-events:none;cursor:default}'
+ // Formulaire d'achat : le gabarit Breakdance (bde-woo-select, bde-quantity-button) arrive sans sa feuille de style
+ . '.ni-achat.ni-achat-natif form.cart{width:100%;margin:0}'
+ . '.ni-achat.ni-achat-natif table.variations{width:100%;border:0;border-collapse:collapse;margin:0}'
+ . '.ni-achat.ni-achat-natif table.variations tbody{display:grid;gap:12px}'
+ . '.ni-achat.ni-achat-natif table.variations tr{display:grid;grid-template-columns:110px minmax(0,1fr);align-items:center;column-gap:16px}'
+ . '.ni-achat.ni-achat-natif table.variations th,.ni-achat.ni-achat-natif table.variations td{display:block;padding:0;border:0;background:none;text-align:left;vertical-align:middle;line-height:1.3}'
+ . '.ni-achat.ni-achat-natif table.variations th label{margin:0;font-weight:700;font-size:var(--t-corps,1rem)}'
+ . '.ni-achat.ni-achat-natif .bde-woo-select{position:relative;display:block;width:100%}'
+ . '.ni-achat.ni-achat-natif .bde-woo-select select{display:block;width:100%!important;height:52px;margin:0;padding:0 44px 0 16px!important;border:1px solid #161616!important;border-radius:0;background:#fff!important;color:#161616;font:inherit;font-size:var(--t-corps,1rem);line-height:50px;-webkit-appearance:none;appearance:none;cursor:pointer;box-sizing:border-box}'
+ . '.ni-achat.ni-achat-natif .bde-woo-select select:focus-visible{outline:2px solid #161616;outline-offset:2px}'
+ . '.ni-achat.ni-achat-natif .bde-woo-select__arrow{position:absolute;top:50%;right:18px;width:8px;height:8px;margin-top:-6px;border-right:2px solid #161616;border-bottom:2px solid #161616;transform:rotate(45deg);pointer-events:none}'
+ . '.ni-achat.ni-achat-natif .reset_variations{display:inline-block;margin-top:10px;font-size:.875rem;color:#161616;text-decoration:underline;text-underline-offset:3px}'
+ . '.ni-achat.ni-achat-natif .single_variation_wrap{margin-top:20px}'
+ . '.ni-achat.ni-achat-natif .woocommerce-variation-price{margin:0 0 16px;font-size:1.5rem;font-weight:700}'
+ . '.ni-achat.ni-achat-natif .woocommerce-variation-description p,.ni-achat.ni-achat-natif .woocommerce-variation-availability p{margin:0 0 12px}'
+ . '.ni-achat.ni-achat-natif .woocommerce-variation-add-to-cart,.ni-achat.ni-achat-natif form.cart:not(.variations_form){display:flex;align-items:stretch;gap:12px;flex-wrap:wrap}'
+ . '.ni-achat.ni-achat-natif .quantity{display:inline-flex;align-items:stretch;height:52px;margin:0;border:1px solid #161616;background:#fff;box-sizing:border-box}'
+ . '.ni-achat.ni-achat-natif .quantity .qty{width:52px;height:100%;margin:0;padding:0;border:0!important;background:none;text-align:center;font:inherit;font-size:var(--t-corps,1rem);font-weight:600;color:#161616;-moz-appearance:textfield;appearance:textfield}'
+ . '.ni-achat.ni-achat-natif .quantity .qty::-webkit-outer-spin-button,.ni-achat.ni-achat-natif .quantity .qty::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}'
+ . '.ni-achat.ni-achat-natif .bde-quantity-button{position:relative;width:44px;height:100%;margin:0;padding:0;border:0;border-radius:0;background:none;cursor:pointer;flex:0 0 44px}'
+ . '.ni-achat.ni-achat-natif .bde-quantity-button:hover{background:#F3E9D2}'
+ . '.ni-achat.ni-achat-natif .bde-quantity-button:focus-visible{outline:2px solid #161616;outline-offset:-2px}'
+ . '.ni-achat.ni-achat-natif .bde-quantity-button::before,.ni-achat.ni-achat-natif .bde-quantity-button--inc::after{content:"";position:absolute;top:50%;left:50%;width:12px;height:2px;margin:-1px 0 0 -6px;background:#161616}'
+ . '.ni-achat.ni-achat-natif .bde-quantity-button--inc::after{transform:rotate(90deg)}'
+ . '.ni-achat.ni-achat-natif .single_add_to_cart_button{flex:1 1 200px;min-height:52px;height:52px;margin:0!important;padding:0 28px!important;border:1px solid #161616!important;border-radius:0!important;background:#161616!important;color:#fff!important;font-family:inherit;font-size:var(--t-corps,1rem);font-weight:700;letter-spacing:.04em;text-transform:uppercase;opacity:1;cursor:pointer;transition:background-color .3s ease,border-color .3s ease}'
+ . '.ni-achat.ni-achat-natif .single_add_to_cart_button:hover,.ni-achat.ni-achat-natif .single_add_to_cart_button:focus-visible{background:#F0447A!important;border-color:#F0447A!important}'
+ . '.ni-achat.ni-achat-natif .single_add_to_cart_button.disabled,.ni-achat.ni-achat-natif .single_add_to_cart_button:disabled{opacity:.35;cursor:not-allowed;background:#161616!important;border-color:#161616!important}'
+ . '@media (max-width:479px){.ni-achat.ni-achat-natif table.variations tr{grid-template-columns:1fr;row-gap:6px}.ni-achat.ni-achat-natif .single_add_to_cart_button{flex-basis:100%}}'
. '';
}
/** Description complète de l'œuvre (contenu du produit), mise en forme comme la prose du site. */
diff -ruN a/nolanizreal-site/nolanizreal-variations.php b/nolanizreal-site/nolanizreal-variations.php
--- a/nolanizreal-site/nolanizreal-variations.php 2026-09-25 10:24:22
+++ b/nolanizreal-site/nolanizreal-variations.php 2026-09-25 10:24:22
@@ -2,7 +2,7 @@
/**
* Variations & prix communs à tous les posters (Réglages du site → « Variations & prix »).
* - une ligne = une variation (Format × Support × Accroche, FR/EN), prix, dimensions (PDF), poids, active ou non ;
- * - bouton « Appliquer » : met à jour toutes les œuvres FR/EN (variations mises à jour sur place, ajoutées si absentes,
+ * - bouton « Enregistrer et appliquer » : enregistre la liste puis met à jour toutes les œuvres FR/EN (variations mises à jour sur place, ajoutées si absentes,
* passées en privé si retirées de la liste — jamais supprimées) ;
* - un produit publié sans variation hérite automatiquement de la liste ; case « Ne pas synchroniser » par produit.
* Le répéteur garde le nom ni_mir_offres : Make it real l'utilise pour les posters commandés.
@@ -12,23 +12,22 @@
add_action( 'acf/init', function () {
if ( ! function_exists( 'acf_add_local_field_group' ) ) { return; }
$unite = get_option( 'woocommerce_weight_unit', 'kg' );
- $url = wp_nonce_url( admin_url( 'admin-post.php?action=ni_appliquer_variations' ), 'ni_appliquer_variations' );
acf_add_local_field_group( array(
'key' => 'group_ni_variations', 'title' => 'Variations & prix des posters', 'menu_order' => 5,
+ 'label_placement' => 'top', 'instruction_placement' => 'field',
'location' => array( array( array( 'param' => 'options_page', 'operator' => '==', 'value' => 'ni-reglages' ) ) ),
'fields' => array(
array( 'key' => 'field_ni_variations_aide', 'label' => '', 'name' => '', 'type' => 'message', 'new_lines' => '',
'message' => '
Une ligne = une variation proposée sur chaque poster (œuvres et posters Make it real). Seules les lignes actives et avec un prix sont achetables.
'
- . '
1. Modifiez la liste puis cliquez sur Mettre à jour (en haut à droite). 2. Cliquez sur Appliquer à tous les posters
'
+ . '
Mettre à jour enregistre la liste seulement. Enregistrer et appliquer l’enregistre puis la reporte sur tous les posters (sauf ceux marqués « Ne pas synchroniser »).
'
. '
Les variations existantes sont mises à jour sur place (mêmes numéros, images conservées) ; celles retirées de la liste passent en privé, sans être supprimées. Un libellé modifié est traité comme une nouvelle variation. Tout nouveau poster publié sans variation hérite automatiquement de cette liste.