Отправлять письмо автору при сохранении пользовательского типа записи.

Вопрос или проблема

У меня есть собственный тип записи под названием “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". Ваша цель — отправка уведомлений по электронной почте автору записи каждый раз, когда происходит сохранение изменений в админ-панели.

Постановка задачи

  1. Отправка уведомления по электронной почте: Вам нужно отправить электронное письмо автору записи всякий раз, когда вы сохраняете запись пользовательского типа "documents".
  2. Не только при создании: Этот функционал нужен при изменении существующих записей, а не только при их создании.
  3. Использование ACF: Вероятно, в вашей установке применяется Advanced Custom Fields (ACF) для управления данными.

Решение

Шаги разработки

  1. Создание функции отправки: Функция должна отправлять письмо автору соответствующего поста.

  2. Использование правильного хука: Нужный хук для вашей задачи — save_post. Он срабатывает каждый раз при сохранении записи, включая обновление существующих записей.

  3. Проверка типа записи: Убедитесь, что функция запускается только для "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.

Оцените материал
Добавить комментарий

Капча загружается...