如何为WordPress自定义数据库表添加行删除按钮并实现功能
解决自定义数据库表行删除按钮的关联问题
一、修正删除函数并添加触发机制
你的删除函数需要通过WordPress标准的后台表单提交钩子触发,同时要修正表名传递、删除条件的问题(你的表主键是user_id,不是代码里的id):
// 注册删除动作的钩子,处理后台表单提交 add_action('admin_post_delete_wallet_user', 'del_wallet_user'); add_action('admin_post_nopriv_delete_wallet_user', 'del_wallet_user'); // 可选:支持非登录用户操作(如果需要) function del_wallet_user() { global $wpdb; // 安全校验:确保必要参数存在 if (!isset($_POST['user_id'], $_POST['table'])) { wp_redirect(wp_get_referer()); exit; } $table_name = $wpdb->prefix . sanitize_text_field($_POST['table']); $user_id = intval($_POST['user_id']); // 执行删除操作,匹配表的主键字段user_id $wpdb->delete($table_name, ['user_id' => $user_id]); // 删除后重定向回原页面,避免刷新重复提交 wp_redirect(wp_get_referer()); exit; }
二、修改表格代码,添加每行的删除表单
你之前的按钮代码存在语法错误,需要给每行包裹独立表单,传递删除所需的参数:
<?php //get_header(); global $wpdb; $table_name = $wpdb->prefix . "hubaya_wallet_users"; $result = $wpdb->get_results("SELECT * FROM $table_name"); echo '<h1>PAY USERS</h1><br><br> <table border="1"> <tr> <th>ID</th> <th>ROLE</th> <th>BALANCE</th> <th>REG DATE</th> <th>Mobile Number</th> <th>操作</th> <!-- 新增操作列标题 --> </tr>'; foreach ( $result as $print ) { ?> <tr> <td><?php echo $print->user_id; ?> </td> <td><?php echo $print->user_role; ?> </td> <td> <?php echo $print->balance ; ?> </td> <td> <?php echo $print->created_date; ?> </td> <td><?php echo $print->phone_no; ?> </td> <!-- 新增删除按钮表单 --> <td> <form method="post" action="<?php echo admin_url('admin-post.php'); ?>"> <!-- 隐藏字段:传递动作标识、表名、用户ID --> <input type="hidden" name="action" value="delete_wallet_user"> <input type="hidden" name="table" value="hubaya_wallet_users"> <input type="hidden" name="user_id" value="<?php echo $print->user_id; ?>"> <input type="submit" value="删除" onclick="return confirm('确定要删除该用户吗?');"> </form> </td> </tr> <?php } ?> </table>
关键注意点
- 用
admin_post钩子是WordPress处理后台表单的标准方式,避免直接调用函数的安全风险; - 添加确认弹窗防止误删;
- 对所有POST参数做安全处理(
intval、sanitize_text_field),抵御SQL注入和XSS攻击; - 删除后重定向回原页面,避免刷新重复提交操作。
内容的提问来源于stack exchange,提问作者Taofeeq Tajudeen
相关产品推荐
相关产品推荐

