弹出窗口/模式中的UPDATE_USER_META

时间:2017-03-17 作者:kiarashi

我正在尝试创建一个弹出/模式通知,如果登录用户已达到某个级别。

我使用以下代码(简化):

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\' ); 
现在,我想在用户达到某个级别时创建一个弹出/模式通知。从现在开始,我需要一些指导。当用户单击关闭图标时,它应该更新usermeta。

Updated

已添加data-id 所需的属性update_user_meta

    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\'); 
由于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; 
        });

    } );
下面是所需的回调

function km_ajax_callback() {

    if( ! empty( $_POST[\'data-id\'] ) ) :    
        $new_val =  sanitize_text_field( $_POST[\'data-id\'] );
        update_user_meta( get_current_user_id(), \'km_user_meta_author_level\', array( \'\', $new_val ) ); 
    endif;

    exit(); 

}
add_action( \'wp_ajax_nopriv_km_ajax\', \'km_ajax_callback\' );
add_action( \'wp_ajax_km_ajax\', \'km_ajax_callback\' );
在控制台中,当用户单击close 按钮但是,user\\u meta的第二个数组没有得到更新。这意味着我的km_ajax_callback() 作用

有人能告诉我我做错了什么吗?或者我错过了什么?

1 个回复
SO网友:Samyer

据我所知,听起来您需要使用AJAX来更新该用户元。

此外,您可能还需要使用AJAX检索“内容”,以便在再次调用弹出模式时获得更新的信息。

wordpress中有很多关于AJAX的文档,但这里有一篇文章专门针对您的问题:Update user meta using with ajax

相关推荐