Add custom user meta data

时间:2019-05-17 作者:Subham

我想为所有用户添加一个默认值为false的自定义元数据。我研究了添加元数据的方法,即,add_user_meta( int $user_id, string $meta_key, mixed $meta_value, bool $unique = false ) 它只允许向特定用户添加元数据。但我想为所有用户添加它。我怎样才能做到这一点?谢谢

1 个回复
最合适的回答,由SO网友:nmr 整理而成

向所有现有用户添加自定义字段

您必须获得用户列表,然后在循环中为每个用户设置一个自定义字段。

$users = get_users( [
    \'fields\' => \'id\', 
    \'meta_key\' => \'YOUR_META_KEY\', 
    \'meta_compare\' => \'NOT EXISTS\'
] );
if ( is_array($users) && count($users) )
{
    $meta_value = false;
    foreach( $users as $user_id ) {
        add_user_meta( $user_id, \'YOUR_META_KEY\', $meta_value, true);
    }
}
具有单个查询的版本需要使用SQL查询。如果出现错误,函数将返回FALSE。

global $wpdb;
$sql_query = "INSERT INTO {$wpdb->usermeta} (user_id, meta_key, meta_value) "
    . "SELECT ID, \'YOUR_META_KEY\', \'\' FROM {$wpdb->users} u "
    . " LEFT JOIN {$wpdb->usermeta} um ON um.user_id = u.ID AND um.meta_key=\'YOUR_META_KEY\' "
    . " WHERE um.umeta_id IS NULL";
$result = $wpdb->query( $sql_query );
上述代码应运行一次。

Example:
功能。php

add_action( \'init\', \'se338136_add_meta_to_existing_users\' );
function se338136_add_meta_to_existing_users() {
    $option_meta_name = \'_my_meta_added\';
    $executed = get_option( $option_meta_name, false );
    if ( $executed == 1 )
        return;

    // here one of the above codes

    // if ($result !== false )
    update_option( $option_meta_name, 1 );
}
添加新用户时添加自定义字段
add_filter( \'insert_user_meta\', \'new_user_meta\', 20, 3);

/**
 * @param array   $meta   Default meta values and keys for the user.
 * @param WP_User $user   User object.
 * @param bool    $update Whether the user is being updated rather than created.
 */
function new_user_meta( $meta, $user, $update ) 
{
    if ( $update )
        return $meta;

    $meta[\'YOUR_META_KEY\'] = false;
    return $meta;
}
<小时>References:

相关推荐

如何在执行了钩子“preGet_USERS”之后获得所有的用户列表?

我在管理用户仪表板中有一个名为“用户类型”的自定义过滤器,我已经解决了在用户管理仪表板中显示它们的问题。但我不知道如何调用它们并将其保存在数组中,以便获取user\\u id并执行另一个操作。我的另一个操作是获取某个用户的所有元键,并将它们导出到excel文件中。但在我可以这样做之前,我应该有一个选项来过滤它们或只是导出所有用户,我已经执行了这项操作。function add_course_section_filter() { if ( isset( $_GET[ \'user_type\