Usando hook_form_alter, deberás hacer dos cosas
1) asegúrese de que sea un formulario de nodo 2) agregue un controlador de envío personalizado a cada botón de envío.
function mymodule_form_alter(&$form, FormStateInterface $form_state, $form_id) {
if (isset($form['#entity_type']) && $form['#entity_type'] == 'node') {
foreach (array_keys($form['actions']) as $action) {
if ($action != 'preview' && isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] === 'submit') {
$form['actions'][$action]['#submit'][] = 'mymodule_node_form_submit';
}
}
}
}
Luego, para la función de envío, puede usar la lógica que desee. Puede comparar con NodeForm :: save, donde lo envía a la página de nodo canónico o a la página de inicio en función de los permisos de acceso del usuario actual.
Si desea cambiar este comportamiento para que permanezca en el formulario de nodo actual, puede hacer esto:
function mymodule_node_form_submit($form, FormStateInterface $form_state) {
$node = $form_state->getFormObject()->getEntity();
if ($node->id()) {
if ($node->access('edit')) {
$form_state->setRedirect(
'entity.node.edit_form',
['node' => $node->id()]
);
}
else {
$form_state->setRedirect('<front>');
}
}
}
Si desea usar su página de destino personalizada, simplemente reemplace la redirección con el código que ya está usando:
$form_state->setRedirect('custom.landing.page');
Tenga en cuenta que esto no se anulará cuando haya un parámetro "destino" $ _GET, como en la página / admin / content.
Para eliminar el parámetro de destino de la página / admin / content, desmarque la casilla de verificación "destino" en "Contenido: Enlaces de operaciones (Operaciones)" en esos campos de vistas.
If saving is an option, privileged users get dedicated form submit buttons to adjust the publishing status while saving in one go. @todo This adjustment makes it close to impossible for contributed modules to integrate with "the Save operation" of this form. Modules need a way to plug themselves into 1) the ::submit() step, and 2) the ::save() step, both decoupled from the pressed form button.