付款前从结帐页面更新用户元数据

Update user meta from checkout page before payment

你能帮我吗 - 我在结帐页面上用 billing/shipping 按钮分隔了地址表。我想通过 AJAX 单击下一步按钮将地址保存在数据库中。现在,当我更改表单地址中的数据时,我在 POST 中拥有 return 的权利,但数据未在用户配置文件中更新。

function.php

    add_action("wp_ajax_userAddressUpdate", "userAddressUpdate");
add_action("wp_ajax_nopriv_userAddressUpdate", "my_must_login");

function userAddressUpdate($user_id) {


    if (isset($_POST['billing_first_name'])) {
            update_user_meta($user_id, 'billing_first_name', sanitize_text_field(($_POST['billing_first_name'])));
        }

        if (isset($_POST['billing_last_name'])) {
            update_user_meta($user_id, 'billing_last_name', sanitize_text_field(($_POST['billing_last_name'])));
        }


}

file.js

jQuery(document).ready( function($) {

    $( '#update_address' ).click(function(){
        const billing_first_name = $("input[name=billing_first_name]").length ? $("input[name=billing_first_name]").val() : '';
        const billing_last_name = $("input[name=billing_last_name]").length ? $("input[name=billing_last_name]").val() : '';
        $.ajax({
            url : ajax_object.ajaxurl,
            type: 'POST',
            data : {
                action: "userAddressUpdate",
                billing_first_name,
                billing_last_name,
            },
            success: function( data ) {
                alert( data.message );
            }
        });

    })

})

首先,请只使用小写的动作名称

“更新地址”->“更新地址”

其次,您尝试警告“消息”,但从未从 php 函数中 returning 数据。

success: function( data ) {
                alert( data.message );
            }

第三,将 return 数据添加到您的 php 函数中,例如:

wp_send_json_success(["message" => "done"]);

请确保您的 ajax 调用从代码 200 得到 wordpress 的响应,以防您得到 40x,您的 php 代码可能永远不会 运行。

在php函数中添加$user_id = get_current_user_id()