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