С помощью действий и фильтров WordPress эта CMS становится очень расширяемым фреймворком для работы. Другой же способ расширения WordPress — с помощью подключаемых функций, которые позволяют вам перезаписывать основные функции ядра в WordPress любым кодом по вашему желанию. Подключаемые функции могут быть добавлены в файл functions.php либо в ваши собственные плагины для реализации нового функционала для уже существующих функций, используемых в WordPress.
Файл подключаемых функций расположен в /wp-includes/pluggable.php и содержит следующие функции для перехватывания:
- Получение информации о пользователе.
- Отправка email
- Аутентификация в административной панели WordPress.
- Разлогинивание пользователя
- Валидация информации в куки
- Редиректы после логина
- Email уведомления администратору и авторам
- Хеширование паролей
В этой статье мы будем исследовать письма, которые WordPress отправляет авторам, администраторам и зарегистрированным пользователям. Мы выясним какие функции необходимо перезаписать для того, чтобы изменить письма, которые WordPress отправляет пользователям. Эти данные вы можете использовать для «брендирования» писем зарегистрированным пользователям от вашего сайта или для добавления любой дополнительной информации, необходимой вам, в письма.
Для отправки email с помощью WordPress вам нужно использовать встроенную функцию wp_mail(), которая является «оберткой» для функции php mail(), однако позволяет использовать фильтры WordPress для изменения контента, возвращаемого всеми письмами, отправляемыми вашим сайтом.
WordPress Mail
Уведомление о новом пользователе
Когда новый пользователь регистрируется на вашем сайте, администратору отправляется уведомление об этом событии. Функция также отправляет письмо и новому пользователю с указанием его имени пользователя, новым сгенерированным паролем и ссылку на страницу входа для облегчения логина на сайт.
Однако что, если вы не хотите, чтобы пользователь получал емейл с информацией для входа, или же вы хотите сначала уведомить администратора о регистрации, прежде чем пользователь получит пароль, или существует любая другая причина настройки процесса под себя, в любом случае вам придется изменить эту функцию.
В виду того, что это подключаемая функция и она обернута в if function_exists, мы можем ее перезаписать в плагине или в файле functions.php. Для перезаписи этой функции создаем новый плагин и добавляем функцию wp_new_user_notification($user_id, $plaintext_pass = »), что перезапишет стандартную функцию WordPress, поэтому с кодом можно делать все что угодно и модифицировать его под свои нужды.
function wp_new_user_notification($user_id, $plaintext_pass = '') { // Добавляем свой код для кастомизации сообщения }
Для того, чтобы добавить сообщения в письмо для пользователя и изменить ссылку на страницу входа, можно использовать следующую функцию:
function wp_new_user_notification($user_id, $plaintext_pass = '') { $user = get_userdata( $user_id ); // Название сайта получаем с помощью esc_html из базы данных $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES); $message = sprintf(__('Регистрация нового пользователя на вашем сайте %s:'), $blogname) . "rnrn"; $message .= sprintf(__('Имя пользователя: %s'), $user->user_login) . "rnrn"; $message .= sprintf(__('E-mail: %s'), $user->user_email) . "rn"; @wp_mail(get_option('admin_email'), sprintf(__('[%s] Регистрация нового пользователя'), $blogname), $message); if ( empty($plaintext_pass) ) return; $message = sprintf(__('Имя пользователя: %s'), $user->user_login) . "rn"; $message .= sprintf(__('Пароль: %s'), $plaintext_pass) . "rn"; $message .= 'Для входа в административную панель, пожалуйста, используйте следующий адрес ' . wp_login_url() . "rn"; wp_mail($user->user_email, sprintf(__('[%s] Ваше имя пользователя и пароль'), $blogname), $message); }
Изменяем письмо о новом комментарии
Когда пользователь оставляет комментарий к записи в WordPress, автору статьи приходит уведомление на email о том, что необходимо промодерировать комментарий. Эта другая подключаемая функция, которую можно перезаписать для того, чтобы модифицировать такое уведомление.
Эта функция также срабатывает для трекбеков, пингбеков и комментариев. Мы изменим поведение, чтобы уведомления приходили только для комментариев, а для трекбеков и пингбеков — не приходили.
Для перезаписи этой функции необходимо добавить следующий код:
function wp_notify_postauthor( $comment_id ) { // вводим новый код для писем, которые уведомляют автора записи }
Если вы хотите изменить письмо, которое отправляется модератору, когда появляется новый комментарий, тогда необходимо изменить функцию function wp_notify_moderator().
function wp_notify_moderator($comment_id) { // вводим новый код для писем, которые уведомляют модератора }
Изменяем письмо-уведомление при изменении пароля
Когда пользователь находится на странице входа и запрашивает сброс пароля, администратору отправляется email, уведомляющий какой пользователь сбрасывает свой пароль.
Если вы хотите изменить это письмо, добавив в него больше информации, вам необходимо перезаписать эту функцию:
Создайте новый плагин и добавьте в него функцию wp_password_change_notification().
function wp_password_change_notification( $user ) { }
Больше подключаемых функций
Для того, чтобы воспользоваться большим количеством встроенных в WordPress функций, доступных для изменения, изучите файл pluggable.php, расположеный в директории wp-includes/.
По всем вопросам и отзывам просьба писать в комментарии ниже.
Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.