search
top
Currently Browsing: Hacks

Recibiendo el Permalink de los comentarios en las notificaciones

Ayer conversando con David salió el tema este, me preguntó como se podría hacer eso, me había quedado bastante claro, pero hoy cuando lo fuí a hacer me había olvidado que era lo que david quería. Hoy al volver a preguntar y al entender puse manos a la obra.

David quería recibir el permalink (enlace) del comentario en cuestión cada vez que dejaban un comentario y le llegaba un e-mail de notificación.
Algo así:

comentarios

Poniendo código a la obra:

Buscamos el archivo pluggable.php que está en /includes, lo abrimos y vamos a la linea 1014 en donde dice algo así como:

1
$notify_message .= get_permalink($comment->comment_post_ID) . "#comments\r\n\r\n";

Viendo las líneas 1014, 1015 y 1016 inclusive, vemos lo siguiente:

1
2
3
$notify_message .= get_permalink($comment->comment_post_ID) . "#comments\r\n\r\n";
$notify_message .= sprintf( __('Delete it: %s'), admin_url("comment.php?action=cdc&c=$comment_id") ) . "\r\n";
$notify_message .= sprintf( __('Spam it: %s'), admin_url("comment.php?action=cdc&dt=spam&c=$comment_id") ) . "\r\n";

Agregamos una línea abajo de la de “spam”

1
$notify_message .= sprintf( __('Comentario: %s'), get_comment_link($comment->comment_ID)). "\r\n";

Lo que quedaría:

1
2
3
4
$notify_message .= get_permalink($comment->comment_post_ID) . "#comments\r\n\r\n";
$notify_message .= sprintf( __('Delete it: %s'), admin_url("comment.php?action=cdc&c=$comment_id") ) . "\r\n";
$notify_message .= sprintf( __('Spam it: %s'), admin_url("comment.php?action=cdc&dt=spam&c=$comment_id") ) . "\r\n";
$notify_message .= sprintf( __('Comentario: %s'), get_comment_link($comment->comment_ID)). "\r\n";

Notas:
Esto funciona para los themes que tengan integrado esto de que cada comentario tiene permalink, de lo contrario redireccionará a la url del artículo.
Tampoco esto va a funcionar para los blogs que tienen los comentarios paginados.

Creo que a esta altura está de más decir que cada uno lo puede personalizar como más le guste.

Actualización:

David me dice que tal vez funcione mejor con la función get_comment_link, asi que he probado y usando esa función sirve también para los comentarios paginados. Cambiar la línea:

1
$notify_message .= sprintf( __('Comentario: %s'), get_permalink($comment->comment_post_ID) . ("#comment-$comment_id") ) . "\r\n";

Por esta:

1
$notify_message .= sprintf( __('Comentario: %s'), get_comment_link($comment->comment_ID)). "\r\n";

Listando los últimos comentarios y personalizando el texto

Comentarios! - de palomitas y maíz
(imagen del genio de Palomitas y Maíz)

Listar los comentarios recientes es bastante molesto a veces, ya que no existe documentación precisa en el codex y todo es bastante “Extra oficial”.

Hoy mirando un poco el código de wp para personalizar un poco más los comentarios, me di cuenta que lo mejor para hacer esto es haciéndolo con los famosos widgets.

Personalizando:

Yo quería cambiar el “on” por “en”, por ejemplo de “Marcelo on php the_time – La hora y fecha en WordPress” quería que quede “Marcelo en php the_time – La hora y fecha en WordPress”.

No costó mucho hacerlo, solo cambiar “%1$s on %2$s” en la línea 647 del archivo default-widgets.php en /includes por “%1$s en %2$s”.

También le agregué Nofollow al id del comentario, (aunque matt joda que los enlaces internos no deben llevar nofollow).

Esto también en la línea 647, en la parte que dice:

1
'<a href="' . esc_url( get_comment_link($comment->comment_ID) ) . '">'

Cambié por:

1
'<a rel="nofollow" href="' . esc_url( get_comment_link($comment->comment_ID) ) . '">'

Para listar los comentarios recientes “a mano” sin widgets lo mejor que encontré es:

1
2
3
4
5
6
7
8
9
10
<?php
$number=5; // Número de comentarios recientes que queremos mostrar (cambiar el 5)
$comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_approved = '1' ORDER BY comment_date_gmt DESC LIMIT $number");
?>
<ul id="recentcomments">
<h2>Comentarios recientes</h2>
<?php
if ( $comments ) : foreach ( (array) $comments as $comment) :
echo  '<li class="recentcomments">' . sprintf(__('%1$s en %2$s'), get_comment_author_link(), '<a href="'. get_comment_link($comment->comment_ID) . '">' . get_the_title($comment->comment_post_ID) . '</a>') . '</li>';
endforeach; endif;?></ul>

Ahí por defecto llama los últimos 5 comentarios y los imprime como “Marcelo en php the_time – La hora y fecha en WordPress” pero sin nofollow, quien quiera lo agrega, eso va en cada uno.

Recibiendo un e-mail cada vez que tengamos error en la base de datos

wp ojo

Post inspirado en Smf, que envía un e-mail al administrador del foro cuando hay errores de conexión en la base de datos, y en un artículo que se escribió en un blog chico (al igual que este) hace un tiempo, que, luego se reprodujo por toda la blogocosa española.

El código hacía que podamos recibir un e-mail cada vez que googlebot visitara nuestro sitio.

Hace un rato, me llegó un correo de un foro que administro, que está desarrollado con Smf, en el cual me informaba que había un problema con la base de datos, de ahí me puse a ver como podía hacer para que WordPress haga lo mismo.

Hace un tiempo había escrito sobre el “Error establishing a database connection“, asi que si alguno lo personalizó, tendrá que pasar el código a un archivo nuevo.

Para recibir un e-mail cada vez que tengamos un error en la base de datos:

Wp cuando tiene un error en la base de datos llama a un archivo que no existe, para que en caso de que tengamos un error personalizado, muestre lo del archivo. El archivo en cuestión es db-error.php.

El archivo db-error.php debe estar en /wp-content/db-error.php.

Vamos a crear un archivo que se llame db-error.php y vamos a agregar lo suguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" <?php if ( function_exists( 'language_attributes' ) ) language_attributes(); ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>Database Error</title>
</head>
<body>
	<h1>Error establishing a database connection</h1>
 
<?php 
    $email = "tu correo";
		mail( 
			$email, 
				// Asunto
				"Error en la base de datos", 
				// Mensaje
				"Parece que en el sitio x hay problemas con la base de datos."
			); 
?>
</body>
</html>

Obviamente que en donde dice “tu correo” va tu correo, el asunto y el mensaje lo pueden cambiar a gusto, y por supuesto pueden personalizar el mensaje de error, o al menos traducirlo.

Mostrar posts recientes de una categoría o tag

Este artículo es una colaboración de Esteban Rojas (en su perfil no ha configurado url ni twitter)

En nuestro blog seguramente hablaremos de muchos temas, por ende tal vez tengamos muchas categorías, sin embargo siempre hay unas 2 o 3 que tocamos más a menudo o que tal vez queramos resaltar de las demás, por lo que a continuación compartiré un código que ayuda a hacer precisamente eso, listar los posts recientes que esten archivados en una categoría o tag especifica.

1
2
3
4
5
6
<?php query_posts('cat=1&showposts=5'); ?>
<ul>
<?php while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink(); ?> rel="bookmark" title="Leer <?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
<?php endwhile;?>
</ul>

Esto usa la función query_posts mas la ID de la categoría de la que queramos tomé los posts, el cat=1, además de poder definir cuantos artículos queremos mostrar con el parámetro showposts, . Para una etiqueta sería de esta forma:

1
2
3
4
5
6
<?php query_posts('tag=wordpress-hacks&showposts=3'); ?>
<ul>
<?php while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>" rel="bookmark" title="Leer <?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
<?php endwhile;?>
</ul>

Modificando tag=wordpress por el nombre de la etiqueta de la que ustedes quieren tomé las entradas.

Muchas gracias Esteban!

Error establishing a database connection

Error establishing a database connection es una de las frases que más me preocupan ver en un sitio, como indica la misma, se debe a un error en el intento a la conexión de la base de datos.

¿Por qué?
Puede ser por muchos motivos, podría ser por que anduvimos tocando el wp-config.php, el servidor esta sobrecargado y no puede responder a la petición, etc.

Hoy justamente, en un par de sitios mios he visto ese error, y me puse a pensar que, tal vez, sería bueno personalizar un poco más la página que se encarga de mostrarlo, incluyendo un e-mail por ejemplo, para que si nos encontramos con un navegante con ganas de ayudar, nos pueda escribir.

Personalizando el “Error establishing a database connection”.
En WordPress 2.8, tenemos que ir al archivo functions.php, que lo encontramos en /wp-includes.
Nos llegamos hasta la línea 2810, donde empieza lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" <?php if ( function_exists( 'language_attributes' ) ) language_attributes(); ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>Database Error</title>
 
</head>
<body>
	<h1>Error establishing a database connection</h1>
</body>
</html>

En donde empieza el h1 hasta donde termina, podríamos agregar una frase personalizada, a demás como dije antes, nuestro e-mail, o un formulario de contacto.

 Página 2 De 4 « 1  2  3  4 »
top