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> |