). * * Symptôme : sélectionner « Journée d'étude » dans le menu `type_*` puis * enregistrer ne sauvegarde rien — le champ reste vide. * * Cause : le front-end Pods (DFV/React) encode la *valeur* des options avec * htmlspecialchars (ex. « Journée d'étude » → « Journée d'étude »), alors * que la liste des valeurs valides (`pick_custom`) contient l'apostrophe brute. * À la sauvegarde, PodsAPI::save_pod_item compare la valeur reçue aux options * autorisées (isset($custom_values[$v])) : « Journée d'étude » ne matche * aucune clé → la valeur est rejetée, et PodsMeta l'écrit vide. * * Correctif : on rejoue l'inverse de l'encodage (html_entity_decode) sur la * valeur des champs pick custom-simple dans `pods_api_pre_save_pod_item_post`, * qui s'exécute *avant* la validation des options. « Journée d'étude » * redevient « Journée d'étude » et matche l'option. Sans effet sur les valeurs * sans caractère spécial (décodage no-op) ni sur les données existantes. */ add_filter( 'pods_api_pre_save_pod_item_post', 'thalim_decode_custom_simple_entities', 10, 3 ); function thalim_decode_custom_simple_entities( $pieces, $is_new_item, $id ) { if ( empty( $pieces['fields'] ) ) { return $pieces; } foreach ( $pieces['fields'] as $name => $field_data ) { // Ne cibler que les pick « custom-simple » (options en dur via pick_custom). if ( 'pick' !== pods_v( 'type', $field_data ) ) { continue; } if ( 'custom-simple' !== pods_v( 'pick_object', $field_data ) ) { continue; } $value = isset( $field_data['value'] ) ? $field_data['value'] : null; if ( null === $value || '' === $value ) { continue; } $decoded = thalim_html_entity_decode_deep( $value ); if ( $decoded !== $value ) { $pieces['fields'][ $name ]['value'] = $decoded; } } return $pieces; } /** * Pendant côté AFFICHAGE du même bug d'encodage. * * Symptôme : après avoir enregistré « Journée d'étude », le menu de la page * d'édition ré-affiche « -- Sélectionnez -- » alors que la valeur est bien * stockée (la pastille s'affiche sur le post). * * Cause : Pods construit la *valeur* (`id`) de chaque option DFV via * html_entity_decode( esc_html( $id ), ENT_COMPAT ) (PodsField_Pick:: * build_dfv_field_item_data_recurse_item). esc_html encode l'apostrophe en * ', mais ENT_COMPAT NE décode PAS les apostrophes → l'option garde la * value « Journée d'étude », qui ne correspond pas à la valeur stockée * brute « Journée d'étude » → le