Обновление профиля пользователя с помощью AJAX не работает

Я пытаюсь настроить некоторые пользовательские функции профиля пользовательского профиля, и я использую AJAX, чтобы пользователи могли редактировать свой профиль. Это моя первая настройка AJAX на WP, и я чувствую, что я так близко! Я проверил множество других форумов, и я не мог бы пройти мимо, где я сейчас. Любой совет поможет!

У меня есть дочерняя тема, настроенная с шаблоном профиля пользователя, созданным с помощью формы. Затем у меня есть js-файл для обработки AJAX с помощью jQuery. Затем я заключил в очередь и локализовал свой скрипт в функции functions.php, а также выполнил действие обратного вызова в функции functions.php. Я думаю, что есть что-то с моим обратным вызовом. У меня есть код, вставленный ниже.

ФОРМА:

<form id="user-profile-frontend"> <label> <span>Email:</span> <input type="text" name="email" id="email-val" value="<?php echo $current_user->user_email ?>" /> </label> <label> <span>First Name:</span> <input type="text" name="first-name" id="first-name" value="<?php echo $current_user->user_firstname ?>" /> </label> <label> <span>Last Name:</span> <input type="text" name="last-name" id="last-name" value="<?php echo $current_user->user_lastname ?>" /> </label> <label> <span>Display Name:</span> <input type="text" name="display-name" id="display-name" value="<?php echo $current_user->display_name ?>" /> </label> <input type="submit" value="Update Profile" /> </form> 

jQuery AJAX JavaScript-файл

 jQuery('document').ready(function(){ jQuery('#user-profile-frontend').submit(function(e){ e.preventDefault(); var user_meta_val = jQuery( '#first-name' ).val(); var user_meta_key = jQuery( '#first-name' ).attr('id'); if ( jQuery('user_meta_val') ) { jQuery.ajax ({ url: user_meta_ajax.ajaxurl, type: 'POST', data: { action: 'user_meta_callback', 'user_meta_val': user_meta_val, 'user_meta_key': user_meta_key } }) .success( function(results) { console.log( 'User Meta Updated' ); }) .fail ( function(data) { console.log( data.responseText ); console.log( 'Request Failed' + data.statusText ); }) } else { console.log( 'Uh oh. User error message' ); } return false; }); }); 

Действия functions.php

 function user_profile_enqueue() { // Register script for localization wp_register_script ( 'user-profile-mod', get_stylesheet_directory_uri() . '/js/user-profile-mod.js', array( 'jquery' ), '1.0', true ); // Localize script so we can use $ajax_url wp_localize_script ( 'user-profile-mod', 'user_meta_ajax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); // Enqueue script wp_enqueue_script( 'user-profile-mod' ); } add_action( 'wp_enqueue_scripts', 'user_profile_enqueue' ); function user_meta_callback() { if ( !isset( $_POST) || empty($_POST) || !is_user_logged_in() ) { header( 'HTTP/1.1 400 Empty POST Values' ); echo 'Could not verify POST values'; exit; } $user_id = get_current_user_id(); $user_meta_key = sanitize_text_field( $_POST['user_meta_key'] ); $user_meta_val = sanitize_text_field( $_POST['user_meta_val'] ); // Update single meta value update_user_meta( $user_id, $user_meta_key, $user_meta_val ); // if (is_wp_error($user_id)) { // echo $user_id->get_error_message(); // } // else { // echo 'Field updated!'; // } exit; } add_action( 'wp_ajax_user_meta_callback', 'user_meta_callback' ); add_action( 'wp_ajax_nopriv_user_meta_callback', 'user_meta_callback' ); 

Прямо сейчас я просто пытаюсь заставить его работать с одним, затем я буду использовать wp_update_user для обновления объекта пользователя на submit.

Что я сделал до сих пор, чтобы попытаться диагностировать проблему: Chrome Console не дает никаких JS-ошибок. Когда я отправляю форму, я получаю сообщение об успешности из jQuery, в котором говорится «User Meta updated», но я обновляю страницу и / или проверяю профиль на панели управления, и данные не изменились.

Сайт-разработчик размещен в WP Engine и использует журнал для отладки с их конца, у меня нет ошибок на этом этапе. Единственная ошибка, с которой я столкнулся, заключалась в обработке is_wp_error, поэтому я просто прокомментировал это. Сейчас я не сосредоточен на этом.

Я не думаю, что это касается функции обратного вызова.

Заранее спасибо.

Все это работает, насколько я могу судить. В будущем может быть проще отлаживать вещи, используя PHP error_log() для записи в debug.log в определенные моменты, например, внутри вашего обратного вызова ajax.

Если вы только хотите запустить этот ajax для зарегистрированных пользователей, вы можете сбросить wp_ajax_nopriv hook и is_user_logged_in() условно и просто придерживаться wp_ajax_* hook. wp_ajax_nopriv – «Нет привилегий», что означает, что он будет запущен для пользователей без регистрации. wp_ajax функция wp_ajax будет запускаться только для зарегистрированных пользователей.

Основная проблема заключается в том, что ваши ключи не соответствуют клавишам usermeta WordPress. Вы захватываете идентификаторы входных данных, которые являются first-name но WordPress ожидает first_name как метакали. Бьюсь об заклад, если вы проверили свои базы данных uusermeta table, вы увидите пару экземпляров first-name как метакали.