Intereting Posts
get_theme_mod (); ничего не возвращает Активировать короткие коды для всех почтовых запросов? Невозможно получить предстоящие события для пользовательских сообщений Как отображать пользовательские изображения таксономии на index.php? Как я могу легко добавить код в тег <body> без использования перехватчиков? как получить имя тега из идентификатора тега? Как добавить прикрепление изображения к сообщению из одного мета-ключа (Woocommerce) Почему я не могу добавить собственный тип сообщения в пользовательскую таксономию? Как удалить выделенные изображения из сообщений Показать категорию и описание программно изменить href на onclick = window.open Может ли страница содержать php-код? Установить главную страницу, чтобы отображать сообщения только из одного тега Почему не работает wp_enqueue_script («jquery-masonry»)? Создание связей между несколькими типами контента

Функция списка подписки

Я создал функцию, которая автоматически добавляет пользователей с ролью вкладчика в список, в котором они будут получать обновления форума (измененного mingleforum) по электронной почте. Моя проблема в том, что функция, вызываемая функцией `is_player_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

Изменить: var dump $ list после $list = (array)get_option('mf_forum_subscribers_1'); дает мне:

 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" } 

и т. д. и т. д. Когда я смотрю в wp_options я получаю a:41:{i:0;s:2: это совпадает с количеством участников плюс один.

Solutions Collecting From Web of "Функция списка подписки"

Если бы вы сбросили один из ваших $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) "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 } 

Идентификатор сохраняется избыточно на первом уровне этого объекта, но адрес электронной почты не указан. Он находится в $player->data->user_email . Вы неправильно используете переменные данные.

get_userdata дает вам точно такие же данные, которые у вас уже есть – попробуйте – так что код расточительный. Просто используйте данные $player .