get_meta( Meta::PRODUCT_TRIMAN ), $product->get_meta( Meta::PRODUCT_INFOTRI ), $product->get_category_ids(), CategoryDefaults::get() ); $triman = $effective['triman']; $components = $effective['components']; $materials = InfoTri::materials(); $consignes = InfoTri::consignes(); $items = ''; foreach ( $components as $material => $consigne ) { if ( ! isset( $materials[ $material ], $consignes[ $consigne ] ) ) { continue; } // Pictogramme maison décoratif (teinté en CSS via mask) ; le texte porte l'information. $items .= sprintf( '
  • %2$s : %3$s
  • ', esc_attr( $consigne ), esc_html( $materials[ $material ] ), esc_html( $consignes[ $consigne ] ) ); } // Rien de valide à afficher : aucun encart (jamais d'état vide). if ( ! $triman && '' === $items ) { return ''; } // Pictogrammes maison (assets/img/, teintés en CSS) — on ne reproduit jamais la signalétique // officielle Triman/Info-tri (mark protégé, charte producteur ; cf. docs/regulatory/). $html = '
    '; $html .= '

    ' . esc_html__( 'Tri & recyclage', 'agec-ready' ) . '

    '; if ( $triman ) { // Terme légal exact (L.541-9-3 : le produit « fait l'objet de règles de tri ») — décision // documentée dans docs/regulatory/emballages.md §Signalétique (QR-10). $html .= '

    ' . esc_html__( 'Cet emballage fait l’objet de règles de tri (Triman).', 'agec-ready' ) . '

    '; } if ( '' !== $items ) { $html .= ''; } $html .= '
    '; return $html; } /** * Résout le tri effectif d'un produit (le niveau produit gagne ; à défaut, héritage des catégories). * * Logique pure (primitives) → réutilisée par l'affichage (html) ET le scan catalogue (CatalogScan), DRY. * * @param bool $own_triman Triman propre au produit. * @param mixed $own_infotri Meta Info-tri propre (peut être '' si jamais renseignée). * @param array $category_ids Catégories du produit. * @param array}> $defaults Défauts par catégorie. * @return array{triman:bool, components:array} */ public static function resolve( bool $own_triman, $own_infotri, array $category_ids, array $defaults ): array { $triman = $own_triman; $components = InfoTri::sanitize_components( is_array( $own_infotri ) ? $own_infotri : array() ); if ( ! $triman && empty( $components ) ) { $inherited = CategoryDefaults::for_terms( $category_ids, $defaults ); $triman = $inherited['triman']; $components = $inherited['components']; } return array( 'triman' => $triman, 'components' => $components, ); } }