wordpress redirect – Redireccionamiento de URL y acciones masivas en wp_list_table

Pregunta:

Estoy usando el complemento Ejemplo de tabla de lista personalizada como base para crear mi propia tabla de lista personalizada. Todo es genial, excepto un punto espinoso.

Cuando estoy procesando acciones masivas a través del método process_bulk_action() , me gustaría redirigir usando wp_redirect() . Aquí hay un ejemplo:

function process_bulk_action() {

    // Some security check code here

    // Get the bulk action
    $action = $this->current_action();

    if ($action == 'bulk_trash') {

        // Code for the "delete process"

        // Assuming "delete process" is successful
        wp_redirect("http://url/path.php?update=1&message=some_message");
        exit;
    }

}

Tenga en cuenta que en la llamada wp_redirect("http://url/path.php?update=1&message=some_message") , estoy tratando de redirigir a la misma página que muestra la tabla de lista para volver a cargarla con el resultado de el proceso de basura. También tenga en cuenta que hay un message en la ruta que me permite mostrar una notificación al usuario sobre el resultado de la acción masiva.

El problema es que recibo un mensaje de error Cannot modify header information - headers already sent by <file path> .

Entiendo lo que significa el mensaje y las razones detrás de él (la página ya está cargada y no se puede redirigir). Sin embargo, ¿cómo redirecciono entonces si me gustaría hacer eso después de procesar la acción masiva? Si la redirección no es la solución correcta, ¿qué otras opciones tengo que me permitan volver a cargar la wp_list_table personalizada nuevamente para que los registros enumerados reflejen los elementos que se están eliminando (es decir, menos elementos publicados y más elementos en la papelera)?

Gracias.

Respuesta:

Comprenda la jerarquía, no necesita redirigir ya que el formulario está publicando valores en la misma página.

function process_bulk_action() {

    // Some security check code here

    // Get the bulk action
    $action = $this->current_action();

    if ($action == 'bulk_trash') {

        // Code for the "delete process" 
       $delete_ids = esc_sql($_POST['bulk-delete']);

       //loop over the array of record ids
       foreach($delete_ids as $id) {
            self::delete_item($id);
       }

       // show admin notice
       echo '<div class="notice notice-success is-dismissible"><p>Bulk Deleted..</p></div>';
   }

}

otro método es prepare_items

public function prepare_items() {
      // first check for action
      $this->process_bulk_action();

      // then code to render your view.

}

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım