我正在使用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?
最合适的回答,由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 );