Eliminar una fila de una tabla personalizada en WordPress usando AJAX

2

Desde mi tabla personalizada ( $table = $wpdb->prefix . 'user_req'; ) estoy mostrando datos con $wpdb->get_results() y un bucle foreach:

Logréactualizarlabasededatosconlosvaloresindividualesdelformulariodondehayunbotón"Enviar". Pero, desde esta tabla, quiero eliminar cualquiera de las filas haciendo clic en el botón (x) a la derecha de cada fila. Puedo usar $_GET[] y puedo eliminar fácilmente la fila, pero en este caso quiero usar AJAX.

El botón (x) a la derecha de cada una de las filas es en realidad:

<input type="button" class="delete" title="Exclude This One"/>

No soy un código de fondo, así que realmente estoy luchando con él. La mayor parte de la solución viene cuando busco, son para PHP-mySQL en bruto, pero estoy tratando de lidiar con WordPress. Podría preparar mi consulta de eliminación de $ wpdb:

<?php $wpdb->delete( $table, array( 'post_id' => $products->post_id ) ); ?>

Pero no pude lograrlo con WordPress-AJAX. Por lo tanto, cualquier ayuda sería muy apreciada.

    
pregunta Mayeenul Islam 22.02.2014 - 17:02

1 respuesta

4

Nonce

Va a querer establecer un campo oculto nonce o al elemento para que pueda verificar la solicitud. Eche un vistazo al códice para ver ejemplos.

Configurando la ID POST y la Nonce

Deberá agregar el ID de la publicación específica al botón de eliminar o a un campo de entrada oculto asociado con esa entrada. Tengo la configuración de ejemplo, por lo que tendrá que agregar post_id y nonce a la identificación del elemento en un formato como #delete_postid_nonce . Tu ID de elemento tendría que terminar así: #delete_12_94f3a1e666 .

Puedes asignarlo usando: $element_id = 'delete_' . $products->post_id . '_' . wp_create_nonce('delete_' . $products->post_id );

Añadir acciones

Estos deben colocarse en functions.php o en un complemento personalizado.

Notarás que hay dos llamadas add_action. Uno es para usuarios privilegiados (es decir, están registrados) y uno es para usuarios sin privilegios. Retire uno u otro si no necesita ambos. Puedes leer más sobre eso en el Codex.

Delete_Row () Function

Esto debe colocarse en functions.php o en un complemento personalizado.

Aquí está capturando el id que enviamos en el objeto data de la llamada ajax. Eso se analiza y se coloca en la matriz POST ya que el type de la llamada ajax se establece en POST .

Luego, explode() el ID del elemento enviado en la llamada ajax (por ejemplo, '# delete_12_94f3a1e666') que te dejaría con $id = array('delete', 12, '94f3a1e666'); . Entonces, post_id es igual al índice [1] .

Luego, echo para devolver data a la porción success de la llamada ajax. Y luego matas la función php llamando a 'die'.

Necesitará modificar este código para que funcione al 100%.

JS:

jQuery(document).on('click', '.delete', function () {
    var id = this.id;
    jQuery.ajax({
        type: 'POST',
        url: ajaxurl,
        data: {"action": "your_delete_action", "element_id": id},
        success: function (data) {
            //run stuff on success here.  You can use 'data' var in the 
           //return so you could post a message.  
        }
    });
});

PHP:

function delete_row() {
    $id = explode('_', sanitize_text($_POST['element_id']));
    if (wp_verify_nonce($id[2], $id[0] . '_' . $id[1])) {
                $table = 'yourtable';
        $wpdb->delete( $table, array( 'post_id' => $id[1] ) );

        echo 'Deleted post';
        die;
    } else {
        echo 'Nonce not verified';
        die;
    }

}

add_action('wp_ajax_your_delete_action', 'delete_row');
add_action( 'wp_ajax_nopriv_your_delete_action', 'delete_row');
    
respondido por el CommandZ 24.02.2014 - 19:34

Lea otras preguntas en las etiquetas