Subscription list function

时间:2013-10-06 作者:mantis

我创建了一个功能,可以自动将具有参与者角色的用户添加到一个列表中,在该列表中,他们将通过电子邮件接收论坛(修改后的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: 这与贡献者的数量加上一个相吻合。

1 个回复
最合适的回答,由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 数据

结束

相关推荐

在wp_Options的一个设置字段中可以存储的选项数量是否有限制?

我有一个带有选项页的主题。在这一页上有1083个选项。我注意到最后13个没有保存。它们一度保存了,但在我添加了新选项之后,它们停止了工作。我怀疑我可能遇到了某种选项限制或阵列上的限制,为了测试这一点,我删除了最后13个选项上方的7个选项,并确保在这之后保存了足够多的7个选项。我一直在试图找到有关这方面的信息,但一直无法找到。是否有人知道您在一个设置字段中只能有1070个选项?这不是数据库长文本内存限制的问题。这些是简单的1和0以及十六进制颜色值和其他CSS类型的内容。该字段的输出量仅为33k。