Respuesta 2 :P
En la práctica, me di cuenta que no todas las notificaciones llegaban. Yo se lo atribuí a el hecho de usar un servidor gratuito y lento, pero tal vez haya errores de otro tipo.
Lo que hice entonces fue lo siguiente:
El archivo
comentarios.php (el que manda el email) lo modifiqué de esta forma:
Código PHP:
Ver original<?php
// Incluir WordPress
define('WP_USE_THEMES', false); require('/home/public_html/wordpress/wp-load.php');// Incluir wp-load.php
?>
<?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>'); }
// si llegamos hasta aca, puede ser un comentario genuino. Entonces agregamos el meta key al post para marcar que tiene un comentario.
$slug_to_get = getLastPathSegment($page_url);
'name' => $slug_to_get,
'post_type' => 'post',
'post_status' => 'publish'
);
$my_posts = get_posts($args);
if( $my_posts && $slug_to_get!='') {
update_post_meta($my_posts[0]->ID, 'comentarios_nuevos','true');
}
$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); }
function getLastPathSegment($url) {
$path = parse_url($url, PHP_URL_PATH
); // to get the path from a whole URL $pathTrimmed = trim($path, '/'); // normalise with no leading or trailing slash $pathTokens = explode('/', $pathTrimmed); // get segments delimited by a slash
if (substr($path, -1) !== '/') { }
return end($pathTokens); // get the last segment }
?>
Lo que hice fue incluir Wordpress arriba. Luego, antes de enviar el email, lo que hago es agregar un meta key al post que recibió el comentario. De esta forma, puedo después obtener todos los posts que tienen comentarios.
Lo que hice fue incluir esto en
functions.php
Código PHP:
Ver original// *********************************************
// Agregar la pagina de comentarios en el panel
// *********************************************
add_action('admin_menu', 'comentarios_op');
function comentarios_op() {
add_menu_page( 'Comentarios', 'Commentarios', 'read', 'comentarios', 'comentarios_handler',get_bloginfo('template_directory') . '/images/facebook-icon.png');
}
function comentarios_handler() { ?>
<div id="fb-root"></div>
<script>window.fbAsyncInit = function() {
FB.init({appId: 'TU-AP-ID', status: true, cookie: true, xfbml: true});
};
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/es_ES/all.js#xfbml=1&appId=TU-AP-ID";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<script>
jQuery(function(){
jQuery('a.mark_as_read').click(function(e){
var anchor = jQuery(this);
e.preventDefault();
var page_url = jQuery(this).attr('data-posturl');
jQuery.post("<?php bloginfo('template_directory'); ?>/comentario-leido.php", { page_url: page_url } , function(data){
if(data=='exito'){
anchor.parent().parent().fadeOut('fast',function(){
jQuery(this).remove();
if(!jQuery('').length){
jQuery('#wpbody-content').append('<h2>No hay comentarios nuevos.</h2>');
}
});
}else{
alert('Hubo un error marcando los comentarios :( Intenta de nuevo re-cargando la pagina');
}
});
});
});
</script>
<?php
global $post;
$tmp_post = $post;
$args = array( 'numberposts' => -1 , 'meta_key' => 'comentarios_nuevos', 'meta_value' => 'true'); $myposts = get_posts( $args );
$hay_comentarios = false;
foreach( $myposts as $post ) : setup_postdata($post); $hay_comentarios=true; ?>
<div style="padding:20px 0; border-bottom:2px dashed #CCC;">
<h2><a href="<? the_permalink(); ?>"><?php the_title(); ?></a> <iframe src="http://www.facebook.com/plugins/comments.php?href=<?php the_permalink(); ?>&permalink=1" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:130px; height:16px;" allowTransparency="true"></iframe> <a class="mark_as_read" style="font-size:12px; text-decoration:underline; color:red;" data-posturl='<?php the_permalink();?>' href="#">Marcar como leidos</a></h2>
<p><a href="
<? the_permalink
(); ?>">
<?php echo get_the_post_thumbnail
($post->ID, 'thumbnail',array('title'=>get_the_title
())); ?></a></p>
<div class="fb-comments" data-href="<? the_permalink(); ?>" data-num-posts="5" data-width="600"></div>
</div>
<?php endforeach; ?>
<?php if(!$hay_comentarios){ ?>
<h2>No hay comentarios nuevos.</h2>
<?php } ?>
<?php $post = $tmp_post; ?>
<?php }
Y ahora necesitás incluir también otro archivo php para marcar los comentarios leídos:
comentario-leido.php
Código PHP:
Ver original<?php
// Incluir WordPress
define('WP_USE_THEMES', false); require('/home/public_html/wordpress/wp-load.php');
?>
<?php
$page_url = urldecode($_REQUEST['page_url']); // si llegamos hasta aca, puede ser un comentario genuino. Entonces agregamos el meta key al post para marcar que tiene un comentario.
$slug_to_get = getLastPathSegment($page_url);
'name' => $slug_to_get,
'post_type' => 'post',
'post_status' => 'publish'
);
$my_posts = get_posts($args);
if( $my_posts && $slug_to_get!='') {
delete_post_meta($my_posts[0]->ID, 'comentarios_nuevos');
echo 'exito';
}
function getLastPathSegment($url) {
$path = parse_url($url, PHP_URL_PATH
); // to get the path from a whole URL $pathTrimmed = trim($path, '/'); // normalise with no leading or trailing slash $pathTokens = explode('/', $pathTrimmed); // get segments delimited by a slash
if (substr($path, -1) !== '/') { }
return end($pathTokens); // get the last segment }
?>
Lo que todo esto hace es incluir una página en el panel de Wordpress que te muestra las entradas con comentarios nuevos y te da la posibilidad de marcarlos como leídos.
- En esta y en la anterior solucion, tenés que cambiar el ID de tu app donde veas ID-DE-TU-APP
- Es MUY MUY seguro que tengas que modificar parte de estos códigos para adaptarlos a tus necesidades.
- Cuando incluyas wordpress en los archivos PHP, asegurate de cambiar la ruta de wp-load.php por la tuya
- En el archivo comentarios.php, cambia bien las direcciones de email.