PHP中的用户元查询结果通知:只应通过引用传递变量

时间:2018-12-07 作者:butlerblog

我正在使用URL重写将用户的显示名称放入URL以显示用户配置文件。这部分工作正常,正确的值通过query\\u vars传递,我可以得到正确的用户。

由于这是针对插件的,一些插件用户可能希望使用用户的名字/姓氏,而不是显示名称。我为他们提供了一个这样做的机会,即名字/姓氏用下划线(\\ux)分隔。

为了在URL重写传递query\\u var“display\\u name”时检索用户,我在中使用了一个元查询get_users().

// Get the custom query_var value.
$query_var = get_query_var( \'display_name\' );

/**
 * When the display_name query_var is first name/last name,
 * (for example "john_smith"), split the value by unscore 
 * to get the individual first and last name values.
 */
$pieces = explode( \'_\', $query_var );

// User meta query to get the user ID by first_name/last_name.
$user = reset( get_users( array(
    \'meta_query\'  => array(
        \'relation\' => \'AND\',
        array(
            \'key\'=>\'first_name\',
            \'value\' => $pieces[0],
            \'compare\' => \'=\'
        ),
        array(
            \'key\' => \'last_name\',
            \'value\' => $pieces[1],
            \'compare\' => \'=\'
        )
    ),
    \'number\' => 1,
    \'count_total\' => false
) ) );
元查询工作正常,并返回正确的用户ID,but 我收到如下PHP通知:

注意:只能通过引用传递变量

指示的行是元查询行$user = reset( get_users( array(

有没有想过什么地方出了问题,是不是在抛出PHP通知?有没有更好的查询方法可以通过名字/姓氏元键获取用户ID?

2 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

传递给的值reset()passed by reference, 这意味着从技术上讲,它会修改传递给它的原始变量。为此,您需要传递一个变量,而不是返回值的函数。

reset() 倒带array\'s 指向第一个元素的内部指针,并返回第一个数组元素的值。

如果出现以下情况,只需分配返回值get_users() 到变量,然后使用reset() 在以下情况下:

$users = get_users( array(
    \'meta_query\'  => array(
        \'relation\' => \'AND\',
        array(
            \'key\'=>\'first_name\',
            \'value\' => $pieces[0],
            \'compare\' => \'=\'
        ),
        array(
            \'key\' => \'last_name\',
            \'value\' => $pieces[1],
            \'compare\' => \'=\'
        )
    ),
    \'number\' => 1,
    \'count_total\' => false
) );

$user = reset( $users );

SO网友:kero

$user = reset( get_users( array(
功能reset() 更改传递的变量,因此需要引用。功能输出get_users() 无法引用,因为它不是变量。只需将返回值赋给变量并调用:

$users = get_users( array(
    //...
) );
$user = reset( $users );