$field ) { $field_values[ $name ] = isset( $field['value'] ) ? $field['value'] : ''; } // Pour un post existant, si un champ n'a pas été soumis explicitement via // pods_meta_* (ex. Pods DFV React en éditeur classique), remplir sa valeur // depuis la BDD. Cela corrige à la fois : // - la validation du champ lui-même (pieces['fields']['value']) // - l'évaluation de la logique conditionnelle des autres champs ($field_values) if ( ! $is_new_item && $id ) { foreach ( $pieces['fields'] as $name => $field ) { // Skip pick/file/avatar fields: their value format in $pieces is complex // and get_post_meta returns a raw value that corrupts Pods' pick processing. // These fields are always submitted via POST by Pods DFV React. $field_type = pods_v( 'type', $field, '' ); if ( in_array( $field_type, [ 'pick', 'file', 'avatar' ], true ) ) { continue; } $current_val = isset( $field['value'] ) ? $field['value'] : ''; if ( ( '' === $current_val || null === $current_val ) && ! isset( $_POST[ 'pods_meta_' . $name ] ) ) { $db_val = get_post_meta( (int) $id, $name, true ); if ( '' !== $db_val && null !== $db_val ) { $pieces['fields'][ $name ]['value'] = $db_val; $field_values[ $name ] = $db_val; } } } } foreach ( $pieces['fields'] as $field_name => $field_data ) { // Ne traiter que les champs required $required = is_object( $field_data ) && method_exists( $field_data, 'get_field_object' ) ? (int) $field_data->get_field_object()->get_arg( 'required', 0 ) : (int) pods_v( 'required', $field_data, 0 ); if ( 1 !== $required ) { continue; } // Récupérer la logique conditionnelle $conditional_logic = null; if ( is_object( $field_data ) && method_exists( $field_data, 'get_field_object' ) ) { $conditional_logic = $field_data->get_field_object()->get_conditional_logic(); } // Fallback : charger le champ via l'API Pods if ( ! $conditional_logic ) { $field_obj = pods_api()->load_field( [ 'name' => $field_name, 'pod' => 'post', ] ); if ( $field_obj && method_exists( $field_obj, 'get_conditional_logic' ) ) { $conditional_logic = $field_obj->get_conditional_logic(); } } if ( ! $conditional_logic ) { continue; } // Évaluer si le champ est visible avec les valeurs actuelles if ( ! $conditional_logic->is_visible( $field_values ) ) { // Le champ est masqué → désactiver le required if ( is_object( $field_data ) && method_exists( $field_data, 'get_field_object' ) ) { $field_data->get_field_object()->set_arg( 'required', 0 ); } $pieces['fields'][ $field_name ]['required'] = 0; if ( isset( $pieces['fields'][ $field_name ]['options'] ) ) { $pieces['fields'][ $field_name ]['options']['required'] = 0; } } } return $pieces; }