Abonnementlistenfunktion

Ich habe eine function erstellt, die automatisch Benutzer mit der Rolle des Beitragsleisters zu einer Liste hinzufügt, in der sie Updates des Forums (modifiziertes Mingleforum-Plugin) per E-Mail erhalten. Mein Problem ist, dass die function, die von der function `is_player_subscribe () ‘aufgerufen wird, nicht richtig zu funktionieren scheint, da sie die gesamte Liste bei jeder Benutzerregistrierung effektiv hinzufügt.

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(); } 

Ich versuche $user_ID , warum es scheint, die zweite function zu ignorieren und ich vermute, dass es etwas mit dem Parameter $user_ID zu tun hat. Ich würde erfahrenere Augen sehr schätzen.

Ich sollte beachten, dass die function von der im Plugin angepasst wird, die auch die gleiche Option ändert. Ich lege die verwendete class mit dem modifizierten Code in eine separate Datei, wenn jemand neugierig ist oder mehr Informationen benötigt, um die Frage zu beantworten: gist

Bearbeiten: var dump $ list nach $list = (array)get_option('mf_forum_subscribers_1'); gibt mir:

 array(1) { [0]=> string(2) " " } array(2) { [0]=> string(2) " " [1]=> string(13) "name@name.com" } array(3) { [0]=> string(2) " " [1]=> string(13) "name@name.com" [2]=> string(15) "name2@name2.com" } array(4) { [0]=> string(2) " " [1]=> string(13) "name@name.com" [2]=> string(15) "name2@name2.com" [3]=> string(15) "name3@name3.com" } 

usw. etc … Wenn ich in wp_options nachschaue, wp_options ich a:41:{i:0;s:2: was mit der Anzahl der Mitwirkenden plus eins übereinstimmt.

Solutions Collecting From Web of "Abonnementlistenfunktion"

Wenn Sie einen Ihrer $player s abgeworfen hätten, hätten Sie das Problem gesehen:

 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) "abc@somesite.com" ["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 } 

Die ID wird in der ersten Ebene dieses Objekts redundant gespeichert, die E-Mail-Adresse jedoch nicht. Es ist in $player->data->user_email . Sie greifen falsch auf die variablen Daten zu.

get_userdata gibt Ihnen genau die gleichen Daten, die Sie bereits haben– versuchen Sie es–, so dass Code verschwenderisch ist. Benutze einfach die $player Daten.