it-swarm.com.de

Benutzerprofil aktualisieren mit AJAX funktioniert nicht

Ich versuche, einige benutzerdefinierte Front-End-Benutzerprofilfunktionen einzurichten, und verwende AJAX, um Benutzern das Bearbeiten ihres Profils zu ermöglichen. Dies ist mein erstes Mal, dass ich AJAX in WP einrichte, und ich fühle mich so nah! Ich habe in vielen anderen Foren nachgesehen und konnte anscheinend nicht an meiner jetzigen Position vorbeikommen. Jeder Rat würde helfen!

Ich habe ein untergeordnetes Thema mit einer Benutzerprofilvorlage eingerichtet, die mit einem Formular eingerichtet wurde. Dann habe ich eine js-Datei, um die AJAX mit jQuery zu behandeln. Dann habe ich mein Skript in die functions.php eingereiht und lokalisiert sowie eine Callback-Aktion in der functions.php eingerichtet. Ich denke, mein Rückruf hat etwas auszusetzen. Ich habe den Code unten eingefügt.

BILDEN:

<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-Datei

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 Aktionen

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' );

Im Moment versuche ich nur, es mit einem zu arbeiten, dann verwende ich wp_update_user, um das Benutzerobjekt beim Senden zu aktualisieren.

Bisher habe ich versucht, das Problem zu diagnostizieren: Chrome Console gibt keine JS-Fehler aus. Wenn ich das Formular abschicke, erhalte ich von der jQuery die Erfolgsmeldung "User Meta Updated", aber ich aktualisiere die Seite und/oder überprüfe das Profil im Dashboard und die Daten haben sich nicht geändert.

Die Entwickler-Site wird auf der WP Engine gehostet und verwendet das Protokoll zum Debuggen. Derzeit sind keine Fehler aufgetreten. Der einzige Fehler, den ich hatte, war der Umgang mit dem is_wp_error, also habe ich ihn nur auskommentiert. Darauf bin ich momentan nicht fokussiert.

Ich denke nicht, dass es die Rückruffunktion trifft.

Danke im Voraus.

3
Dylan Wagner

Das Ganze funktioniert soweit ich das beurteilen kann. In Zukunft kann es einfacher sein, Dinge zu debuggen, indem Sie PHP error_log() verwenden, um an bestimmten Punkten, wie in Ihrem Ajax-Rückruf, in den debug.log zu schreiben.

Wenn Sie dieses Ajax nur für angemeldete Benutzer ausführen möchten, können Sie den Hook wp_ajax_nopriv und die Bedingung is_user_logged_in() löschen und sich einfach an den Hook wp_ajax_* halten. wp_ajax_nopriv ist "Keine Berechtigungen", was bedeutet, dass es für nicht angemeldete Benutzer ausgeführt wird. Die normale Funktion wp_ajax wird nur für angemeldete Benutzer ausgeführt.

Das Hauptproblem ist, dass Ihre Schlüssel nicht mit den WordPress-Usermeta-Tasten übereinstimmen. Sie greifen auf die Eingabe-ID zu, die first-name lautet, aber WordPress erwartet first_name als Metakey. Ich wette, wenn Sie Ihre Datenbanken uusermeta Tabelle überprüft haben, würden Sie ein paar Instanzen von first-name als Metakey sehen.

1
Howdy_McGee