function theme_achievements() {
$user_id = get_current_user_id();
if ( empty( $user_id ) ) {
return false;
}
if( $value >= \'0\' && $value <= \'499\' ) {
add_user_meta( $user_id, \'author_level\', array( \'lvl-0\', \'\' ) );
} elseif( $value >= \'500\' && $value <= \'999\' ) {
update_user_meta( $user_id, \'author_level\', array( \'lvl-1\', \'\' ) );
} else {
...
}
}
add_action( \'wp_head\', \'theme_achievements\' );
使用上面的函数,我创建了一个自定义用户meta\\u键(基于级别)。
在查看我的wp数据库(phpMyAdmin)以查看meta\\u键是否正确创建和更新时,我注意到author_level
不断增加页面加载量的条目。
数据库内部user_id
, meta_key
, 和meta_value
都是一样的,但每个条目都有一个唯一的umeta_id
. 这正常吗?我希望每个用户只有一个条目,以保持数据库“干净”。
最合适的回答,由SO网友:Paul \'Sparrow Hawk\' Biron 整理而成
您可以通过以下两种方式之一修复此问题:
将呼叫更改为add_user_meta()
到update_user_meta()
当您的第一个条件求值为true时。如中所述update_user_meta(), “如果用户的元字段不存在,将添加它。”通过true
作为$unique
(4)参数至add_user_meta()
. 如中所述add_user_meta(), 这个$unique
param控制“是否不应添加相同的键”(即,如果为true,则如果元已经存在,则另一个将not 被添加;默认为false)在大多数情况下,哪一个更受欢迎可以归结为“风格”。
Edit
这同样适用于
add_post_meta()
vs公司
update_post_meta()
和
add_term_meta()
vs公司
update_post_meta()
.
其中#1或#2重要的是你是否update_{$meta_type}_meta 并期待它永远开火。如果#1(即始终使用update_user_meta()
) 这个update_user_meta
行动意志not 如果元不存在,则激发,因为update_user_meta()
只需打电话add_user_meta()
如果元不存在。
因此,如果您关心捕获元添加,那么通常应该将两者结合起来update_{$meta_type}_meta
和add_{$meta_type}_meta, 即使你总是使用update_user_meta()
.