我仅为登录用户创建了一个模式,当用户点击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()
函数必定存在错误。或者在其他地方?
谁能告诉我自己做错了什么?或者我错过了什么?
答案 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
,还有其他什么吗?