Você precisa executar duas etapas:
Etapa 1: gerar automaticamente o título e o formulário oculto. use hook_field_widget_form_alter () com código
function MY_MODULE_field_widget_form_alter(&$element, \Drupal\Core\Form\FormStateInterface $form_state, $context) {
$field_definition = $context['items']->getFieldDefinition();
$bundle = $form_state->getFormObject()->getEntity()->bundle();
// You can check with other bundle
if ($field_definition->getName() == 'title' && $bundle == 'page' && $element['value']['#default_value'] == '') {
$element['#required'] = FALSE;
//hidden title
$element['#type'] = 'hidden';
$element['value']['#required'] = FALSE;
// Set default value
$element['value']['#default_value'] = 'Default Title';
}
}
Na etapa um, você pode cruzar o formulário de envio.
Etapa 2: Substituir novo título pelo valor padrão. Use hook_node_insert ()
function MY_MODULE_node_insert(Drupal\node\NodeInterface $node) {
if ($node->bundle() == 'page') {
$new_title = 'New title ' . $node->id();
$node->setTitle($new_title);
$node->setNewRevision(FALSE);
$node->save();
}
}