我创建了一个功能,可以自动将具有参与者角色的用户添加到一个列表中,在该列表中,他们将通过电子邮件接收论坛(修改后的mingleforum插件)更新。我的问题是,“is\\u player\\u subscribed()”函数调用的函数似乎工作不正常,因为它每次用户注册时都会有效地添加整个列表。
add_action( \'user_register\', \'call_forum_subscribe_member_player\' );
function forum_subscribe_member_player()
{
$players= get_users();
foreach($players as $player)
{
$user_info = get_userdata($player->ID);
$playeremail = $user_info->user_email;
if(!empty($playeremail) && user_can( $player-> ID, \'contributor\'))
{
$list = (array)get_option(\'mf_forum_subscribers_1\');
if( is_player_subscribed($player->ID)) //remove player if already exists (user clicked unsubscribe)
{
$key = array_search($playeremail, $list);
unset($list[$key]);
}
else
$list[] = $playeremail;
update_option(\'mf_forum_subscribers_1\', $list);
}
}
}
function is_player_subscribed($user_ID)
{
if($user_ID)
{
$useremail = get_userdata($user_ID, \'user_email\');
$list = (array)get_option(\'mf_forum_subscribers_1\');
if(!empty($list) && in_array($useremail, $list))
{
return true;
}
return false;
}
}
function call_forum_subscribe_member_player()
{
forum_subscribe_member_player();
}
我试图确定为什么它似乎忽略了第二个函数,并猜测它与
$user_ID
参数我将非常感谢更有经验的眼睛看看。
我应该注意到,该函数是从插件中的函数改编而来的,插件中的函数也修改了相同的选项。如果有人好奇或需要更多信息来回答问题,我会将gist中使用的类和修改后的代码放在一个单独的文件中:gist
编辑:var dump$list after$list = (array)get_option(\'mf_forum_subscribers_1\');
给我:
array(1) { [0]=> string(2) " " }
array(2) { [0]=> string(2) " "
[1]=> string(13) "[email protected]" }
array(3) { [0]=> string(2) " "
[1]=> string(13) "[email protected]"
[2]=> string(15) "[email protected]" }
array(4) { [0]=> string(2) " "
[1]=> string(13) "[email protected]"
[2]=> string(15) "[email protected]"
[3]=> string(15) "[email protected]" }
等等等等。。。当我进去看的时候
wp_options
我明白了
a:41:{i:0;s:2:
这与贡献者的数量加上一个相吻合。
最合适的回答,由SO网友:s_ha_dum 整理而成
如果你把你的$player
你会看到这个问题:
object(WP_User)#126 (7) {
["data"]=>
object(stdClass)#129 (10) {
["ID"]=>
string(1) "9"
["user_login"]=>
string(3) "abc"
["user_pass"]=>
string(34) "$P$BmwzlhY1xP6JTBlbWzLPetkx8lB.Zo/"
["user_nicename"]=>
string(3) "abc"
["user_email"]=>
string(19) "[email protected]"
["user_url"]=>
string(0) ""
["user_registered"]=>
string(19) "2013-10-04 09:22:08"
["user_activation_key"]=>
string(0) ""
["user_status"]=>
string(1) "0"
["display_name"]=>
string(3) "abc"
}
["ID"]=>
int(9)
// removed some unnecessary information
}
ID冗余保存在该对象的第一级,但电子邮件地址不是。它在
$player->data->user_email
. 您访问变量数据不正确。
get_userdata
为您提供与现有数据完全相同的数据--请尝试--这样代码是浪费的。只需使用$player
数据