WordPress前端用户资料表单提交触发钩子的解决方案咨询
解决前端用户资料表单提交后触发API的问题
一、WooCommerce前端账户表单场景
如果用的是WooCommerce自带的前端账户编辑表单,直接用woocommerce_save_account_details钩子就行——这个钩子是在所有账户资料(包括WordPress核心字段、WooCommerce字段)保存完成后触发的,完全能满足你的需求。
示例代码:
add_action('woocommerce_save_account_details', 'send_api_after_woo_profile_update', 10, 1); function send_api_after_woo_profile_update($user_id) { // 拉取所有更新后的用户数据 $user = get_user_by('id', $user_id); $billing_phone = get_user_meta($user_id, 'billing_phone', true); // JetEngine用户字段存在user_meta里,直接用get_user_meta获取 $jet_custom_field = get_user_meta($user_id, '你的JetEngine字段键名', true); // 发起API请求 $api_endpoint = 'https://你的API地址.com/update-user'; $request_body = [ 'user_id' => $user_id, 'email' => $user->user_email, 'billing_phone' => $billing_phone, 'jet_custom_data' => $jet_custom_field ]; wp_remote_post($api_endpoint, [ 'headers' => ['Content-Type' => 'application/json'], 'body' => json_encode($request_body) ]); }
二、JetEngine前端用户表单场景
要是用的是JetEngine创建的前端用户编辑表单,用jet-engine/forms/after-submit钩子准没错——它会在表单提交后的所有字段处理(包括JetEngine自定义字段、关联的用户元数据更新)完成后触发。
示例代码:
add_action('jet-engine/forms/after-submit', 'send_api_after_jet_form_submit', 10, 2); function send_api_after_jet_form_submit($form, $response) { // 先确认是用户编辑类型的表单 if ('user-edit' !== $form->get_type()) { return; } $user_id = $response['user_id']; // 获取更新后的各类数据 $user = get_user_by('id', $user_id); $woo_billing_email = get_user_meta($user_id, 'billing_email', true); $jet_field_value = get_user_meta($user_id, '你的JetEngine字段键名', true); // 发起API请求 $api_endpoint = 'https://你的API地址.com/update-user'; wp_remote_post($api_endpoint, [ 'headers' => ['Content-Type' => 'application/json'], 'body' => json_encode([ 'user_id' => $user_id, 'username' => $user->user_login, 'billing_email' => $woo_billing_email, 'jet_custom_data' => $jet_field_value ]) ]); }
三、通用兜底方案(适配自定义/混合表单)
如果是自己开发的前端表单,或者上述插件钩子不适用,直接用shutdown钩子——它会在WordPress所有处理流程彻底结束后触发,此时所有用户元数据的更新操作肯定都完成了。
示例代码:
add_action('init', 'watch_frontend_profile_submit'); function watch_frontend_profile_submit() { // 先判断是不是你的前端表单提交请求,根据表单的action参数调整 if (isset($_POST['action']) && $_POST['action'] === 'update_frontend_profile') { // 绑定shutdown钩子延迟执行 add_action('shutdown', 'send_api_on_shutdown'); } } function send_api_on_shutdown() { $user_id = get_current_user_id(); if (!$user_id) { return; } // 获取所有更新后的用户数据和元数据 $user_data = get_userdata($user_id); $all_user_meta = get_user_meta($user_id); // 发起API请求 $api_endpoint = 'https://你的API地址.com/update-user'; wp_remote_post($api_endpoint, [ 'headers' => ['Content-Type' => 'application/json'], 'body' => json_encode([ 'user_id' => $user_id, 'basic_info' => $user_data->data, 'meta_data' => $all_user_meta ]) ]); }
四、自定义表单的直接处理
如果是自己写的前端表单,更简单——在所有用户数据、元数据更新完成后,直接调用API请求就行,不用找钩子:
add_action('template_redirect', 'handle_custom_profile_form'); function handle_custom_profile_form() { if ($_SERVER['REQUEST_METHOD'] !== 'POST') { return; } $user_id = get_current_user_id(); // 更新WordPress核心字段 wp_update_user([ 'ID' => $user_id, 'user_email' => sanitize_email($_POST['email']) ]); // 更新WooCommerce字段 update_user_meta($user_id, 'billing_address_1', sanitize_text_field($_POST['billing_address'])); // 更新JetEngine字段 update_user_meta($user_id, 'jet_user_bio', sanitize_textarea_field($_POST['bio'])); // 所有更新完成,直接发起API请求 send_api_request($user_id); } function send_api_request($user_id) { // 这里写你的API请求逻辑 }
内容的提问来源于stack exchange,提问作者Bastien
相关产品推荐
相关产品推荐

