如何正确使用 WordPress AJAX 实现删除按钮功能

碧海醫心

碧海醫心

2026-07-16

674人浏览

原创

如何正确使用 WordPress AJAX 实现删除按钮功能

本文详解 wordpress 后台自定义页面中通过 ajax 安全执行删除操作的完整流程,涵盖前端事件绑定、数据传递、php 后端钩子注册及 sql 安全处理,解决常见“ajax 未触发回调”“php 函数不执行”等问题。

本文详解 wordpress 后台自定义页面中通过 ajax 安全执行删除操作的完整流程,涵盖前端事件绑定、数据传递、php 后端钩子注册及 sql 安全处理,解决常见“ajax 未触发回调”“php 函数不执行”等问题。

在 WordPress 自定义管理页面中实现无刷新删除功能时,仅靠 onclick 内联事件和未注册的 AJAX 动作极易失败——最典型表现是 console.log 正常输出,但后端函数完全未执行。根本原因在于:WordPress 的 AJAX 机制要求显式挂载动作钩子(wp_ajax_ 和 wp_ajax_nopriv_),且前端请求必须携带合法 action 参数,同时需确保 jQuery 在 DOM 就绪后绑定事件

以下是经过验证的完整解决方案:

unity3d游戏开发之相机切换 中文WORD版
unity3d游戏开发之相机切换 中文WORD版

本文档主要讲述的是unity3d游戏开发之相机切换;希望对大家会有帮助;感兴趣的朋友可以过来看看

下载

✅ 正确的前端代码(建议放在 admin 页面模板或独立 JS 文件中)

<td><button type="button" class="delete-project-btn" data-project-id="2">Delete Project 2 Names</button></td>
<!-- 使用 data-* 属性更语义化,避免 value 属性歧义 -->
<script>
jQuery(document).ready(function($) {
    // 推荐使用委托绑定,支持动态生成的按钮
    $(document).on('click', '.delete-project-btn', function(e) {
        e.preventDefault();
        const projectId = $(this).data('project-id');

        $.post(ajaxurl, {
            action: 'delete_project', // 注意:此处为动作名,非函数名
            project_id: projectId,    // 命名清晰,避免用通用名如 'data'
            nonce: MyAjax.nonce       // 强烈建议添加 nonce 验证(见下方说明)
        }, function(response) {
            if (response.success) {
                console.log('删除成功:', response.data);
                $(e.target).closest('tr').fadeOut(); // 可选:移除对应行
            } else {
                console.error('删除失败:', response.data);
            }
        }).fail(function(xhr, status, error) {
            console.error('AJAX 请求异常:', error);
        });
    });
});
</script>

⚠️ 关键修正点:

  • 移除内联 onclick,改用 jQuery 事件委托(更健壮、易维护);
  • action 值必须与 PHP 中 add_action() 注册的动作名严格一致(推荐小写+下划线风格);
  • 传递参数使用具名键(如 project_id),而非模糊的 data,便于后端清晰接收;
  • 必须确保 ajaxurl 已全局定义(通常通过 wp_localize_script() 注入,而非 PHP 模板内联)。

✅ 规范的后端处理(functions.php 或插件主文件)

// 1. 注册 AJAX 处理函数(后台用户可用)
add_action('wp_ajax_delete_project', 'handle_delete_project');
// 若需前台用户也可触发(如会员中心),补充:
// add_action('wp_ajax_nopriv_delete_project', 'handle_delete_project');

function handle_delete_project() {
    // 安全校验:nonce 验证(强烈推荐)
    if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'delete_project_nonce')) {
        wp_die('Invalid request.');
    }

    // 权限检查(例如:仅管理员可删)
    if (!current_user_can('manage_options')) {
        wp_die('Insufficient permissions.');
    }

    // 获取并校验参数
    $project_id = absint($_POST['project_id']);
    if (!$project_id) {
        wp_send_json_error(['message' => 'Invalid project ID.']);
    }

    global $wpdb;
    $table_name = $wpdb->prefix . 'projectsignup1'; // 使用前缀确保兼容性

    // 执行安全删除(prepare 已正确使用)
    $result = $wpdb->delete(
        $table_name,
        ['ProjectNumber' => $project_id],
        ['%d']
    );

    if ($result === false) {
        wp_send_json_error(['message' => 'Database error occurred.']);
    }

    wp_send_json_success(['message' => "Project #{$project_id} deleted."]);
}

✅ 必要的脚本本地化(在主题 functions.php 中添加)

function enqueue_admin_ajax_script() {
    wp_enqueue_script('admin-delete-handler', get_template_directory_uri() . '/js/delete-handler.js', ['jquery'], '1.0', true);

    // 安全注入 ajaxurl 和 nonce
    wp_localize_script('admin-delete-handler', 'MyAjax', [
        'ajaxurl' => admin_url('admin-ajax.php'),
        'nonce'   => wp_create_nonce('delete_project_nonce')
    ]);
}
add_action('admin_enqueue_scripts', 'enqueue_admin_ajax_script');

? 注意事项总结

  • 不要直接 echo/print_r 后端响应:WordPress AJAX 要求使用 wp_send_json_*() 统一输出 JSON 格式,否则前端解析失败;
  • SQL 删除语句修正:原代码 DELETE \fxq4_projectsignup1` WHERE ...语法错误(缺少FROM),应改用$wpdb->delete()或$wpdb->query($wpdb->prepare(...))`;
  • 避免全局变量污染:$wpdb 已全局可用,无需 global $wpdb;(虽不报错,但冗余);
  • 生产环境务必启用 nonce 验证:防止 CSRF 攻击,wp_create_nonce() + wp_verify_nonce() 是标准实践;
  • 错误处理不可省略:前端需判断 response.success,后端需对非法输入返回明确错误。

遵循以上结构,即可稳定实现 WordPress 管理页中基于 AJAX 的安全删除功能。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

5480

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

3610

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

1786

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

2273

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

2808

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

1999

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

3052

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

2315

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

10931

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何在 Windows 11 上安装 XAMPP
如何在 Windows 11 上安装 XAMPP

共1课时 | 127人学习

第二十三期_前端开发
第二十三期_前端开发

共98课时 | 10.4万人学习