Uf, yo estuve en esas. Te explico lo que yo hice. Lo hice hace un tiempo luego de frustrarme buscando alguna solución más eficaz y sencilla.
Nota: Para hacer esto necesitás acceso al servidor por FTP y modificar archivos del theme.
Creá un archivo javascript con este contenido. Llamalo como quieras.
notificacionesFacebook.js por ejemplo.
Código Javascript
:
Ver original/*
Notificaciones de email para comentarios de facebook.
Nahuel Jose
http://www.nahueljose.com.ar
*/
function fbCommNotificar(sendPath) {
FB.Event.subscribe('comment.create', function(response) {
// Nombre de la pagina
var siteName = $('title').html();
// Titulo de la pagina
var pageTitle = $('title').html();
// Url de la pagina
var pageURL = document.location.href;
// obtener los ultimos comentarios de la pagina
$.ajax({
url:'https://graph.facebook.com/comments/?ids=' + pageURL + '&' + Math.floor(Math.random()*101),
dataType: 'json',
success: function(results){
allResults = results[pageURL].data;
lastResult = allResults[allResults.length-1];
// enviar el email
$.post(sendPath,{ name: lastResult.from.name, message : lastResult.message, page_url : pageURL, page_title : pageTitle});
}
});
});
}
Ahora en header.php, incluye jQuery (si es que no está ya) y ese script.
Luego ubicá esta línea (la tenés que haber incluido a la hora de insertar el plugin de facebook comments:
Código Javascript
:
Ver originalFB.init({appId: 'ID-DE-TU-APP', status: true, cookie: true, xfbml: true});
Y debajo colocá:
Código Javascript
:
Ver originalfbCommNotificar('<?php bloginfo('template_directory') ?>/comentarios.php');};
Ambas líneas deberían estar dentro de una función algo así:
Código Javascript
:
Ver originalwindow.fbAsyncInit = function() {
FB.init({appId: 'ID-DE-TU-APP', status: true, cookie: true, xfbml: true});
fbCommNotificar('<?php bloginfo('template_directory') ?>/comentarios.php');
};
fbCommNotificar() es una función en javascript que recibe como parámetro un archivo php (en mi caso comentarios.php) que obtiene los datos que se le está pasando y los manda por mail.
Cuando se crea un comentario, la api de facebook dispara un evento (comment.create). Lo que hacemos es suscribirnos a ese evento y cuando se dispara, enviar un email.
Ojo!: Para obtener el último comentario uso $.ajax() para leer un objeto json. Si alguien responde a un comentario, vas a recibir notificación del comentario padre (otra vez). O sea, te llega un mail, pero el comentario que figura es al que se ha respondido, no la respuesta. Esto es porque no me tomé el trabajo de analizar esos casos.
Ejemplo de archivo PHP para enviar comentarios:
Código PHP:
Ver original<?php
$page_url = urldecode($_REQUEST['page_url']); $page_title = urldecode($_REQUEST['page_title']);
$subject = $name . " hizo un comentario en Tu Sitio";
if($name=='' || $message == ''){
die('<h1>Forbidden</h1>'); }
$HTML = '<html><body style="text-align:center; padding:20px;">';
$HTML.= '<h1>' . $subject . '</h1>';
$HTML.= '<table align="center" width="500" style="text-align:left; vertical-align:top;">';
$HTML.= "<tr><td style='vertical-align:top; color:#000; width:20%;'><strong>Nombre</strong></td><td>$name</td></tr>";
$HTML.= "<tr><td style='vertical-align:top; color:#000; width:20%;'><strong>Mensaje</strong></td><td>$message</td></tr>";
$HTML.= "<tr><td style='vertical-align:top; color:#000; width:20%;'><strong>Página</strong></td><td>$page_url</td></tr>";
$HTML.= "<tr><td style='vertical-align:top; color:#000; width:20%;'><strong>Título</strong></td><td>$page_title</td></tr>";
$HTML.= "</table>";
$HTML.= "<hr />";
$HTML.= "<p><a href='$page_url'#encargar>Revisá siempre que recibas este mail que no halla más comentarios! Click acá.</a></p>";
$HTML.= "</body></html>";
if(sendHTMLemail($HTML,$from, "$name <$email>", $recipient, $subject)){
echo 'Exito';
}
function sendHTMLemail($HTML,$from,$reply_to,$to,$subject)
{
$headers = "From: $from\r\n";
$headers .= "Reply-To:$reply_to\r\n";
$headers .= "Return-Path:$reply_to\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
return mail($to,$subject,$HTML,$headers); }
?>