Yo personalmente crearia una funcion
function cut_words( $str, $num ) {
$words = preg_split( ‘/[\s]+/’, $str, -1, PREG_SPLIT_OFFSET_CAPTURE );
if( isset($words[$num][1]) ){
$str = substr( $str, 0, $words[$num][1] );
}
unset( $words, $num );
return trim( $str );
}
Y a la hora de mostrar el titulo:
$title = get_the_title();
$num_words = 10; /*limitamos a 10 palabras */
echo cut_words($title, $num_words);
Usando tu funcion:
function custom_trim_my_title( $title ) {
$num = 10;
$words = preg_split( ‘/[\s]+/’, $title, -1, PREG_SPLIT_OFFSET_CAPTURE );
if( isset($words[$num][1]) ){
$title = substr( $str, 0, $words[$num][1] );
}
return trim( $title );
}
add_filter( ‘the_title’, ‘custom_trim_my_title’ );
-
Esta respuesta fue modificada hace 6 años, 7 meses por Feno.
-
Esta respuesta fue modificada hace 6 años, 7 meses por Feno.
Gracias Feno.
El problema que veo o que tengo es que a parte de desaparecer los «…» usando el equivalente que has puesto a la funcion que ya uso, al final del texto si se tiene que cortar, si tengo algun titulo con más de 10 palabras este no se visualiza al parecer.
-
Esta respuesta fue modificada hace 6 años, 7 meses por ogonzalez.
El tema de los puntos es sencillo:
if( isset($words[$num][1]) ){
$title = substr( $str, 0, $words[$num][1] ).’…’;
}
Si que se visualizaria:
haces un return de $title Siempre, en el caso de que existan 10 palabra entras en el «if» y acortas y luego haces el return, si no se el caso, simplemente haces el return.
Pero siempre hace te devuelve el $title, acortado o no.
El problema es que si el titulo tiene menos de 10 palabras no lo muestra. Si supera las 10 palabras si lo muestra. Esto lo estoy haciendo con desde el functions.php, ya que no puedo editar la parte que monta el post. Uso la funcion asi:
function custom_trim_my_title( $title ) {
$num = 10;
$words = preg_split( ‘/[\s]+/’, $title, -1, PREG_SPLIT_OFFSET_CAPTURE );
if( isset($words[$num][1]) ){
$title = substr( $str, 0, $words[$num][1] ).’…’;
}
return trim( $title );
}
add_filter( ‘the_title’, ‘custom_trim_my_title’ );
Perdona lo hice sin probarlo
$title = substr( $title, 0, $words[$num][1] ).’…’;
fui haciendo el codigo sin probar… y por costumbre las cadenas de texto las nombro $str
-
Esta respuesta fue modificada hace 6 años, 7 meses por Feno.
Disculpa, lamentablemente no acaba de ir fino, usando esta formulación en el functions.php
function custom_trim_my_title( $title ) {
$num = 3;
$words = preg_split( ‘/[\s]+/’, $title, -1, PREG_SPLIT_OFFSET_CAPTURE );
if( isset($words[$num][1]) ){
$title = substr( $title, 0, $words[$num][1] ).’…’;
}
return trim( $title );
}
add_filter( ‘the_title’, ‘custom_trim_my_title’ );
Ahora no corta ningun titulo, entiendo que deberia de recortar los titulos a un máximo de 3 palabras tal y como esta puesto, pero en cambio aparece el titulo sin hacer ningún truncate.
HE copiado el codigo tal lo has puesto (cambiando las comillas simples )
y me funciona perfectamente
function custom_trim_my_title( $title ) {
$num = 3;
$words = preg_split( '/[\s]+/', $title, -1, PREG_SPLIT_OFFSET_CAPTURE );
if( isset($words[$num][1]) ){
$title = substr( $title, 0, $words[$num][1] ).'…';
}
return trim( $title );
}
add_filter( 'the_title', 'custom_trim_my_title' );
Lo unico que debo hacer es cambiar la comilla «´» por la comilla simple '
( el foro la cambia).
-
Esta respuesta fue modificada hace 6 años, 7 meses por Feno.
-
Esta respuesta fue modificada hace 6 años, 7 meses por Feno.
-
Esta respuesta fue modificada hace 6 años, 7 meses por Feno.
-
Esta respuesta fue modificada hace 6 años, 7 meses por Feno.
-
Esta respuesta fue modificada hace 6 años, 7 meses por Feno.
-
Esta respuesta fue modificada hace 6 años, 7 meses por Feno.
-
Esta respuesta fue modificada hace 6 años, 7 meses por Feno.
-
Esta respuesta fue modificada hace 6 años, 7 meses por Feno.
-
Esta respuesta fue modificada hace 6 años, 7 meses por Feno.
Genial, ahora funciona a la parfección. El problema que tengo ahora es que en la pagina de detalle del post tambien aparece el titulo cortado, la idea era, que esta funcion fuera para el listado de post, pero luego en el post general se viera completo el titulo.
El post usa
<?php the_title(); ?>
Que entiendo que es lo mismo y por eso se corta. Se pueda añadir una excepción aqui?
Creo que esto te sirve:
function custom_trim_my_title( $title ) {
if (!is_single()) {
$num = 3;
$words = preg_split( '/[\s]+/', $title, -1, PREG_SPLIT_OFFSET_CAPTURE );
if( isset($words[$num][1]) ){
$title = substr( $title, 0, $words[$num][1] ).'…';
}
}
return trim( $title );
}
add_filter( 'the_title', 'custom_trim_my_title' );