J'essaie de conserver mon abonnement utilisateur dans une métadonnée. La fonction est appelée par AJAX. Ahe AJAX est appelé, mais les métadonnées ne semblent pas mises à jour sur l'interface.
Voici le code:
jQuery
<script type="text/javascript">
jQuery(document).ready(function($) {
$('#tags_list a').click(function(){
myid = $(this).parent("li").attr('id');
$.post(
'<?php echo admin_url( 'admin-ajax.php' ) ?>',
{
'action': 'change_subscription',
'type': 'post_tag',
'term_id': myid
},
function(response){
$('#'+myid).toggleClass('checked');
}
);
return false;
});
});
</script>
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);
}
Contrôle frontal:
<?php
$user = wp_get_current_user()->ID;
$tags = get_user_meta( $user->ID, 'hannit_meta', true);
echo "<!-- u:".$user." val ".$tags."-->";
?>
Résultat: <!-- u:236 val-->
Qu'est-ce que j'oublie ici?
D'abord, vous pouvez vous débarrasser des globales désagréables dans votre appel AJAX. Je ne suis pas sûr de la nature de la variable $st
que vous avez sortie, alors je l'ai exclu, mais vous pouvez l'inclure à votre guise
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();
}
Pour les tests, il semble que vous ayez interrogé la méta de manière incorrecte, alors pleaes essayez ceci -
$user_id = get_current_user_id();
$tags = get_user_meta( $user_id, 'hannit_meta', true);
echo "<!-- u:".$user_id." val ".$tags."-->";
J'essayais moi-même cette méthode exacte et j'étais curieux de savoir pourquoi votre code ne fonctionnerait pas. J'ai changé deux choses. il peut être l'un ou les deux qui l'a corrigé.
Premièrement, il semble qu'il vous manque un crochet après votre else
dans la fonction change_subscription
. Deuxièmement; Je fais habituellement preuve de prudence et utilise l'objet global $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();
}
}
Vous avez également eu une variable $st
dans votre deuxième die()
- je ne sais pas si cela a été défini ailleurs, mais je l'ai omis pour des raisons de propreté. En fonction de la rigueur de votre configuration, une variable non définie peut vous donner des difficultés.
Quoi qu'il en soit, en utilisant ce code exact, cela fonctionne parfaitement pour moi. Et merci pour le point de départ - j'ai utilisé votre code comme base de ma propre fonction similaire AJAX.