ucfirst($taxonomy), 'public' => false]); } $term_obj = get_term_by('slug', $slug, $taxonomy); if (!$term_obj) { $result = wp_insert_term($term, $taxonomy, ['slug' => $slug]); if (!is_wp_error($result) && isset($result['term_id'])) { $term_ids[] = $result['term_id']; } } else { $term_ids[] = $term_obj->term_id; } } if (!empty($term_ids)) { update_field($field, $term_ids, $post_id); } break; case 'repeater': // Valeur attendue : string format pipe ou array d'items $rows = []; if (is_string($value)) { $items = explode('|', $value); foreach ($items as $item) { $row = []; $pairs = explode(';', $item); foreach ($pairs as $pair) { [$k, $v] = array_pad(explode(':', $pair, 2), 2, null); if ($k && $v !== null) { if (self::is_date($v)) { $v = \DateTime::createFromFormat('d/m/Y', $v); $v = $v->format('Y-m-d'); } $row[trim($k)] = trim($v); } } if ($row) $rows[] = $row; } } elseif (is_array($value)) { $rows = $value; } /* echo '
';
print_r($rows);
echo '';
die(); */
update_field($field, $rows, $post_id);
break;
case 'group':
// Valeur attendue : array associatif
if (is_string($value)) {
$group = [];
$pairs = explode(';', $value);
foreach ($pairs as $pair) {
[$k, $v] = array_pad(explode(':', $pair, 2), 2, null);
if ($k && $v !== null) $group[trim($k)] = trim($v);
}
update_field($field, $group, $post_id);
} elseif (is_array($value)) {
update_field($field, $value, $post_id);
}
break;
case 'checkbox':
// Valeur attendue : string format pipe ou array d'items
$value = is_array($value) ? $value : explode('|', (string)$value);
update_field($field, $value, $post_id);
break;
case 'date_picker':
// Valeur attendue : string format d/m/Y
$value = \DateTime::createFromFormat('d/m/Y', $value);
$value = $value->format('Y-m-d');
update_field($field, $value, $post_id);
break;
default:
// Champ simple (text, select, radio, etc.)
update_field($field, $value, $post_id);
}
}
public static function is_date($input, $format = 'd/m/Y') {
$d = \DateTime::createFromFormat($format, $input);
return $d && $d->format($format) === $input;
}
}