update_user_meta funktioniert nicht mit AJAX

Ich versuche, das Benutzerabonnement in einer Metadatenvar zu behalten. Die function wird von AJAX aufgerufen. Ahe AJAX wird aufgerufen, aber die Metadaten scheinen im Frontend nicht aktualisiert zu sein.

Hier ist der Code:

jQuery

 jQuery(document).ready(function($) { $('#tags_list a').click(function(){ myid = $(this).parent("li").attr('id'); $.post( '', { 'action': 'change_subscription', 'type': 'post_tag', 'term_id': myid }, function(response){ $('#'+myid).toggleClass('checked'); } ); return false; }); });  

AJAX

 add_action('wp_ajax_change_subscription', 'change_subscription'); function change_subscription() { if (!empty($_POST['term_id']) && !empty($_POST['type'])) { $user = wp_get_current_user(); update_user_meta( $user->ID, 'hannit_meta', 'My Value' ); die(); } else die($st); } 

Front-End-Check:

 ID; $tags = get_user_meta( $user->ID, 'hannit_meta', true); echo ""; ?> 

Ergebnis:

Was fehlt mir hier?

Solutions Collecting From Web of "update_user_meta funktioniert nicht mit AJAX"

Zuerst kannst du böse Globals in deinem AJAX Anruf loswerden. Ich bin mir nicht sicher, worum es bei der $st -Variable, die Sie ausgegeben haben, geht, also habe ich ausgeschlossen, aber Sie können angeben, wie Sie möchten –

 add_action('wp_ajax_change_subscription', 'change_subscription'); function change_subscription(){ if(!empty($_POST['term_id']) && !empty($_POST['type'])) : $user_id = get_current_user_id(); update_user_meta( $user_id, 'hannit_meta', 'My Value' ); endif; die(); } 

Zum Testen sieht es so aus, als ob Sie das Meta falsch abgefragt haben.

 $user_id = get_current_user_id(); $tags = get_user_meta( $user_id, 'hannit_meta', true); echo ""; 

Ich habe diese genaue Methode selbst versucht und war neugierig, warum dein Code nicht funktionieren würde. Ich habe zwei Dinge geändert; es kann einer oder beide sein, die es behoben haben.

Erstens scheint es, als change_subscription du in der change_subscription function eine Klammer nach deinem else verpasst change_subscription . Zweitens; Normalerweise irre ich mich und benutze das globale Objekt $current_user :

 function change_subscription() { if (!empty($_POST['term_id']) && !empty($_POST['type'])) { global $current_user; get_currentuserinfo(); update_user_meta($current_user->ID, 'hannit_meta', 'My Value'); die(); } else { die(); } } 

Sie hatten auch eine $st Variable in Ihrem zweiten die() – ich weiß nicht, ob das an anderer Stelle definiert wurde, aber ich habe es aus Gründen der Ordentlichkeit weggelassen. Abhängig von der Strenge Ihres Setups kann eine undefinierte Variable einen Haken in die Arbeit bringen.

Wie auch immer, mit genau diesem Code funktioniert das perfekt für mich. Und danke für den Startpunkt – ich habe deinen Code als Grundlage für meine eigene ähnliche AJAX-function benutzt.