CODYSHOP
темы и плагины для WordpressДля борьбы с опечатками на сайте, владельцы часто прибегают к сторонним сервисам, позволяющим пользователям отправлять уведомления об ошибках администратору сайта. Что и говорить, популярный некогда сервис Orphus был установлен более чем на 10 тысяч сайтов.
Однако, данный сервис уже давно не развивается. Поэтому, несмотря на хорошую идею, владельцы сайтов стремятся найти альтернативу, и получить более гибкую систему. Один из таких замен – плагин Mistape. Давайте сегодня попробуем реализовать подобный функционал, но не прибегая к сторонним разработкам, и не в ущерб производительности и скорости сайта.
Шаг 1: Создаем модальное окно вывода контактной формы
В отличие от обычных контактных форм, в нашей форме мы разместим только поле для комментария (сделаем его не обязательным) и кнопку отправить.
<div id="orphus-modal" class="orphus-modal"> <div class="orphus-box"> <h3>Отправьте сообщение об ошибке, мы исправим</h3> <div class="orphus-text"></div> <input class="orphus-comment" type="text" placeholder="Комментарий для автора (не обязательно)" /> <span class="orphus-submit">Отправить</span> <span class="orphus-close" title="Закрыть"></span> </div> </div>
Кроме того, мы подготовили блок <div class=”orphus-text”></div> для вывода в нем текста с опечатками.
Хочется отметить, что если вы хорошо знакомы с CSS, вам не составит особого труда красиво оформить форму. Впрочем, основу для оформления, можно посмотреть в последнем шаге.
Шаг 2: пишем скрипт, для отлавливания события Ctrl+Enter
Важная особенность скрипта – всю работу мы производим без перезагрузки страницы, что очень удобно для пользователя.
jQuery(function($){
// отлавливаем событие нажатия ctrl + enter
$('body').keydown(function(e) {
if (e.ctrlKey && e.keyCode == 13) {
// как только пользователь нажимает заветные Ctrl+Enter, показываем модальное окно
$('#orphus-modal').addClass('showing');
if (window.getSelection) {
text = window.getSelection();
}else if (document.getSelection) {
text = document.getSelection();
}else if (document.selection) {
text = document.selection.createRange().text;
}
// вставляем выделенный текст в подготовленное поле
$('.orphus-text').text(text);
$('.orphus-submit').show();
$('.orphus-comment').show();
}
});
// закрываем модальное окно
$('.orphus-close').click(function(){
$('#orphus-modal').removeClass('showing');
});
// обрабатываем событие отправки сообщения об опечатке на ajax
$('.orphus-submit').click(function(){
$('.orphus-submit').text('Работаем...');
var error = $('.orphus-text').text(); // текст ошибки
var comment = $('.orphus-comment').val(); // комментарий пользователя
var url = window.location.href; // уведомляем, с какой страницы отправлен запрос
var data = {
'action' : 'orphus',
'error' : error,
'url' : url,
'comment': comment,
};
$.ajax({
type: 'POST',
url: '/wp-admin/admin-ajax.php',
data: data,
success: function(data) {
$('.orphus-text').html('<span class="good">Ваше сообщение успешно отправлено<span>');
$('.orphus-submit').hide();
$('.orphus-comment').hide();
}
});
});
});Если пользователь выделит текст и нажмет на Ctrl+Enter, появится модальное окно (если конечно вы еще выполните шаг 4).

Шаг 3: отправляем сообщение на почту администратора
// отправка опечаток администратору
function codyshop_orphus(){
$comment = $_POST['comment'];
$error = $_POST['error'];
$url = $_POST['url'];
$mail_text = '<b>Орфографическая ошибка найдена в тексте:</b><br>' . $error . '<br><br><b>Текст комментария:</b><br>' . $comment . '<br><br><b>Адрес страницы:</b><br>' . $url . '<br><hr><br>Это письмо было сгенерировано роботом. Пожалуйста, не отвечайте на него.';
$mail = get_bloginfo('admin_email');
add_filter('wp_mail_content_type', create_function('', 'return "text/html";'));
wp_mail( $mail, 'Найдена орфографическая ошибка', $mail_text );
}
add_action('wp_ajax_nopriv_orphus','codyshop_orphus');
add_action('wp_ajax_orphus','codyshop_orphus');Пропустим наше письмо через фильтр wp_mail_content_type, чтобы установить тип письма в формате HTML. Разместите код выше в файле function.php
Шаг 4: оформляем модальное окно
Делаем форму красивой.
/* Стили для модального окна */
.orphus-modal{
display: none;
position:fixed;
top:0;
left:0;
right:0;
bottom:0;
background:rgba(0,0,0,.5);
z-index:9999;
}
.orphus-modal .orphus-box{
width:450px;
background:#fff;
position:relative;
margin:9% auto;
padding:30px;
display: table;
}
.orphus-modal h3{
font-size:23px;
margin: 10px 0;
}
.orphus-modal span{
cursor: pointer;
position:absolute;
right:0;
top:0;
}
.orphus-modal .good{
position: relative;
}
.orphus-modal .orphus-close:after{
border-radius: 3px;
content:'×';
display:block;
position:absolute;
right:-9px;
top:-9px;
width:27px;
padding:1px;
text-decoration:none;
text-shadow:none;
text-align:center;
font-weight:bold;
background: #fd3768;
color:#fff;
}
.orphus-modal .orphus-text {
margin: 10px 0;
width: 100%;
display: inline-block;
position: relative;
}
.orphus-modal .orphus-submit{
float:left;
margin-top: 10px;
border-radius: 3px;
position:relative;
text-align: center;
padding: 15px 25px;
color: #fff;
background-color: #fd3768;
width: 100%;
box-sizing: border-box;
}
.orphus-modal .orphus-comment {
padding: 10px;
}
.showing {
display: block !important;
}На этом наш пост я завершаю. Осталось только разместить подходящий виджет на сайте, чтобы пользователи знали о возможности исправления опечаток. Если у вас есть какие-либо предложения по улучшению, пишите в комментариях!
Большое спасибо!
Огромное спасибо! Жалко, что сайт заброшенный
Если возможно, то подскажите в каких файлах делать исправления.
На новых PHP может не работат.
Решение:
вместо этого add_filter(‘wp_mail_content_type’, create_function(”, ‘return “text/html”;’));
вот это add_filter(‘wp_mail_content_type’, function () { return ‘text/html’; });