Contenido

WordPress 2.9.1 está al caer

23 dic

+ 14

Al parecer esta nueva versión va a durar poco, si, menos aún de lo que vienen durando últimamente. Al parecer han detectado 3 fallos que hacen sea necesario generar una versión nueva y volver a molestar al personal.

Los fallos detectados

Para solucionar estos fallos, tenemos un parche para solucionar los problemas sin tener que actualizar todo nuestro WordPress, que muy amablemente los chicos de Semiologic nos han unido. Simplemente son unos ficheros que se ubicarán en el directorio wp-includes/ de nuestro WordPress.

La versión 2.9.1

La nueva versión, que podría ver la luz en breve, no solo corregirá estos problemas, sino que solventará otros 17 errores menores que han sido ya detectados y se están solucionando para esta nueva versión.

Señores!, estamos en la web 2.0, el usuario aporta contenido… y también ayuda a depurar las aplicaciones sociales. Menos mal que el tiempo de respuesta para solucionar problemas es similar al de publicación de versiones :D

WordPress 2.9 disponible para descargar

19 dic

+ 11

Ya hemos ido viendo como la versión 2.9 de WordPress iba madurando poco a poco con nuevas funcionalidades y cosas realmente interesantes. Pues ahora ya podemos usarla en nuestros sitios web. WordPress 2.9, “Carmen” (en honor a Carmen McRae, una vocalista de Jazz), puedes instalarla descargandola desde aquí o actualizarla desde el panel de administración de tu WordPress.

Truco del campo oculto antispam para WordPress más fácil todavía

4 dic

+ 13

Este artículo hace ya más de un año que comencé a escribirlo y hoy que he tenido unos minutos para repasarlo y modificar un poco el código lo termino.

Hace ya mucho tiempo, Jose Ramón (Manz) publicó en Emezeta un sistema bastante ingenioso para capear el problema del SPAM en nuestros blogs.

El sistema

antispam3
(Ver Imagen)

El sistema, se basa en pensar de forma dual a la hora de implementar el formulario de comentarios de tu blog (que apartir de este momento, va a ser WordPress), y barajar la idea de que un robot pueda rellenar los campos automáticamente haciendo que sus comentarios entraran como un comentario normal. Akismet, y demás plugins antispam, tienen una gran lista de URL’s, agentes de usuarios, emails e IP’s que comprueban para comprobar que un robot es malicioso o no, pero estos sistemas, como ya bien sabemos, no son del todo eficaces. Por eso, hemos de engañar al robot :D

¿Como lo engañamos?

La propuesta de Manz, es la de añadir un campo oculto (mediante CSS) con el nombre del elemento destinado para el nombre del usuario, en el caso de WordPress usaremos author, con un valor X predefinido.

<input type="text" name="author" value="X" class="oculto" />
// CSS
input.oculto {display:none;}

Este campo, será el señuelo que los robots editarán automáticamente al procesar la página, principalmente por que es un <input /> y además se llama author, lo que hace complicado saber si esa página lo tiene implementado o es una trampa.

Para los usuarios, incluiremos un nuevo elemento <input /> con un nombre a nuestra elección.

<input name="nombrebueno" type="text" class="author" />

El usuario, verá este campo y será en el que introducirá su nombre de usuario. A simple vista podemos ver el problema que nos encontramos al realizar este cambio, el nombre del usuario siempre será X, ya que WordPress está preparado para leer author como nombre de usuario, y evidentemente no conoce el campo nombrebueno que hemos creado nosotros.

Por este motivo hemos de modificar el código de WordPress para añadir unas pocas líneas (voy a explicar como lo tenía yo antes de implementar la funcionalidad que veremos abajo):

wp-config.php
define("SPAM_CONTROL", "kaminitos"); // No sé por que puse eso...
wp-comment-post.php
$comment_author       = ( isset($_POST['author']) )  ? trim(strip_tags($_POST['author'])) : null;
$comment_author_email = ( isset($_POST['email']) )   ? trim($_POST['email']) : null;
$comment_author_url   = ( isset($_POST['url']) )     ? trim($_POST['url']) : null;
$comment_content      = ( isset($_POST['comment']) ) ? trim($_POST['comment']) : null;

// Añadimos el control del campo nuevo
if ($_POST["author"] != SPAM_CONTROL) die("SPAM");
$comment_author       = ( isset($_POST['secure']) )  ? trim(strip_tags($_POST['secure'])) : null;

Se puede hacer más sencillo, editando únicamente el fichero wp-comment-post.php, pero de esta forma tengo control sobre lo que aparece en el campo oculto.

Evidentemente, este sistema, me obliga a añadir esas dos líneas de código cada vez que actualizo WordPress, lo que se convierte en algo, que aunque no es laborioso, es muy pesado. Para evitar tener que modificar el código de WordPress en cada actualización, yo propongo este código.

Sistema antispam de campo oculto más cómodo :D

// Mensaje que mostramos a los SPAM
define('MESSAGE', 'SPAM!!!');
// Nombre del campo que usaremos para alojar el verdadero nombre del usuario
define('NOMBRE_CAMPO', 'secure');
// Clave única que será modificada por el bot
define('WP_ANTI_SPAM', 'kko');

add_filter('pre_comment_author_name', '_pre_comment_author_name');
function _pre_comment_author_name($comment_author_name = ''){
 // Devolvemos el nombre del autor sinó estamos pasando los campos necesarios
 if (!isset($_POST['author'], $_POST[NOMBRE_CAMPO])) return $comment_author_name;

 // Matamos el proceso
 if (isset($_POST['author']) && $_POST['author'] != WP_ANTI_SPAM) die(MESSAGE);

 // Cambiamos el nombre del author
 global $wpdb;
 return $wpdb->escape(trim(strip_tags($_POST[NOMBRE_CAMPO])));
}

function get_anti_spam_input($comment_author){
 return '<input type="hidden" name="'.NOMBRE_CAMPO.'" value="'.esc_attr($comment_author).'" />';
}

function anti_spam_input($comment_author){
 echo get_anti_spam_input($comment_author);
}

function get_author_input($comment_author){
 return '<input type="hidden" name="author" value="'.WP_ANTI_SPAM.'" />';
}

function author_input($comment_author){
 echo get_author_input($comment_author);
}

Este código, lo incluimos en el fichero functions.php de nuestro theme. Como vemos en la parte superior, tenemos 3 define() que nos permiten declarar 3 variablesconstantes que nos hará nuestro sistema más personalizable. Después, vemos una función que se aplica al filtro pre_comment_author_name en la que comprobamos que el campo oculto no ha sido modificado. En caso de detectar el cambio, matamos el proceso en ese mismo momento, mostrando el mensaje que hayamos definido previamente.

En caso de que el campo oculto no haya sido modificado, entonces reemplazaremos el nombre de usuario por el del campo visible para el usuario. Este sistema nos permite intercalar este proceso y hacer que en caso comentario válido, continúe sin ningún problema.

Modificar el theme

Después para facilitar el trabajo de modificación del theme, he añadido unos métodos para pintar (o devolver como cadena) los elementos <input /> que intervienen en este sistema. Usaremos, como siempre, el theme default de WordPress, y usaremos únicamente el fichero comment.php del mismo.

Básicamente, el único cambio que tendremos que realizar es el cambio de esta línea:

<input type="text" name="author" id="author" value="<?php echo esc_attr($comment_author); ?>" size="22" tabindex="1" <?php if ($req) echo "aria-required='true'"; ?> />

Por estas dos

<?php
 author_input($comment_author);
 anti_spam_input($comment_author);
?>

Estos dos funciones se encargarán de pintar los elementos <input /> que vamos a necesitar. Evidentemente, si tu theme tiene estilos o clases aplicados a estos elemento tendrás que modificarlos en las funciones get_anti_spam_input() get_author_input() del fichero functions.php que hemos incluido antes.

Sencillo, ¿verdad? :D

Resultado

El resultado, os puedo garántizar que es 100% satisfactorio y que junto a Akismet el SPAM (por el momento) deja de ser un problema.

WordPress 2.9 beta 2

2 dic

+ 4

WordPress anuncia hoy la versión 2.9 beta 2, disponible para descargar desde ya.

En esta versión ya podemos ir testeando algunas de las mejoras que dispondremos al 100% en la versión final:

Para desarrolladores tenemos:

  • Tabla meta de comentarios (con add_comment_meta())
  • Mejoras en el soporte de los custom fields
  • register_theme_directory() para mejorar los themes
  • Mejora en la interconexión PHP/Javascript con JSON
  • y muchas más …

Los usuarios podrán disfrutar ya en esta versión de:

La optimización definitiva de WordPress

17 nov

+ 7

Hay que reconocer que aunque WordPress es un buen software tiene una serie de puntos débiles que hacen que trabajar con él nos dé más de un dolor de cabeza. Entre los problemas que más detectamos es el excesivo consumo de memoria y de recursos en general que necesita para funcionar eficazmente. En estos casos, lo mejor es, sin duda, optimizar todo lo que WordPress necesita para funcionar, desde el servidor web hasta el servidor de base de datos pasándo por las imágenes que servimos y el javascript que le hacemos llegar al usuario. Con esta guía podrás optimizar al milímetro cualquier aspecto de la instalación de tu WordPress.

Preparándonos para la llegada de WordPress 2.9

15 nov

+ 11

WordPress 2.9 está a la vuelta de la esquina. Inicialmente se propuso el 31 de Octubre como fecha de publicación pero al ver que la fecha era un poco justa para testear todas las novedades que la próxima versión va a introducir se decidió posponer sin especificar fecha, aunque todo apunta a finales de Noviembre, principios de Diciembre.

Esta nueva versión, viene con muchas mejoras y nuevas funcionalidades realmente interesantes. En Technosailor publican 10 de las que deberíamos tener en cuenta, aunque yo me quedo con estas:

1) the_post_image()

Una funcionalidad que los desarrolladores de themes podremos empezar a usar tranquilamente es la de the_post_image() que nos devolverá una imagen asociada a un post. Básicamente se encarga de recoger la tabla de wp_postmeta el valor _thumbnail_id asociado al $post_id que estamos pintando en el theme.

<?php while( have_posts() ) : the_post(); ?>
 <div>
 <h1><a href="<?php the_permalink() ?>"><?php the_title() ?></a></h1>
 <?php the_post_image() ?>
 <?php the_content() ?>
</div>
<?php endif; ?>

Esta función estará disponible dentro del Loop y podremos indicarle mediante parámetros el tamaño de la imágen que deseamos obtener. Además, nos ofrece una mini API de filters y actions que nos permitirá manipular la salida fácilmente.

//Filters
 - post_image_size
 - post_image_html
// Actions
 - begin_fetch_post_image_html
 - end_fetch_post_image_html

2) add_theme_support()

Esta funcionalidad permite especificar que nuestros plugins carguen una porción de código si el theme que está usando el WordPress en el que está corriendo soporta una funcionalidad.

Para ello, el plugin debe especificar el siguiente código que comprobará si el theme permite ejecutar ese código:

if (function_exists('require_if_theme_supports'))
 require_if_theme_supports('funcionalidad','/path/to/funcionalidad.php');

Esta línea comprueba que la función require_if_theme_supports() esté disponible, asegurándonos que no dé error en versiones anteriores a la 2.9, y posteriormente indica que cargará /path/to/funcionalidad.php en caso de que el theme dé soporte a funcionalidad.

Para permitir dar soporte a funcionalidad, el theme tendrá que especificarlo en el fichero functions.php (y solo allí) mediante el uso de add_theme_support();

if ( function_exists( 'add_theme_support' ) )
 add_theme_support( 'funcionalidad' );

Sin duda, una forma muy interesante de profesionalizar nuestros plugins y nuestros themes.

3) Papelera de reciclaje

Ya vimos que WordPress 2.9, incluirá una papelera de reciclaje de posts que nos permitirá recuperarlos una vez borrados.

4) Edición de imágenes

La subida de imágenes estará complementada con una interesante edición de imágenes que nos ayudará a pulir esas imágenes que incrustaremos en nuestros posts.

5) Metadata API

Con el fin de unificar funcionalidades comunes nace Metadata API. Todas las funciones que hasta ahora usamos para acceder a los metadatos de comentarios, usuarios y posts comparten la misma funcionalidad salvo la tabla de la base de datos a la que accede.

// WordPress 2.8-
add_comment_meta(12345, 'twitter_id', 'someyoungpunk');
//Wordpress 2.9
add_metadata('comment', 12345, 'twitter_id', 'someyoungpunk');

6) Reparar base de datos

WordPress 2.9 incorporará un sistema que permita reparar la base de datos.

WordPress 2.9 te ayudará a cuidar tu base de datos

13 nov

+ 1

WPengineer publica una nueva funcionalidad de WordPress 2.9 que nos permitirá cuidar la base de datos desde el núcleo de WordPress sin necesidad de instalar ningún plugin para ello. Mediante una constante que definiremos en nuestro wp-config.php podremos activar dicha funcionalidad WP_ALLOW_REPAIR. Interesante y necesario.

WordPress 2.8.6 versión de seguridad

13 nov

+ 1

WordPress anuncia la versión 2.8.6 que solventan 2 problemas de seguridad que pueden ser explotados por usuarios registrados. Es recomendable actualizar si estamos trabajando con varios authores ya que mediante XSS pueden obtener privilegios de posteo.[Descargar]

WordPress 2.9 permite la actaulización de plugins a la vez

28 oct

+ 5

La nueva versión de WordPress, nos permitirá actualizar varios plugins a la vez. Al igual que ahora podemos actualizar los plugins que dispongan de una versión actual, dispondremos de la posibilidad de seleccionar N plugins y actualizarlos a la vez. Se agradece con la cantidad de actualizaciones que tenemos que tener en cuenta.

rewind_posts, reiniciando nuestro Loop

24 oct

+ 6

Una de esas funciones que nos ayudan a hacer más fácil nuestro trabajo con WordPress es rewind_posts(), y aunque su uso no es muy común, en alguna situación podemos alegrarnos de conocerla.

rewind_posts()

<?php
 query_posts('....');
 while (have_posts()) : the_post();
 ...
 endwhile;

 // Reiniciamos los posts
 rewind_posts();

 // Nueva query_posts()
 query_posts('....');
 while (have_posts()) : the_post();
 ...
 endwhile;
 ?>

Está función, disponible como método de WP_Query, es la función encargada de reiniciar el Loop de WordPress para poder usarlo complementamente vacio despues de llamar a esta función. Ideal para el uso de varios Loops en una misma página.