我正在尝试创建一个弹出/模式通知,如果登录用户已达到某个级别。
我使用以下代码(简化):
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()
作用
有人能告诉我我做错了什么吗?或者我错过了什么?