WP AJAX不更新update_user_meta(具有多个值)

时间:2017-03-18 17:51:58

标签: javascript php jquery ajax wordpress

我仅为登录用户创建了一个模式,当用户点击close图标时,我希望更新该特定用户的用户元字段。

我的模态代码如下所示:

function theme_notification_popup() {       
    $level = get_user_meta( $user_id, 'author_level', true ); ?>

    <div id="my-id" class="uk-modal" data-uk-modal="{center:true}">
        <div class="uk-modal-dialog">
            <a class="uk-modal-close uk-close" data-id="<?php echo esc_attr( $level[0] ); ?>-notification-read"></a>
            <h4>Title</h4></div>    
            ...content...   
        </div>
    </div>          
<?php }
add_action ('wp_footer', 'theme_notification_popup'); 

我使用data-id属性来存储更新user_meta所需的信息。

由于AJAX是处理此问题的方法,因此这是我的AJAX代码

jQuery( 'document' ).ready( function( $ ) {

      jQuery('#uk-modal').on('click', '.uk-modal-close', function(e) { 
            e.preventDefault();

            var levelRead = $('.uk-modal-close').attr('data-id');

                $.ajax( {
                    url : ajax_url,
                    type: 'POST', 
                    data: {  
                        action  : 'km_ajax',
                        'data-id': levelRead, 
                    }
                } )
                .success( function( results ) {
                   // console.log( 'User Meta Updated!' );
                   console.log( levelRead );
                } )
                .fail( function( data ) {
                    console.log( data.responseText );
                    console.log( 'Request failed: ' + data.statusText );
                } );

            return false; 
        });

    } );

这是必需的回调

add_action( 'wp_ajax_nopriv_km_ajax', 'km_ajax_callback' );
add_action( 'wp_ajax_km_ajax', 'km_ajax_callback' );
function km_ajax_callback() {

    if( ! empty( $_POST['data-id'] ) ) {

        $user_id = get_current_user_id();

        if ( empty( $user_id ) ) { 
            return false; 
        }

        $level = get_user_meta( $user_id, 'author_level', true );

        $new_val =  sanitize_text_field( $_POST['data-id'] );

        update_user_meta( $user_id, 'author_level', array( $level[0], $new_val ) ); 
    }

    wp_die();   

}

在控制台中,我看到当用户点击close按钮时,AJAX成功。但是,user_meta不会更新。这意味着我的km_ajax_callback()函数必定存在错误。或者在其他地方?

谁能告诉我自己做错了什么?或者我错过了什么?

2 个答案:

答案 0 :(得分:0)

只需更改您的update_user_meta方法:

update_user_meta( $user_id, 'author_level', $author_val); 

点击此处更新用户元方法:

https://developer.wordpress.org/reference/functions/update_user_meta/

答案 1 :(得分:0)

我发现了问题所在;毕竟,AJAX代码没有任何问题。

我还创建了一个额外的功能

function theme_achievements() {

    $value = user_total_posts( get_current_user_id() )

    if( $value >= '0' && $value <= '499' ) { 
        update_user_meta( get_current_user_id(), 'author_level', array( 'lvl-1', '' ) );
    } elseif( $value >= '500' && $value <= '999' ) { 
        update_user_meta( get_current_user_id(), 'author_level', array( 'lvl-2', '' ) );
    } else {
        ...
    }

}

add_action( 'wp_head', 'theme_achievements' ); 

上面的这个函数每次都会运行,覆盖了AJAX更新。关于更好地处理上述功能的任何想法?而不是使用wp_head,还有其他什么吗?