You have to not only set the “normal” field value but also the underscored version like this:
function myAcfGetBlock(
string $block,
array $fieldData
) {
$fields = [];
foreach($fieldData as $fieldKey => $fieldValue) {
$key = 'block_' . $block . '_' . $fieldKey;
$fields[$key] = $fieldValue;
$fields['_'.$key] = 'field_' . md5($key);
}
$json = [
'name' => 'acf/' . $block,
'data' => $fields,
'mode' => 'edit'
];
$fields = json_encode($json);
$acfJson = <<<ACFJSON
<!-- wp:acf/$block $fields /-->
ACFJSON;
return $acfJson;
}
so you can then do something like
wp_insert_post( [
'post_type' => 'job',
'post_status' => 'publish',
'post_title' => 'My Jobname',
'post_content' => myAcfGetBlock('title', [
'subtitle' => 'My subtitle'
])
] );