是什么导致WP在使用get_user_meta时出现此错误?


What is causing this error in WP while using get_user_meta?

我正在向WordPress中的用户添加额外的元数据,每次我使用get_user_meta时,我都会得到这个错误:Notice: Object of class WP_User could not be converted to int in /.../wp-includes/functions.php on line 2999

我的代码是
foreach( $metadata as $key => $value ) {
        if ( !get_user_meta( $wcm_users[$i], $key, '' ) ) {
            add_user_meta( $wcm_users[$i]->ID, $key, '' );
        }
    }

$metadata是我想要添加的额外元数据的数组,所以它是一个基本的检查,看看元数据是否已经添加,如果没有,添加。无法理解是什么触发了错误。如果我去掉get_user_meta,错误就消失了。

知道是怎么回事吗?

get_user_meta()取整数ID。你传递给它一个WP_User对象。试一试:

    foreach( $metadata as $key => $value ) {
        if ( !get_user_meta( $wcm_users[$i]->ID, $key, '' ) ) {
            add_user_meta( $wcm_users[$i]->ID, $key, '' );
        }
    }

另外,请注意get_user_meta()的第三个(可选)参数是一个布尔值,用于指示您是希望将该值视为单个值还是数组-我猜您应该将其关闭以获得单个值的默认行为。这就是你传递的空字符串将要做的事情(因为空字符串是布尔值false),但从你的代码中并不是那么明显。

此外,update_user_meta()将添加元,如果它不存在,并更新它,如果它存在,这是你说你想要做的,所以:

foreach( $metadata as $key => $value ) {
    update_user_meta( $wcm_users[$i]->ID, $key, '' );
}

…可能会做你想做的。