Cuando maquetamos nuestro theme y por necesidades de diseño, no es rara la ocasión en la que un texto debe ser más corto o más largo de lo que el «excerpt» de wordpress nos ofrece.

A partir de aquí tenemos dos opciones. O bien modificamos la cantidad de texto a mostrar mediante una función en nuestro functions.php o bien, creamos una función para recortar el texto. La primera opción nos condiciona para el resto de excerpts, y la segunda, nos obliga a tener en cuenta las cualidades del extracto.

Es por ello, que aunando lo mejor de cada casa, podemos usar esta función a la que pasaremos 3 parámetros. El primero es para indicar la cantidad de texto a mostrar, el segundo parámetro para indicar el texto a usar, y el tercero si queremos el «leer más» dentro (true) o fuera (false) del content (para el caso de que lo tengamos dentro de una capa)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function cmmyth_the_excerpt($charlength,$more='leer mas',$position=true)
{
    $excerpt = get_the_content();
    $excerpt = strip_tags($excerpt);
    $charlength++;

    if ( mb_strlen( $excerpt ) > $charlength )
    {
        $subex = mb_substr( $excerpt, 0, $charlength - 5 );
        $exwords = explode( ' ', $subex );
        $excut = - ( mb_strlen( $exwords[ count( $exwords ) - 1 ] ) );
        if ( $excut < 0 )
        {
            $the_text = mb_substr( $subex, 0, $excut );
        } else {
            $the_text = $subex;
        }
        $the_text.= '...';
        if($position != false)
        {
            $the_text.= '<div class="read-more"><a href="'.get_permalink().'">'.$more.'</a></div>';
        }
        else
        {
            $the_text.= '</div><div class="read-more"><a href="'.get_permalink().'">'.$more.'</a>';
        }
    } else {
        $the_text = $excerpt;
    }
   
    $the_text = preg_replace('`\[[^\]]*\]`','',$the_text);
    return $the_text;
}

La forma ideal de usarlo sería la siguiente

1
2
3
<div class="postContent">
<?php echo cmmyth_the_excerpt(255,'sigue leyendo',true); ?>
</div>

Con el parámetro $position a true, se generaría una estructura similar a esta

1
2
3
4
<div class="postContent">
Este es el texto a mostrar ...
<div class="more"><a href="#">Sigue leyendo</a></div>
</div>

Con el parámetro $position a false, se generaría una estructura similar a esta

1
2
3
4
<div class="postContent">
Este es el texto a mostrar ...
</div>
<div class="more"><a href="#">Sigue leyendo</a></div>