get_user_meta and umeta_id

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

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. 这正常吗?我希望每个用户只有一个条目,以保持数据库“干净”。

1 个回复
最合适的回答,由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().

相关推荐

Replace domain in database

我的网站受到攻击,所以基本上所有的核心php文件都已损坏。只剩下数据库。现在我在本地主机中进行了尝试。如果我想从这个数据库恢复我的站点,域名是我唯一需要替换字符串的东西吗</我找到了这个教程-Replace string in database - 更改所有表中的域字符串,但几乎不知道将其放入何处以及如何在wordpress中触发它