UPDATE_USER_META不适用于AJAX

时间:2013-05-02 作者:hannit cohen

我尝试将用户订阅保存在元数据变量中。该函数由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-->

我错过了什么?

2 个回复
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

我自己也在尝试这个确切的方法,很好奇为什么你的代码不能工作。我改变了两件事;可能是他们中的一个或两个修复了它。

首先,你似乎在你的elsechange_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功能的基础。

结束

相关推荐

带有AJAX处理程序的WP_QUERY返回相同的帖子

我有一个问题,那就是让我的自动取款机秃顶。我有一个ajax调用,它处理一个循环,该循环处理一些查询并为我返回帖子。到目前为止还不错,但用户第一次看到页面时,我们应该加载10篇帖子,然后我们想单击一个按钮再请求5篇。到目前为止还不错。但当我们要求再发5个帖子时,我们又得到了前5个帖子。我的batchloop<?php // Our include define(\'WP_USE_THEMES\', false); require_once(\'../../../w