web-dev-qa-db-fra.com

Supprimer la ligne du tableau personnalisé dans WordPress à l'aide de AJAX

De ma table personnalisée ($table = $wpdb->prefix . 'user_req';), je montre des données avec $wpdb->get_results() et une boucle foreach:

my table

J'ai réussi à mettre à jour la base de données avec les valeurs individuelles du formulaire contenant un bouton "Soumettre". Mais, dans ce tableau, je souhaite supprimer l’une des lignes en cliquant sur le bouton (x) situé à droite de chaque ligne. Je peux utiliser $_GET[] et supprimer facilement la ligne, mais dans ce cas, je souhaite utiliser AJAX.

Le bouton (x) à droite de chaque ligne est en fait:

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

Je ne suis pas un concepteur de code, donc je me bats vraiment avec. La plupart de la solution vient quand je cherche, sont pour PHP-mySQL brut, mais j'essaie de le traiter avec un moyen WordPress. Je pourrais préparer ma requête de suppression $ wpdb:

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

Mais je ne pouvais pas y aller avec WordPress-AJAX. Par conséquent, toute aide serait grandement appréciée.

2
Mayeenul Islam

Nonce

Vous allez vouloir définir un champ masqué nonce ou l'élément afin de pouvoir vérifier la demande. Regardez le codex pour des exemples.

Définition du POST ID et du Nonce

Vous devrez ajouter l'id de la publication spécifique au bouton de suppression ou à un champ de saisie masqué associé à cette entrée. J'ai l'exemple de configuration, vous devrez donc ajouter le post_id et le nonce à l'id d'élément dans un format tel que #delete_postid_nonce. Votre identifiant d'élément devrait se présenter comme suit: #delete_12_94f3a1e666.

Vous pouvez l'assigner avec: $element_id = 'delete_' . $products->post_id . '_' . wp_create_nonce('delete_' . $products->post_id );

Ajouter des actions

Ceux-ci doivent être placés dans functions.php ou dans un plugin personnalisé.

Vous remarquerez qu'il y a deux appels add_action. L’un est destiné aux utilisateurs privilégiés (c’est-à-dire qu’ils sont connectés) et l’autre est destiné aux utilisateurs non privilégiés. Retirez l'un ou l'autre si vous n'avez pas besoin des deux. Vous pouvez en savoir plus à ce sujet sur le Codex.

Fonction Delete_Row ()

Cela doit être placé dans functions.php ou dans un plugin personnalisé.

Ici, vous récupérez la id que nous avons envoyée dans l’objet data de l’appel ajax. Cela est analysé et placé dans le tableau POST puisque la type de l'appel ajax est définie sur POST.

Ensuite, vous explode() l'identifiant de l'élément envoyé dans l'appel ajax (par exemple, '# delete_12_94f3a1e666') ce qui vous laisserait avec $id = array('delete', 12, '94f3a1e666');. Donc, le post_id est égal à index [1].

Ensuite, vous echo pour renvoyer data à la portion success de l'appel ajax. Et puis vous tuez la fonction php en appelant `die '.


Vous devrez modifier ce code pour le faire fonctionner à 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');
4
CommandZ