Dentro de un modal llamé a una función en PHP, que renderiza un formulario y envía esos datos a otra función que cambia metadatos de un post de wordpress y luego debe redirigir a la misma página, la función realiza todo el proceso pero no refresca la página, aquí las funciones:
Boton de Modal:
<a href="#" data-toggle="tooltip" data-placement="top" title="Dar de Baja">
<i class="fas fa-minus-circle" data-toggle="modal" data-target="#modalbaja<?php echo($id_modal); ?>"></i>
</a>
Fragmento de Modal:
<!-- Modal baja -->
<div class="modal fade" id="modalbaja<?php echo($id); ?>" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLongTitle">Dar de baja</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<?php dando_de_baja($id); ?>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cerrar</button>
</div>
</div>
</div>
</div>
<!-- Fin modal baja -->
Función en modal:
function dando_de_baja($id){
if(!empty($id)){
$baja = get_post_meta( $id, "_baja", true );
if($baja != 'baja'){
$user_id = get_current_user_id();
$user = wp_get_current_user();
$display_name = $user->display_name;
$fecha = date("d-m-Y");
$activo = get_the_title($id);
$sku = get_post_meta( $id, "_sku", true );
?>
<form method="post">
<div class="form-group">
<label for="tituloactivo">Activo</label>
<input class="form-control" type="text" placeholder="<?php echo $activo; ?>" readonly>
</div>
<div class="form-group">
<label for="skuactivo">Código</label>
<input class="form-control" type="text" placeholder="<?php echo $sku; ?>" readonly>
</div>
<div class="form-group">
<label for="motivobaja">Motivo de baja</label>
<textarea rows="3" class="form-control" name="motivo_baja" placeholder="" required></textarea>
<small id="emailHelp" class="form-text text-muted">Describa el motivo por el cuál está dando de baja el activo.</Small>
</div>
<div class="form-group">
<input id="usuario_baja" name="usuario_baja" type="hidden" value="<?php echo $user_id; ?>">
<input id="fecha_baja" name="fecha_baja" type="hidden" value="<?php echo $fecha; ?>">
<input id="id_baja" name="id_baja" type="hidden" value="<?php echo $id; ?>">
<input id="bajar_activo" name="bajar_activo" type="hidden" value="si">
<input id="baja" name="baja" type="hidden" value="exitoso">
</div>
<div class="modal-footer" style="margin-top: solid 1px black;">
<img src="
https://labs.fixedassets.cl/wp-content/uploads/2022/01/delete_gif.gif" style="width: 10%;">
<button type="submit" class="btn btn-danger pull-right">Confirmar</button>
</div>
</form>
<?php dar_de_baja($id); ?>
<?php } else { echo 'El activo consultado ya se encuentra dado de baja, para verificarlo vuelva al listado.'; }
} Else { echo 'No se encuentra el activo, puede volver y seleccionar el activo a dar de baja.'; }
Return;
}
Función que procesa los datos del formulario:
function dar_de_baja($id) {
$bajar = $_POST['bajar_activo'];
if($bajar == 'si'){
$id = $_POST['id_baja'];
$fecha = $_POST['fecha_baja'];
$usuario = $_POST['usuario_baja'];
$motivo = $_POST['motivo_baja'];
$url = '/editor';
if(!empty($id)){
if(!empty($fecha)){
if(!empty($usuario)){
if(!empty($motivo)){
update_post_meta( $id, '_fechabaja', $fecha );
update_post_meta( $id, '_userbaja', $usuario );
update_post_meta( $id, '_motivobaja', $motivo );
update_post_meta( $id, '_baja', 'baja' );
$url = '/editor';
header("location: " . $Url);
}
} else { wp_redirect($url); exit(); }
} else { wp_redirect($url); exit();}
} else { wp_redirect($url); exit(); }
}
}
Con todo esto cuál sería la mejor opción para que al guardar el formulario, ejecutar la funcion dar_de_baja() redirigiera a la página actual refrescando los cambios.
Gracias
Contexto general del proyecto
El objetivo es lograr que la función o la forma en que he programado esto funcione de manera correcta.
Plazo de Entrega: No definido