php - developer - wordpress funciones
MĂșltiples longitudes de extracto en wordpress (15)
Aquí una manera fácil de limitar el contenido o el extracto
$content = get_the_excerpt();
$content = strip_tags($content);
echo substr($content, 0, 255);
cambie get_the_excerpt () por get_the_content () si quiere los contenidos.
Saludos
Como dice el título, estoy buscando longitudes de fragmentos múltiples en WordPress.
Entiendo que puedes hacer esto en functions.php:
function twentyten_excerpt_length( $length ) {
return 15;
}
add_filter( ''excerpt_length'', ''twentyten_excerpt_length'' );
Lo que quiero saber es cómo puede tener varios de estos valores numéricos cada uno que regresan, así puedo obtener extractos breves para los bucles de la barra lateral, extractos más largos para los bucles mostrados y el fragmento más largo para el artículo principal.
Algo así como usar estos en las plantillas:
<?php the_excerpt(''length-short'') ?>
<?php the_excerpt(''length-medium'') ?>
<?php the_excerpt(''length-long'') ?>
Saludos, Dave
Creo que ahora podemos usar wp_trim_words
codex.wordpress.org/Function_Reference/wp_trim_words . No estoy seguro de qué datos extra escapan y desinfección necesarios para usar esta función, pero parece interesante.
Creo que es posible crear un código corto, no lo intenté pero le escribí la idea principal sobre su estructura
function twentyten_excerpt_length($atts,$length=null){
shortcode_atts(array(''exlength''=>''short''),$atts);
if(!isset($atts[''exlength'']) || $atts[''exlength''] == ''short'') {
return 15;
}elseif( $atts[''exlength''] == ''medium'' ){
return 30; // or any value you like
}elseif( $atts[''exlength''] == ''long'' ){
return 45; // or any value you like
}else{
// return nothing
}
}
add_shortcode(''the_excerpt_sc'',''twentyten_excerpt_length'');
para que pueda usarlo como tal
[the_excerpt_sc exlength="medium"]
Encontré un gran complemento que puede hacer esto: contenido y extracto Word Limit
Estaba buscando esta característica también y la mayoría de las funciones aquí son buenas y flexibles. En mi caso, estaba buscando una solución que muestre una longitud de fragmento diferente solo en páginas específicas. Estoy usando esto:
function custom_excerpt_length( $length ) {
return (is_front_page()) ? 15 : 25;
}
add_filter( ''excerpt_length'', ''custom_excerpt_length'', 999 );
Pegue este código dentro del archivo themes functions.php.
Esto es lo que se me ocurrió.
Agregue esto a sus functions.php
class Excerpt {
// Default length (by WordPress)
public static $length = 55;
// So you can call: my_excerpt(''short'');
public static $types = array(
''short'' => 25,
''regular'' => 55,
''long'' => 100
);
/**
* Sets the length for the excerpt,
* then it adds the WP filter
* And automatically calls the_excerpt();
*
* @param string $new_length
* @return void
* @author Baylor Rae''
*/
public static function length($new_length = 55) {
Excerpt::$length = $new_length;
add_filter(''excerpt_length'', ''Excerpt::new_length'');
Excerpt::output();
}
// Tells WP the new length
public static function new_length() {
if( isset(Excerpt::$types[Excerpt::$length]) )
return Excerpt::$types[Excerpt::$length];
else
return Excerpt::$length;
}
// Echoes out the excerpt
public static function output() {
the_excerpt();
}
}
// An alias to the class
function my_excerpt($length = 55) {
Excerpt::length($length);
}
Se puede usar así.
my_excerpt(''short''); // calls the defined short excerpt length
my_excerpt(40); // 40 chars
Esta es la manera más fácil que conozco para agregar filtros, que se pueden llamar desde una función.
Me gustaría hacer esto:
function _get_excerpt($limit = 100) {
return has_excerpt() ? get_the_excerpt() : wp_trim_words(strip_shortcodes(get_the_content()),$limit);
}
Uso:
echo _get_excerpt(30); // Inside the loop / query
Por qué ?
- Si
has_excerpt
debe devolver el fragmento dado - No, así que recortar palabras /
the_content
códigos cortos dethe_content
Por ahora, puedes actualizar la respuesta de Marty:
function excerpt($limit) {
return wp_trim_words(get_the_excerpt(), $limit);
}
También puede definir el enlace personalizado ''leer más'' de esta manera:
function custom_read_more() {
return ''... <a class="read-more" href="''.get_permalink(get_the_ID()).''">more »</a>'';
}
function excerpt($limit) {
return wp_trim_words(get_the_excerpt(), $limit, custom_read_more());
}
Puede agregar a su archivo functions.php esta función
function custom_length_excerpt($word_count_limit) {
$content = wp_strip_all_tags(get_the_content() , true );
echo wp_trim_words($content, $word_count_limit);
}
Luego llámalo en tu plantilla como este
<p><?php custom_length_excerpt(50); ?>
El wp_strip_all_tags
debería evitar que las etiquetas html perdidas rompan la página.
Documentación sobre funciones
Qué tal si...
function excerpt($limit) {
$excerpt = explode('' '', get_the_excerpt(), $limit);
if (count($excerpt) >= $limit) {
array_pop($excerpt);
$excerpt = implode(" ", $excerpt) . ''...'';
} else {
$excerpt = implode(" ", $excerpt);
}
$excerpt = preg_replace(''`/[[^/]]*/]`'', '''', $excerpt);
return $excerpt;
}
function content($limit) {
$content = explode('' '', get_the_content(), $limit);
if (count($content) >= $limit) {
array_pop($content);
$content = implode(" ", $content) . ''...'';
} else {
$content = implode(" ", $content);
}
$content = preg_replace(''//[.+/]/'','''', $content);
$content = apply_filters(''the_content'', $content);
$content = str_replace('']]>'', '']]>'', $content);
return $content;
}
luego en tu código de plantilla solo usas ...
<?php echo excerpt(25); ?>
de: http://bavotasan.com/tutorials/limiting-the-number-of-words-in-your-excerpt-or-content-in-wordpress/
Sé que este es un hilo muy viejo, pero luché con este problema y ninguna de las soluciones que encontré en línea funcionó correctamente para mí. Por un lado, mi propio filtro "excerpt_more" siempre se cortaba.
La forma en que lo resolví es fea como el infierno, pero es la única solución de trabajo que pude encontrar. La fealdad implica modificar 4 líneas de WP core (!!) + el uso de otra variable global (aunque WP ya lo hace tanto que no me siento tan mal).
Cambié wp_trim_excerpt
en wp-includes / formatting.php a esto:
<?php
function wp_trim_excerpt($text = '''') {
global $excerpt_length;
$len = $excerpt_length > 0 ? $excerpt_length : 55;
$raw_excerpt = $text;
if ( '''' == $text ) {
$text = get_the_content('''');
$text = strip_shortcodes( $text );
$text = apply_filters(''the_content'', $text);
$text = str_replace('']]>'', '']]>'', $text);
$excerpt_length = apply_filters(''excerpt_length'', $len);
$excerpt_more = apply_filters(''excerpt_more'', '' '' . ''[…]'');
$text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
}
$excerpt_length = null;
return apply_filters(''wp_trim_excerpt'', $text, $raw_excerpt);
}
Lo único nuevo es el $excerpt_length
y $len
bits.
Ahora, si quiero cambiar la longitud predeterminada, hago esto en mi plantilla:
<?php $excerpt_length = 10; the_excerpt() ?>
Cambiar el núcleo es una solución horrible, así que me encantaría saber si a alguien se le ocurre algo mejor.
Tenga cuidado al usar algunos de estos métodos. No todos ellos quitan las etiquetas html, es decir, si alguien inserta un enlace a un video (o url) en la primera frase de su publicación, el video (o enlace) aparecerá en el extracto, posiblemente haciendo estallar su página.
Use extracto avanzado
http://wordpress.org/extend/plugins/advanced-excerpt/ plugin. Yo también encontré una respuesta de esta página.
Volviendo a la respuesta de Marty:
Sé que ha pasado más de un año desde que se publicó esta respuesta, pero es mejor tarde que nunca. Para que esto funcione con límites superiores al predeterminado de WordPress de 55, debe reemplazar esta línea:
$excerpt = explode('' '', get_the_excerpt(), $limit);
con esta linea:
$excerpt = explode('' '', get_the_content(), $limit);
De lo contrario, la función solo funciona con un fragmento de texto ya recortado.
Here hay un artículo sobre el uso de longitud de extracto personalizado en WordPres. Hay una serie de formas de limitar y controlar la longitud del extracto de publicación.
- Limite la longitud del extracto del post o la longitud del contenido del post usando el número de palabras.
- Limitar la longitud del extracto a una cantidad de caracteres.
- Limite el resumen del mensaje agregando la etiqueta "leer más".
- Permitir extractos personalizados para escribir su propio resumen para cada publicación.
- Controle la longitud del extracto usando filtros
Here Espero que esto te ayude mucho.