WordPress – Personalizar the excerpt

La función the_excerpt() nos devuelve un extracto de nuestro artículo  o post y es útil, cuando queremos presentar sólo parte del contenido ya sea en nuestra página principal, en un widget o en cualquier otra parte de nuestra página.

Esta función debe ir dentro del loop y por defecto devuelve 55 caractéres y termina en […] y elimina cualquier etiqueta HTML e imágen que puedan estar dentro del extracto.

Pero que pasa si queremos más de 55 caracteres o queremos incluir un link en cambio de los tres puntos suspensivos y algo más significativo como leer más.

No hay problema gracias a los filtros de WordPress podemos cambiar estos parámetros sin problemas.

Modificar la longitud de the_excerpt()

1. Abre el archivo functions.php de la carpeta del tema que estés utilizando. ( Normalmente estará ubicado en la carpeta wp-content/themes/nombre_carpeta_tema/functions.php )

Nota: también se puede modificar el archivo functions.php a través del Escritorio de WordPress en Apariencia>Editor

2. Al final del archivo functions.php antes del último ?> colocamos el siguiente código:

/**
*  $long es una variable para indicar de cuantos caracteres de
*   longitud queremos nuestro extracto
*/

function mi_excerpt_long( $long ) 
{
        if (!$long) // si no se especifica
        {
	    return 40; //la longitud por defecto sera 40
        }
        else
        {
             return $long;
        }
}
add_filter( 'excerpt_length', 'mi_excerpt_long', 999 );

El uso dentro del loop si queremos que nos de 100 caracteres sería:

mi_excerpt_long(100);

Para explicar un poco el código lo que hace esta función es tomar una variable llamada $long que nos indica la longitud de caracteres, si esta variable no es colocada la longitud por defecto sería de 40, si no regresa el número de caracteres que le pasamos a la función. Luego utilizamos el filtro excerpt_length para indicarle a WordPress que es lo que queremos modificar con esta función. El número 999 si se lo preguntan es simplemente la prioridad de carga de este filtro, lo colocamos alto para que no interfiera con otros filtros más importantes.

Agregar leer más con un link al final del extracto

Por defecto el extracto termina con […], sin ningún link para seguir leyendo. Para cambiar esto vamos a utilizar otro filtro llamado excerpt_more. Igual que la vez anterior vamos a agregar un función al final del archivo functions.php.

function mi_excerpt_leermas() {
       global $post;
	return '<a href="'. get_permalink($post->ID) . '"> Leer más...</a>';
}
add_filter('excerpt_more', 'mi_excerpt_leermas');

No necesitamos agregar nada a nuestro loop excepto la función the_excerpt() o podemos utilizar la función que hicimos para cambiar la longitud del extracto. El filtro excerpt_more lo que hace es cambiar los tres puntos al final de extracto por lo que coloquemos en el texto del link.

[alert_blue textalign=”left”]Aquí también estamos utilizando otra función de WordPress get_permalink(), que nos devuelve el link permanente al post actual del loop.[/alert_blue]

Nota: Para versiones anteriores a WordPress 2.8 el filtro se llama wp_trim_excerpt. Pero no es aconsejable utilizar versiones tan viejas de WordPress.

Más información en el codex de WordPress: the excerpt

Ya con esto finalizamos y espero que les sirva en sus temas de WordPress, cualquier duda, pregunta o sugerencia por favor dejen sus comentarios.

4 comentarios

    1. Hola Cris si lo ves en el código de arriba que es lo que se está aplicando hay una línea que se lee if(!$long) esto quiere decir que no se estableció el parámetro al llamar a la función mi_excerpt_long( $long ) como explico en el ejemplo si colocas 100 entre los paréntesis mi_excerpt_long(100) será de 100 caracteres si no colocas nada mi_excerpt_long() será por defecto de 40.

      Espero que ahora te quede más claro.

  1. Saludos, muy bueno e interesante tu post, una pregunta al colocar la función de “leer mas…” dentro del archivo functions.php no me funciona :P, al actualizar la pagina esta función me aparece como texto dentro de mi blog en la parte de arriba como si fuera parte del contenido, sabes a que se deba y lo mas importante de esto podrás ayudarme ¡muchas gracias de antemano!