通过元密钥获取用户-WP多站点

时间:2019-07-06 作者:gdfgdfg

我正在尝试通过以下方式获取用户metakey:

        $user = get_users( array (
            \'meta_key\'     => \'token\',
            \'meta_value\'   => $token,
            \'orderby\'      => \'meta_value\',
            \'order\'        => \'DESC\',
            \'number\'       => \'10\',
        ) );
这将返回空数组,但有一个用户具有该元键值。

    $user = reset(
            get_users(
                array(
                    \'meta_key\' => \'token\',
                    \'meta_value\' => $token,
                    \'number\' => 1,
                    \'count_total\' => false
                )
            )
        );
此返回false 附通知:

在中只能通过引用传递变量

,但仍然有一个用户具有该meta的值。

我只需要按metavalue从当前博客中选择一个用户(检查是否存在)。WordPress网络中的用户,该用户未附加到当前博客。

1 个回复
SO网友:Tom J Nowell

这就是问题所在:

$user = reset(
        get_users(
reset 需要对数组的引用,并且没有用于错误检查的机制。因此,即使它找到了用户,您也在误用返回值。

可能可以调整它以正确使用引用,但PHP中的引用是最好避免的,并且有更好的选项可以在PHP中获取数组中的第一项。

这将更好地工作,并提供检查错误值或空数组的机会:

$users = get_users(... );
$user = reset( $users );
这会更好,因为它不会修改阵列,而且运行时间为O(1)次,因此无论阵列有多大,成本都是相同的:

$users = get_users(...);
$user = array_pop(array_reverse($users));
这个也适用于PHP 5.4+:

$users = get_users(...);
$user = array_values($users)[0];
所有这些,包括您现在拥有的,都需要您这样做:

if ( empty( $users ) ) {
    // nothing was found, print an error message and abort
}

相关推荐

如何在新用户注册时将wp_USERS->用户登录名插入到wp_Terms中?

当新用户注册时,我需要将wp\\u users->user\\u login字段插入wp\\u terms name和slug字段。我的要求是管理员需要将帖子分配给特定用户,也就是说管理员需要向user1添加帖子,但user2不应该看到这一点。为此,我创建了一个自定义帖子,并为此添加了分类法。术语是用户用户名。因此,我需要在分类法中将用户的用户名作为术语列出。当一个新用户注册时,他的用户名也应该在wp\\u terms表中更新,所以我将用户名作为terms。我在这里绊倒了。请对此提出一些解决方案