regenerate_token( $user_id ); } /** * Replace the feed token for a user and return the new one. * * @param int $user_id WordPress user ID. * @return string New 32-character alphanumeric token. */ public function regenerate_token( int $user_id ): string { $token = wp_generate_password( self::TOKEN_LENGTH, false, false ); update_user_meta( $user_id, self::META_KEY, $token ); return $token; } /** * Look up the user ID for a given feed token. * * @param string $token Feed token to look up. * @return int|null User ID if found, null otherwise. */ public function get_user_id_by_token( string $token ): ?int { if ( strlen( $token ) !== self::TOKEN_LENGTH ) { return null; } /** @var array $users */ $users = get_users( [ 'meta_key' => self::META_KEY, 'meta_value' => $token, 'number' => 1, 'fields' => 'ID', ] ); if ( empty( $users ) ) { return null; } $id = reset( $users ); return is_numeric( $id ) ? (int) $id : null; } /** * Delete the feed token for a user. * * @param int $user_id WordPress user ID. */ public function delete_token( int $user_id ): void { delete_user_meta( $user_id, self::META_KEY ); } }