Personalizando extractos de wordpress

Hace 2 horas aqui en mi trabajo me estuve peleando con una funcion en wordpress, ya que necesitaba personalizar mi extracto, el famoso the_excerpt(), y pasa algo bien raro porque en la documentacion de ayuda de wordpress, dice:

Solo para versiones 2.9 de wordpress y superiores;

Agregar lo siguiente en functions.php de tu theme para poder cambiar el valor de leer mas:

function new_excerpt_more($more) {
 return '[.....]';
 }
 add_filter('excerpt_more', 'new_excerpt_more');

Seguido de esto hay que agregar la funcion para poder personalizarlo:

function new_excerpt_more($more) {
 global $post;
 return '<a>ID) . '">Read the Rest...</a>';
 }
 add_filter('excerpt_more', 'new_excerpt_more');

Y con esto se supone podriamos personalizar nuestro famoso Read More del extracto o los famosos “…”, pero pasa algo bien interesante.. dicha funcion no funciona con wordpress 3.0 o al menos no en la 3.0.4, a mi en lo personal no me gusta ni los “…” ni el “Read More”.. en lo personal prefiero que el titulo sea un link a la nota, bien dicho esto vamos a ver como quitar esos famosos “…”, en nuestro archivo functions.php de nuestro theme vamos a agregar lo siguiente:

/*
 Extracto personalizado
 */
 add_filter('the_excerpt', 'excerpts_personalizados');
 function excerpts_personalizados($content = false) {
 global $post;
 $micontenido = $post->post_excerpt;
 $micontenido = strip_shortcodes($micontenido);
 $micontenido = str_replace(']]>', ']]>', $micontenido);
 $micontenido = strip_tags($micontenido);
 $micontenido = $micontenido;
 return $micontenido;
 }

Bien lo que estamos haciendo aqui en pocas palabras es crear una funcion para los excerpts (extractos), trayendo la funcion the_excerpt y despues de esto que es lo que queremos hacer con el, en este caso traer el extracto del post almacenarlo en una variable, eliminar los shortcodes, remplazar algunas cadenas y remover las etiquetas html de nuestra variable esto nos sirve para personalizarlo posteriormente con alguna clase, finalmente regresamos nuestra variable. Y listo.. nuestro the_excerpt() no nos mostrara esos famosos “…” ni “Read More”.

Ahora bien existe otra funcion en wordpress que tampoco funciona que es la longitud de caracteres del extracto, ¿Que pasa si no queremos mostrar todo el extracto y solo queremos mostrar 20 caracteres?.. la ayuda de wordpress de nuevo dice:

Agrega lo siguiente a functions.php de tu theme de wordpress

function new_excerpt_length($length) {
 return 20;
 }
 add_filter('excerpt_length', 'new_excerpt_length');

Pero oh gran sorpresa, tampoco funciona, al menos no en 3.0.4.

pero podemos agregar el siguiente codigo al codigo propuesto arriba de nuestros extractos personalizados:

excerpt_length = 20;
 $palabras = explode(' ', $micontenido, $excerpt_length + 1);
 if(count($words) > $excerpt_length) :
 array_pop($palabras);
 array_push($palabras, 'Leer Mas');
 $micontenido = implode(' ', $palabras);
 endif;
 // y finalmente imprimir nuestra variable con: $micontenido = $micontenido;
 // y devolver el valor obviamente con: return $micontenido;

Practicamente lo que hicimos es crear un contador de caracteres, definimos la longitud de caracteres a 20, definimos una variable que sera el que cuente los caracteres se detenga en 20 y luego imprima un Leer Mas a mi en lo personal no me gusta pero si a ti te gusta, adelante.

Con esto concluyo esta nota un poco larga pero muy util.

Anuncios

2 Respuestas a “Personalizando extractos de wordpress

  1. Hola, yo no sé nada de lenguaje PHP y tengo el tema Skeleton Plus para mi blog. Por defecto todos los post aparecen en extracto y yo quisiera que los post de la home saliesen completos ¿qué debo hacer?

    • Hola, primero perdón por contestar tan tarde y segundo bueno no conozco el tema, pero en la configuración de wordpress también se puede modificar ésta opción, el problema es que como no conozco el tema no se si no puede ser generado por el mismo theme, si no tendrías que modificar el loop de wordpress, deberías buscar sino tiene opciones de configuración.

      Sino en el loop, que se encuentra en el archivo índex.php, debe haber algo así como the_excerpt() ese tendrías que remplazarlo por the_content()

Deja tus dudas y/o comentarios aquí

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s