“O sistema de comentários padrão do WordPress é péssimo quando se trata de lidar com erros, você pode facilmente corrigir esse problema com um AJAX simples.”
No verso de muitos artigos por aí que ajudam a AJAX e a modificar seus comentários, decidi escrever este mini-script e lançá-lo como um plugin aqui> http://wordpress.org/extend/plugins/silk-ajax- comentários/
Se você está ansioso para saber como funciona, como eu disse, é muito simples …
Primeiro, configuramos nossas ações para carregar o jQuery (se houver) e um bom arquivo javascript em outro local:
add_action('wp_print_scripts', 'google_jquery');
add_action('init', 'ajaxcomments_load_js', 10);
function ajaxcomments_load_js(){
wp_enqueue_script('ajaxcomments', plugins_url('silk-ajax-comments/ajaxcomments.js'), array(), false, true);
}
function google_jquery() {
if ( ! jQuery ) {
wp_register_script('jquery',("http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"), false);
wp_enqueue_script('jquery');
}
}
Em seguida, construímos o manipulador de PHP que ouve o pressionamento do botão de comentário, verifica os dados da postagem e alimenta nosso AJAX
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'){
switch($comment_status){
case "0":
wp_notify_moderator($comment_ID);
case "1": //Approved comment
echo "success";
$commentdata =& get_comment($comment_ID, ARRAY_A);
$post =& get_post($commentdata['comment_post_ID']);
wp_notify_postauthor($comment_ID, $commentdata['comment_type']);
break;
default:
echo "error";
}
exit;
}
}
Ok, agora o PHP está definido … vamos executar nosso arquivo ajaxcomments.js que carregamos antes (os comentários devem explicar o resto)
if (typeof jQuery != 'undefined') {
jQuery('document').ready(function($){
var commentform=$('#commentform'); // find the comment form
commentform.prepend('<div id="comment-status" ></div>'); // add info panel before the form to provide feedback or errors
var statusdiv=$('#comment-status'); // define the infopanel
commentform.submit(function(){
//serialize and store form data in a variable
var formdata=commentform.serialize();
//Add a status message
statusdiv.html('<p>Processing...</p>');
//Extract action URL from commentform
var formurl=commentform.attr('action');
//Post Form with data
$.ajax({
type: 'post',
url: formurl,
data: formdata,
error: function(XMLHttpRequest, textStatus, errorThrown){
statusdiv.html('<p class="wdpajax-error" >You might have left one of the fields blank, or be posting too quickly</p>');
},
success: function(data, textStatus){
if(data=="success")
statusdiv.html('<p class="ajax-success" >Thanks for your comment. We appreciate your response.</p>');
else
statusdiv.html('<p class="ajax-error" >Please wait a while before posting your next comment</p>');
commentform.find('textarea[name=comment]').val('');
}
});
return false;
});
});
}
E aí está, como eu disse, não muito revolucionário, mas simples e eficaz.