Corrigindo comentários do WordPress

“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.