Как AJAX-ify ваши комментарии WordPress

  • Michael Cain
  • 0
  • 1241
  • 358
Реклама

По умолчанию система комментирования WordPress крайне неадекватна - одним из моих самых больших возражений является то, что для публикации комментария необходимо обновить страницу. Вы можете переключиться на стороннюю систему, такую ​​как Livefyre или Disqus 3 Способа поощрять комментарии к своему Wordpress Блогу 3 Способа поощрять комментарии к своему Wordpress Блогу Получение комментариев к вашему блогу является отличным стимулом для продолжения вашей продолжительной работы. блогами. Просто зная, что кто-то там, ценит вашу работу, чувствует себя прекрасно, но не…, но если вы предпочитаете держать все в доме или делать какую-то другую настройку, то публикация комментариев AJAX - это минимум, что вам следует.

Вы можете увидеть пример этой работы здесь на MakeUseOf - Когда вы публикуете комментарий, вы не покидаете страницу - вместо этого мы отправим его через AJAX-вызов, а затем отправим быстрый “благодарю вас” обратите внимание. Читайте дальше для полного урока.

Для использования не-WordPress функций в качестве AJAX, пожалуйста, прочитайте мой предыдущий учебник. Учебник по использованию AJAX в WordPress Учебник по использованию AJAX в WordPress. AJAX - замечательная веб-технология, которая вывела нас за рамки простого “нажмите на ссылку, перейдите на другую страницу” Структура Интернета 1.0. Он позволяет веб-сайтам динамически извлекать и отображать контент без участия пользователя… и обязательно ознакомьтесь со всеми статьями, связанными с WordPress..

Вступление

Есть две отдельные части, необходимые для работы комментариев AJAX WordPress, поэтому давайте сначала объясним их, чтобы дать вам обзор всего процесса..

  • Некоторый Javascript на странице, который перехватывает пользователя, щелкающего Добавить комментарий кнопка отправки, которая также делает вызов AJAX и обрабатывает ответ.
  • PHP-обработчик, который подключается к действию comment_post

Javascript

Во-первых, для этого понадобится jQuery, как и все, что в настоящее время делает в сфере веб-разработки что-то отдаленно захватывающее. Если вы не уверены, загружен ли он уже, перейдите к коду Javascript и попробуйте в любом случае - если у вас Firebug и консольный журнал говорит “JQuery не определено” когда вы обновите страницу, добавьте эту строку в ваш файл functions.php, чтобы убедиться, что он загружается.

function google_jquery () if (! is_admin ()) wp_deregister_script ('jquery'); wp_register_script ('jquery', ("http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"), false); wp_enqueue_script ( 'JQuery');  add_action ('wp_print_scripts', 'google_jquery');

Обратите внимание, что это сложный способ загрузки jQuery, потому что мы будем использовать последнюю версию из CDN Google, которая является более быстрой и актуальной, чем та, которая включена по умолчанию в WordPress - так что было бы неплохо добавить ее в любом случае даже если jQuery уже загружен в другом месте.

Теперь для фактического Javascript, который будет обрабатывать форму комментариев, у нас есть несколько вариантов. Самый простой - просто вставить код в свой single.php шаблон - при условии, что у вас не включено комментирование для страниц.

Кроме того, вы можете вставить в существующий .JS файл, используемый вашей темой, или создайте новый .js файл в каталоге вашей темы. Если вы решите поместить его в отдельный файл .js и не вставлять его непосредственно в шаблон темы, обязательно добавьте следующие строки в свой файл. functions.php, и обратите внимание, что имя файла предполагается ajaxcomments.js в корне папки вашей темы.

add_action ('init', 'ajaxcomments_load_js', 10); function ajaxcomments_load_js () wp_enqueue_script ('ajaxcomments', get_stylesheet_directory_uri (). '/ ajaxcomments.js'); 

Вот Javascript для обработки формы комментария (или вы можете просмотреть его на pastebin):

// AJAXified система комментирования jQuery ('document'). Ready (function ($) var commentform = $ ('# commentform'); // найти форму комментария commentform.prepend (''); // добавить информационную панель перед форма для предоставления обратной связи или ошибок var statusdiv = $ ('# comment-status'); // определить инфопанель commentform.submit (function () // сериализовать и сохранить данные формы в переменной var formdata = commentform.serialize ( ); // Добавить сообщение о состоянии statusdiv.html ('

Обработка ...

«); // Извлечение URL-адреса действия из комментария var formurl = commentform.attr ('action'); // Отправить форму с данными $ .ajax (тип: 'post', url: formurl, data: formdata, error: function (XMLHttpRequest, textStatus, errorThrown) statusdiv.html ('

Возможно, вы оставили поле пустым или слишком быстро отправили

«); , success: function (data, textStatus) if (data == "success") statusdiv.html ('

Спасибо за ваш комментарий. Мы ценим ваш ответ.

«); еще statusdiv.html ('

Пожалуйста, подождите некоторое время, прежде чем опубликовать свой следующий комментарий

«); commentform.find ('textarea [name = comment]'). val (");); вернуть false;););

Чтобы разбить код, мы сначала создаем объекты jQuery формы комментария (который предполагает, что ваша форма комментария имеет идентификатор CSS по умолчанию “commentform”), и добавив пустую информационную панель над ней, которую мы позже будем использовать для отображения сообщений пользователю о ходе публикации своего комментария.

commentform.submit используется для «взлома» кнопки отправки. Затем мы сериализуем данные формы (превращаем их в одну длинную строку данных), даем “обработка” сообщение пользователю в этой информационной панели, и продолжить запрос AJAX. AJAX-запрос является стандартным форматом, но на самом деле он не входит в сферу применения этого учебного пособия сегодня - достаточно сказать, что он реагирует либо на успех, либо на ошибку, и в случае успеха пропускает форму, чтобы предотвратить случайную публикацию одного и того же комментария дважды. При необходимости измените сообщения и ошибки или добавьте подходящий стиль в таблицу стилей вашей темы, если вы хотите, чтобы сообщения об ошибках как-то выделялись. Последняя строка - вернуть ложь - не позволяет форме завершить действие по умолчанию.

PHP обработчик

Наконец, нам нужно что-то, чтобы предотвратить обновление страницы и отправить соответствующий ответ обратно пользователю, а также уведомить администратора, если комментарий нуждается в модерации, или уведомить автора о новом комментарии. Для этого мы подключаемся к comment_post действие, которое происходит сразу после его добавления в базу данных, и определяет, был ли это запрос AJAX. Добавьте это к вашему functions.php файл:

(Также доступный в этом pastebin)

add_action ('comment_post', 'ajaxify_comments', 20, 2); function ajaxify_comments ($ comment_ID, $ comment_status) if (! empty ($ _ SERVER ['HTTP_X_REQUESTED_WITH']) && strtolower ($ _ SERVER ['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') // Если AJAX запросить тогда (запрос $ AJAX comment_status) case '0': // уведомить модератора о неутвержденном комментарии wp_notify_moderator ($ comment_ID); case '1': // Одобренный комментарий echo "success"; $ commentdata = & get_comment ($ comment_ID, ARRAY_A); $ Пост = & get_post ($ commentdata [ 'comment_post_ID']); wp_notify_postauthor ($ comment_ID, $ commentdata ['comment_type']); перерыв; по умолчанию: echo "error";  выход; 

Пятно Проблемы

Если страница по-прежнему обновляется вместо публикации через AJAX, это может быть одной из двух проблем. Один из них - возможно, у вас не загружен jQuery. Установить Firebug Как установить Firebug на IE, Safari, Chrome & Opera Как установить Firebug на IE, Safari, Chrome & Opera или включить инструменты разработчика Chrome, и проверить журнал консоли на наличие ошибок. Если jQuery не найден, вернитесь в раздел JavaScript и прочитайте первую статью о добавлении jQuery в вашу тему. Вторая возможность заключается в том, что ваша тема делает что-то особенное в форме комментариев, и ее идентификатор больше не является “commentform”. Проверьте исходный код, затем настройте var commentform = $ ('# commentform') строка в JavaScript, чтобы быть правильным идентификатором - это может работать.

Как всегда, я готов помочь как можно больше, но, пожалуйста, опубликуйте ссылки на пример URL, где я могу быстро просмотреть.




О современных технологиях, просто и доступно.
Ваш гид в мире современных технологий. Узнайте как использовать технологии и гаджеты, которые нас окружают каждый день и научитесь открывать интересные вещи в Интернете.