En los listados de entradas de un proyecto WordPress habitualmente se utilizan dos de estas funciones:
Si queremos tener un listado con un texto reducido, utilizaremos the_excerpt, que mostrará el resumen de una entrada. Si hemos escrito un resumen específico para una entrada, mostrará es resumen. Si no lo hemos hecho, WP creará un resumen automático mostrando los primeros N caracteres
Si por el contrario necesitamos un listado extendido, utilizaremos the_content. Siempre podremos mostrar sólo una parte del texto utilizando un comentario <!--more--> en nuestra entrada.
Vamos a mostrar como utilizar the_content y the_excerpt en la misma página para un único listado
Primero, crearemos una función que nos permita determinar si una entrada tiene o no un more:
function iuttu_has_more(){
global $post;
$result = false;
if(!empty($post)) $result = strpos($post->post_content, '<!--more-->') !== false;
return $result;
}Utilizaremos el filtro the_excerpt para modificar el texto a mostrar. Si la entrada tiene un more, mostraremos ese texto. Si no lo tiene, mostraremos el resumen:
function iuttu_the_excerpt($content){
// si la entrada tiene more
if(iuttu_has_more())
$content = str_replace(']]>', ']]>', apply_filters('the_content', get_the_content()));
return $content;
}
add_filter('the_excerpt', 'iuttu_the_excerpt');El único problema es que por defecto, los enlaces para seguir leyendo no son iguales en las funciones the_excerpt y the_content, pero pueden serlo fácilmente si configuramos el enlace:
function iuttu_excerpt_more($more = null){
return '<p class="leer_mas"><a href="' . get_permalink() . '" title="' . __('Leer más','iuttu') . '">'. __('Leer más','iuttu') . '</a></p>';
}
add_filter('excerpt_more', 'iuttu_excerpt_more');La función get_the_content tiene como primer parámetro el enlace para seguir leyendo, así que actualizamos el filtro iuttu_the_excerpt:
function iuttu_the_excerpt($content){
// si la entrada tiene more
if(iuttu_has_more())
$content = str_replace(']]>', ']]>', apply_filters('the_content', get_the_content( iuttu_excerpt_more() )));
return $content;
}Por último, necesitamos tratar el caso de una entrada con resumen escrito manualmente. Por defecto en estas entradas no se añade el enlace a leer más al llamar a the_excerpt así que lo añadiremos nosotros:
function iuttu_get_the_excerpt($content){
global $post;
// la entrada tiene resumen escrito manualmente?
if(!empty($post->post_excerpt))
$content.= iuttu_excerpt_more();
return $content;
}
add_filter('get_the_excerpt', 'iuttu_get_the_excerpt');Si por cualquier motivo queremos reducir la longitud del texto de resumen automático, podemos utilizar el filtro excerpt_length:
function iuttu_excerpt_length($length){
return 100;
}
add_filter('excerpt_length', 'iuttu_excerpt_length');