Вопрос или проблема
У меня есть собственный тип записи под названием “documents”. Я могу добавлять документы (поле повторителя ACF) туда, и пользователи могут видеть их в интерфейсе. Теперь мне нужно отправлять уведомление по электронной почте автору поста, когда я изменяю этот тип записи в бекенде и сохраняю его.
В другом проекте я работал с следующей функцией в файле functions.php, но этот код работает только при создании нового поста. Мне не нужно отправлять письма при создании нового поста, но нужно, когда я сохранил его снова.
/* ОТПРАВКА ПОЧТЫ ПРИ СОЗДАНИИ CPT ПРОДУКЦИОННОГО ЗАКАЗА */
add_action('future_to_publish', 'send_emails_on_new_event');
add_action('new_to_publish', 'send_emails_on_new_event');
add_action('draft_to_publish' ,'send_emails_on_new_event');
add_action('auto-draft_to_publish' ,'send_emails_on_new_event');
function send_emails_on_new_event($post) {
$emails = "[email protected]";
$headers="From: Name <[email protected]>";
$title = wp_strip_all_tags(get_the_title($post->ID));
$message = "New post created";
if(get_post_type($post->ID) === 'documents') {
wp_mail($emails, "New Post", $message, $headers);
}
}
Попробуйте так:
function send_emails_on_new_event( $post ) {
$emails="[email protected]";
$headers="From: Name <[email protected]>";
$title = wp_strip_all_tags( get_the_title( $post->ID ) );
$message="New post created";
if ( get_post_type( $post->ID ) === 'documents' ) {
wp_mail( $emails, 'New Post', $message, $headers );
}
}
add_action( 'pre_post_update', 'send_emails_on_new_event' );
Из справочника по коду:
pre_post_update: Срабатывает непосредственно перед обновлением существующего поста в базе данных.
.
Ответ или решение
Когда вы работаете с пользовательскими типами записей в WordPress и хотите отправлять уведомления по электронной почте при их сохранении, а не только при создании, нужно учитывать несколько ключевых аспектов. В данном случае у вас есть пользовательский тип записи "documents". Ваша цель — отправка уведомлений по электронной почте автору записи каждый раз, когда происходит сохранение изменений в админ-панели.
Постановка задачи
- Отправка уведомления по электронной почте: Вам нужно отправить электронное письмо автору записи всякий раз, когда вы сохраняете запись пользовательского типа "documents".
- Не только при создании: Этот функционал нужен при изменении существующих записей, а не только при их создании.
- Использование ACF: Вероятно, в вашей установке применяется Advanced Custom Fields (ACF) для управления данными.
Решение
Шаги разработки
-
Создание функции отправки: Функция должна отправлять письмо автору соответствующего поста.
-
Использование правильного хука: Нужный хук для вашей задачи —
save_post
. Он срабатывает каждый раз при сохранении записи, включая обновление существующих записей. -
Проверка типа записи: Убедитесь, что функция запускается только для "documents".
Пример реализации
function send_email_on_document_update($post_id, $post, $update) {
// Проверка, чтобы не запускать функцию на автосохранения
if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) return;
// Убедиться, что это нужный тип записи
if (get_post_type($post_id) !== 'documents') return;
// Получаем автора записи
$author_id = $post->post_author;
$author_email = get_the_author_meta('user_email', $author_id);
// Устанавливаем тему и сообщение
$subject = 'Изменения в документе';
$message = 'Ваш документ "' . get_the_title($post_id) . '" был обновлён.';
// Подготавливаем заголовки
$headers = array('Content-Type: text/html; charset=UTF-8');
// Отправляем письмо
wp_mail($author_email, $subject, $message, $headers);
}
// Подключение функции к нужному хуку
add_action('save_post', 'send_email_on_document_update', 10, 3);
Важные моменты
- Безопасность данных: Убедитесь, что никакая персональная информация не передается без надлежащей проверки.
- Эффективность: Функция избегает автосохранений и ревизий, что уменьшает ненужную нагрузку на сервер.
- Нацеленность: Убедитесь, что корректно захватывается тип записи "documents".
Поисковая оптимизация
В дополнение к написанию качественного кода, важно также уделять внимание организации и описанию функций, чтобы они были легко понятными и содержали релевантные комментарии. Это не только улучшает вашу собственную работу, но и способствует пониманию кода другими разработчиками.
Придерживаясь вышеуказанных принципов, вы сможете легко внедрить функционал отправки уведомлений по электронной почте при каждом сохранении пользовательских типов записей в WordPress.