私のカスタムテーブル($table = $wpdb->prefix . 'user_req';
)から、$wpdb->get_results()
とforeachループでデータを表示しています。
"Submit"ボタンがあるフォームからの個々の値でデータベースを更新することに成功しました。しかし、この表から、各行の右側にある(x)
ボタンをクリックして、行を削除したいと思います。 $_GET[]
を使用して簡単に行を削除できますが、この場合はAJAXを使用します。
各行の右側にある(x)
ボタンは、実際には次のとおりです。
<input type="button" class="delete" title="Exclude This One"/>
私はコードの背景ではないので、実際には苦労しています。私が検索したとき、ほとんどの解決策が生のPHP-mySQL用ですが、私はそれをWordPressの方法で処理しようとしています。 $ wpdb削除クエリを準備できます。
<?php $wpdb->delete( $table, array( 'post_id' => $products->post_id ) ); ?>
しかし、WordPress-AJAXの方法でうまくいくことはできませんでした。したがって、任意の助けは大歓迎です。
あなたはリクエストを検証できるようにnonce
隠しフィールドまたは要素を設定したいでしょう。例としてコーデックスを見てください。
特定の投稿のIDを削除ボタンまたはそのエントリに関連付けられた非表示の入力フィールドに追加する必要があります。設定例がありますので、post_id
のような形式で#delete_postid_nonce
とnonce
を要素IDに追加する必要があります。あなたの要素IDは#delete_12_94f3a1e666
のようになってしまいます。
あなたはそれを使って割り当てることができます:$element_id = 'delete_' . $products->post_id . '_' . wp_create_nonce('delete_' . $products->post_id );
これらはfunctions.phpまたはカスタムプラグインに配置する必要があります。
2つのadd_action呼び出しがあることに気付くでしょう。 1つは特権ユーザー用(つまり、ログインしているユーザー用)、もう1つは非特権ユーザー用です。どちらも必要ない場合は、どちらか一方を取り外してください。あなたはそれについてもっとCodexで読むことができます。
これはfunctions.phpまたはカスタムプラグインに配置する必要があります。
ここであなたは私たちがajax呼び出しのid
オブジェクトで送ったdata
をつかんでいます。 ajax呼び出しのPOST
はtype
に設定されているので、これは解析されてPOST
配列に入れられます。
それから、ajax呼び出しで送信された要素IDからIDをexplode()
して(例えば '#delete_12_94f3a1e666')、$id = array('delete', 12, '94f3a1e666');
を残します。したがって、post_idはインデックス[1]
と同じです。
それからecho
を返して、data
をajax呼び出しのsuccess
部分に返します。そして、 'die'を呼び出してphp関数を終了します。
あなたはそれが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');