Давайте добавим чекбокс в форму комментария к статьям на WordPress, чтобы если кто-то ответит на ваш комментарий, то Вы об этом получите уведомление.

Добавьте сниппет код:
// 1. обработчик отписки
add_action( 'init', function() {
if ( empty($_GET['avs_unsubscribe']) ) {
return;
}
$comment_id = absint($_GET['avs_unsubscribe']);
if ( !$comment_id ) {
return;
}
global $wpdb;
$table = 'wp_commentmeta'; // <-- Ваш реальный префикс таблицы!
$sql = $wpdb->prepare(
"DELETE FROM $table WHERE comment_id = %d AND meta_key = %s",
$comment_id,
'avs_notify_reply'
);
$wpdb->query($sql);
// Вместо редиректа просто выводим сообщение и стопаем выполнение WP дальше
wp_die(
'<div style="max-width:600px;margin:80px auto;padding:36px 24px 24px 24px;background:#fefff7;border:1px solid #e1e7cd;border-left:8px solid #89A316; border-radius:6px;">
<h2 style="color:#62750f;font-size:1.6em;margin:0 0 20px 0;text-align:left;">Вы успешно отписались от уведомлений на комментарий</h2>
<p style="color:#222;font-size:1.07em;margin:6px 0 0 0;">Уведомления об ответах на этот комментарий больше приходить не будут.</p>
<p style="margin-top:2em;"><a href="' . esc_url(home_url()) . '" style="color:#62750f;text-decoration:underline">Вернуться на главную</a></p>
</div>',
'Отписка от уведомлений',
array('response' => 200)
);
exit;
});
// 2. для отправителя
add_filter( 'wp_mail_from', function() { return 'info@wp-alexandra.store'; } );
add_filter( 'wp_mail_from_name', function() { return 'Лайфхаки WordPress'; } );
// 3. Чекбокс подписки
function avs_comment_notify_checkbox() {
$checked = '';
if ( isset( $_POST['avs_notify_reply'] ) && $_POST['avs_notify_reply'] ) {
$checked = ' checked="checked"';
}
echo '<p class="comment-form-notify">
<label>
<input type="checkbox" name="avs_notify_reply" value="1"' . $checked . ' />
' . esc_html__( 'Отправить мне письмо, если кто-то ответит на мой комментарий', 'avs' ) . '
</label>
</p>';
}
add_action( 'comment_form_after_fields', 'avs_comment_notify_checkbox' );
add_action( 'comment_form_logged_in_after', 'avs_comment_notify_checkbox' );
// 4. Сохранение/удаление meta при комментировании
function avs_save_comment_notify_meta( $comment_id, $comment_approved ) {
if ( isset( $_POST['avs_notify_reply'] ) && $_POST['avs_notify_reply'] ) {
update_comment_meta( $comment_id, 'avs_notify_reply', '1' );
} else {
delete_comment_meta( $comment_id, 'avs_notify_reply' );
}
}
add_action( 'comment_post', 'avs_save_comment_notify_meta', 10, 2 );
// 5. Отправка уведомления (только если meta=1 у родителя)
add_action( 'comment_post', 'avs_schedule_or_send_reply_notification', 20, 2 );
function avs_schedule_or_send_reply_notification( $comment_id, $comment_approved ) {
$comment = get_comment( $comment_id );
if ( ! $comment ) return;
$parent_id = (int) $comment->comment_parent;
if ( $parent_id <= 0 ) return;
$notify = get_comment_meta( $parent_id, 'avs_notify_reply', true );
if ( empty( $notify ) ) return;
$hook = 'avs_send_reply_notification_async';
$args = array( 'comment_id' => $comment_id );
if ( function_exists( 'as_next_scheduled_action' ) && function_exists( 'as_schedule_single_action' ) ) {
$existing = as_next_scheduled_action( $hook, $args, 'avs-comment-notify' );
if ( ! $existing ) as_schedule_single_action( time(), $hook, $args, 'avs-comment-notify' );
return;
}
avs_send_reply_notification_job( $args );
}
add_action( 'avs_send_reply_notification_async', 'avs_send_reply_notification_job' );
function avs_send_reply_notification_job( $args ) {
if ( is_array( $args ) && isset( $args['comment_id'] ) ) {
$comment_id = (int) $args['comment_id'];
} elseif ( is_numeric( $args ) ) {
$comment_id = (int) $args;
} else return;
$comment = get_comment( $comment_id );
if ( ! $comment ) return;
$parent_id = (int) $comment->comment_parent;
if ( $parent_id <= 0 ) return;
$parent_comment = get_comment( $parent_id );
if ( ! $parent_comment ) return;
$notify = get_comment_meta( $parent_id, 'avs_notify_reply', true );
if ( empty( $notify ) ) return;
$to = trim( $parent_comment->comment_author_email );
if ( empty( $to ) || ! is_email( $to ) ) return;
$new_author_email = trim( $comment->comment_author_email );
if ( $new_author_email && $new_author_email === $to ) return;
$comment_link = get_comment_link( $comment_id );
$post_id = $comment->comment_post_ID;
$subject = sprintf( __( 'Новый ответ на ваш комментарий: %s', 'avs' ), get_the_title( $post_id ) );
$site_name = wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES );
$message = '<p>' . sprintf( esc_html__( 'Здравствуйте, %s!', 'avs' ), esc_html( $parent_comment->comment_author ) ) . '</p>';
$message .= '<p>' . esc_html__( 'Кто-то ответил на ваш комментарий:', 'avs' ) . '</p>';
$excerpt = wp_trim_words( wp_strip_all_tags( $comment->comment_content ), 30, '...' );
$message .= '<blockquote style="border-left:3px solid #ddd;padding-left:10px;color:#333;">' . esc_html( $excerpt ) . '</blockquote>';
$message .= '<p><a href="' . esc_url( $comment_link ) . '">' . esc_html__( 'Перейти к ответу', 'avs' ) . '</a></p>';
$nonce = wp_create_nonce( 'avs_unsubscribe_' . $parent_id );
$unsubscribe_url = add_query_arg(
array(
'avs_unsubscribe' => $parent_id,
'avs_nonce' => $nonce,
),
get_permalink( $post_id )
);
$message .= '<p><small><a href="' . esc_url( $unsubscribe_url ) . '">' . esc_html__( 'Отписаться от уведомлений об ответах на этот комментарий', 'avs' ) . '</a></small></p>';
$message .= '<hr />';
$message .= '<p>' . sprintf( esc_html__( 'С уважением, %s', 'avs' ), esc_html( $site_name ) ) . '</p>';
$headers = array();
$headers[] = 'Content-Type: text/html; charset=' . get_option( 'blog_charset' );
if ( ! empty( $new_author_email ) && is_email( $new_author_email ) ) {
$headers[] = 'Reply-To: ' . wp_mail_utils_format_name_and_address( $comment->comment_author, $new_author_email );
} else {
$admin_email = get_bloginfo( 'admin_email' );
$headers[] = 'Reply-To: ' . wp_mail_utils_format_name_and_address( $site_name, $admin_email );
}
wp_mail( $to, wp_strip_all_tags( $subject ), $message, $headers );
}
// 6. Вспомогательная функция для оформления полей адреса в e-mail
if ( ! function_exists( 'wp_mail_utils_format_name_and_address' ) ) {
function wp_mail_utils_format_name_and_address( $name, $email ) {
$clean_name = trim( preg_replace( '/\s+/', ' ', strip_tags( $name ) ) );
$clean_email = sanitize_email( $email );
if ( $clean_name ) {
return sprintf( '%s <%s>', $clean_name, $clean_email );
}
return sprintf( '<%s>', $clean_email );
}
}
В сниппет коде ОБЯЗАТЕЛЬНО поменяйте wp_commentmeta на ваш префикс в таблице, но как правило он будет wp_commentmeta.
А также измените в пункте 2. отправителя. Как настроить почту смотрите здесь

Протестируйте отправку писем, если кто-то оставит ответ на комментарий. Письма будут приходить в таком виде:

Когда пользователь проходит по ссылки отписаться, то он попадает на страницу:

Также для формы комментария добавьте css для красоты:
/* Стили для чекбокса подписки на ответы */
selector .comment-form-notify {
margin-bottom:14px;font-size: 14px;}
selector .comment-form-notify label{display: flex;align-items: center;gap: 12px;cursor: pointer;font-size: 14px;}
selector .comment-form-notify input[type="checkbox"] {vertical-align: middle;}
.comment-form-notify input[type="checkbox"] {
appearance: none;
-webkit-appearance: none;
outline: none;
width: 18px;
height: 18px;
border: 2px solid #4E88DC;
border-radius: 6px;
background: #0D1117;
cursor: pointer;
position: relative;
vertical-align: top;}
.comment-form-notify input[type="checkbox"]:checked {
background: #4E88DC;}
.comment-form-notify input[type="checkbox"]:checked::after {content: '';
position: absolute;
left: 4px;
top: 1px;
width: 6px;
height: 10px;
border-right: 3px solid #fff;
border-bottom: 3px solid #fff;
transform: rotate(41deg);}Кстати! Не забудьте сделать древовидный вид комментариев в настройках wordpress.