我尝试将用户订阅保存在元数据变量中。该函数由AJAX调用。调用了AJAX,但前端的元数据似乎没有更新。
代码如下:
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>
阿贾克斯
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);
}
前端检查:
<?php
$user = wp_get_current_user()->ID;
$tags = get_user_meta( $user->ID, \'hannit_meta\', true);
echo "<!-- u:".$user." val ".$tags."-->";
?>
结果:
<!-- u:236 val-->
我错过了什么?
SO网友:David Gard
首先,您可以在AJAX调用中去掉讨厌的全局变量。我不确定$st
您输出的变量都是关于这个变量的,所以我排除了它,但您可以根据自己的意愿包含它-
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();
}
对于测试,您似乎没有正确地查询meta,请尝试以下操作-
$user_id = get_current_user_id();
$tags = get_user_meta( $user_id, \'hannit_meta\', true);
echo "<!-- u:".$user_id." val ".$tags."-->";
SO网友:indextwo
我自己也在尝试这个确切的方法,很好奇为什么你的代码不能工作。我改变了两件事;可能是他们中的一个或两个修复了它。
首先,你似乎在你的else
在change_subscription
作用其次我通常会谨慎行事,使用全局$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();
}
}
你也有
$st
第二个变量
die()
- 我不知道这是否是在其他地方定义的,但为了整洁起见,我省略了它。根据设置的严格程度,一个未定义的变量可能会造成麻烦。
无论如何,使用这个精确的代码,这对我来说非常有效。感谢您的出发点——我使用您的代码作为我自己类似AJAX功能的基础。