Intereting Posts
Повторное использование header.php из приложения Yii Включение XSendFile вызывает 404 для изображений на WordPress Multisite / Network Как эхо-данные после WP_Query Как распределить таксономию категорий с настраиваемым типом сообщения (плагин Календарь событий) WP 3.1 meta_query для нескольких настраиваемых значений полей Количество почтовых сообщений категории день за днем WordPress CodeHighlighter Как отображать связанные записи из родительской категории Как добавить кнопку SAVE для замены PUBLISH на пользовательский тип сообщения? Вставить метаданные для всех сообщений в CPT сразу, если метаданных не существует Как передать массив Чтобы get_the_category_by_ID () и получить массив назад? Вставить в сообщение сообщение отсутствует для определенных изображений Запустить Google CDN jQuery в нижнем колонтитуле Восстановить исходную панель администратора WP после установки BuddyPress Создание нового блога с использованием PHP

Отправлять изменения для отправки адресов электронной почты (а не пользователей или подписчиков)

Что у меня есть

Я использую плагин « Календарь событий » на своем сайте для координации команды сотрудников. Я хочу иметь возможность отправлять автоматическую электронную почту, содержащую тело сообщения о событиях (post-type is not $post , но вместо $tribe_events ) каждый раз, когда он обновляется, но только для сотрудников, заинтересованных в этом сообщении.

Чтобы получить адреса электронной почты, я установил мета-поле в $tribe_events post-type $tribe_events в качестве плагина, основанного на том, что я нашел онлайн для добавления кнопок социальных сетей, и он отлично работает:

 add_action( 'add_meta_boxes', 'add_custom_box' ); function add_custom_box( $tribe_events ) { add_meta_box( 'animateurs', // ID, should be a string. 'Animateurs', // Meta Box Title. 'social_services', // Your call back function, this is where your form field will go. 'tribe_events', // The post type you want this to show up on, can be post, page, or custom post type. 'side', // The placement of your meta box, can be normal or side. 'core' // The priority in which this will be displayed. ); } function social_services( $tribe_events ) { // Get post meta value using the key from our save function in the second paramater. $custom = get_post_meta($tribe_events->ID, '_social_services', true); ?> <input type="checkbox" id="anim_patrick" name="social_services[]" value="patrick@example.com" <?php echo (in_array('patrick@example.com', $custom)) ? 'checked="checked"' : ''; ?>> <label for="anim_patrick"></label>Patrick<br> <input type="checkbox" id="anim_jeff" name="social_services[]" value="jeff@example.com" <?php echo (in_array('jeff@example.com', $custom)) ? 'checked="checked"' : ''; ?>> <label for="anim_jeff"></label>Jeff<br> <?php } function save_extra_fields(){ global $post; if(isset( $_POST['social_services'] )) { $custom = $_POST['social_services']; $old_meta = get_post_meta($post->ID, '_social_services', true); // Update post meta if(!empty($old_meta)){ update_post_meta($post->ID, '_social_services', $custom); } else { add_post_meta($post->ID, '_social_services', $custom, true); } } // update_post_meta($post->ID, "producers", $_POST["producers"]); } add_action( 'save_post', 'save_extra_fields' ); 

Результат

Что добавленный выше код добавляет редактору

Это успешно сохраняет адреса электронной почты соответствующих сотрудников по почте.

Я могу использовать этот код, чтобы показать массив этих адресов электронной почты (на странице – не то, что я хочу сделать. Это просто показать, как получить адреса электронной почты из массива):

 <?php $meta = get_post_meta($post->ID, '_social_services', true); $anims = implode (", ", $meta); echo $anims; ?> 

Что мне нужно

Теперь я просто застрял в последней части, чтобы отправить электронное письмо, содержащее новый обновленный контент, на адреса электронной почты, содержащиеся в $anims каждый раз, когда $tribe_events post-type $tribe_events .

Как я могу это достичь?

PS: Я – нуб на PHP. Это моя первая попытка в чем-то подобном.

Solutions Collecting From Web of "Отправлять изменения для отправки адресов электронной почты (а не пользователей или подписчиков)"

Вы почти там. Вам просто нужно использовать wp_mail для отправки писем, содержащихся в вашем массиве.

Вот как вы можете добиться этого, используя save_post action hook.

 /** * To send email on updating your event post * * @param int $post_id The post ID. * @param post $post The post object. * @param bool $update Whether this is an existing post being updated or not. */ function send_email_on_event_update( $post_id, $post, $update ) { $post_type = 'tribe_events'; // your post type // If this isn't a 'tribe_events' post, No need to send emails if ( $post_type != $post->post_type ) { return; } // - Now to Send emails // first get array of your emails $all_emails = get_post_meta($post_id , '_social_services', true); // this is suppose to be variable containing array of emails $post_title = get_the_title( $post_id ); $post_url = get_permalink( $post_id ); $subject = $post_title; $message = "This event has been updated:\n\n"; $message .= $post_title . ": " . $post_url; $message .= "keep adding what ever you want to send in this email..."; // Send email to $all_emails. wp_mail( $all_emails, $subject, $message ); } // have kept the priority to 11 to make sure we get the content for email after every thing is saved add_action( 'save_post', 'send_email_on_event_update', 11, 3 ); 

Пока не проверяйте этот код. Но я уверен, что это сработает для вас.