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.
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.