Comme il est dit dans le titre, je recherche plusieurs longueurs d'extraits dans WordPress.
Je comprends que vous pouvez le faire dans functions.php:
function twentyten_excerpt_length( $length ) {
return 15;
}
add_filter( 'excerpt_length', 'twentyten_excerpt_length' );
Ce que je veux savoir, c'est comment vous pouvez avoir plusieurs de ces valeurs renvoyant chacune des valeurs numériques différentes afin que je puisse obtenir de courts extraits pour les boucles de la barre latérale, des extraits plus longs pour les boucles en vedette et l'extrait le plus long pour l'article principal.
Quelque chose comme utiliser ces derniers dans les modèles:
<?php the_excerpt('length-short') ?>
<?php the_excerpt('length-medium') ?>
<?php the_excerpt('length-long') ?>
À la vôtre, Dave
Que diriez-vous...
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;
}
puis dans votre code modèle, vous utilisez simplement ..
<?php echo excerpt(25); ?>
de: http://bavotasan.com/tutorials/limiting-the-number-of-words-in-your-excerpt-or-content-in-wordpress/
Pour l'instant, vous pouvez mettre à jour la réponse de Marty:
function excerpt($limit) {
return wp_trim_words(get_the_excerpt(), $limit);
}
Vous pouvez également définir un lien personnalisé "en savoir plus" de cette façon:
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());
}
C'est ce que j'ai trouvé.
Ajoutez ceci à votre 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);
}
Il peut être utilisé comme ça.
my_excerpt('short'); // calls the defined short excerpt length
my_excerpt(40); // 40 chars
C'est le moyen le plus simple que je connaisse pour ajouter des filtres, qui peuvent être appelés à partir d'une fonction.
Je cherchais également cette fonctionnalité et la plupart des fonctions ici sont bonnes et flexibles. Pour mon propre cas, je cherchais une solution qui montre une longueur d'extrait différente uniquement sur des pages spécifiques. J'utilise ceci:
function custom_excerpt_length( $length ) {
return (is_front_page()) ? 15 : 25;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );
Collez ce code dans le fichier themes functions.php.
Pour en revenir à la réponse de Marty:
Je sais que cela fait bien plus d'un an que cette réponse a été publiée, mais il vaut mieux tard que jamais. Pour que cela fonctionne avec des limites supérieures à WordPress par défaut de 55, vous devez remplacer cette ligne:
$excerpt = explode(' ', get_the_excerpt(), $limit);
avec cette ligne:
$excerpt = explode(' ', get_the_content(), $limit);
Sinon, la fonction ne fonctionne qu'avec un morceau de texte déjà réduit.
Vous pouvez ajouter à votre fichier functions.php cette fonction
function custom_length_excerpt($Word_count_limit) {
$content = wp_strip_all_tags(get_the_content() , true );
echo wp_trim_words($content, $Word_count_limit);
}
Appelez-le ensuite dans votre modèle comme ceci
<p><?php custom_length_excerpt(50); ?>
Le wp_strip_all_tags
devrait empêcher les balises html errantes de casser la page.
Documentation sur les fonctions
Je pense que nous pouvons maintenant utiliser wp_trim_words
voir ici . Je ne sais pas de quelles données supplémentaires l'échappement et la désinfection ont eu besoin pour utiliser cette fonction, mais cela semble intéressant.
Voici un moyen simple de limiter le contenu ou l'extrait
$content = get_the_excerpt();
$content = strip_tags($content);
echo substr($content, 0, 255);
changez get_the_excerpt () par get_the_content () si vous voulez le contenu.
Cordialement
Soyez prudent en utilisant certaines de ces méthodes. Tous ne suppriment pas les balises html, ce qui signifie que si quelqu'un insère un lien vers une vidéo (ou une URL) dans la première phrase de son message, la vidéo (ou le lien) apparaîtra dans l'extrait, faisant éventuellement exploser votre page.
J'ai trouvé un excellent plugin qui peut le faire - Content and Excerpt Word Limit
Je pense qu'il est possible de créer un code court, je ne l'ai pas essayé mais j'ai écrit pour vous l'idée principale de sa structure
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');
afin que vous puissiez l'utiliser comme ça
[the_excerpt_sc exlength="medium"]
Utiliser l'extrait avancé
http://wordpress.org/extend/plugins/advanced-excerpt/ plugin. Moi aussi, j'ai trouvé une réponse sur cette page.
Je sais que c'est un fil très ancien, mais je me suis juste débattu avec ce problème et aucune des solutions que j'ai trouvées en ligne n'a fonctionné correctement pour moi. D'une part, mon propre filtre "extrait_plus" était toujours coupé.
La façon dont je l'ai résolu est horrible, mais c'est la seule solution de travail que je puisse trouver. La laideur implique de modifier 4 lignes de WP core (!!) + l'utilisation d'une autre variable globale (bien que WP le fasse déjà tellement que je ne le fais pas) pas trop mal).
J'ai changé wp_trim_excerpt
dans wp-includes/formating.php à ceci:
<?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);
}
La seule nouveauté est le $excerpt_length
et $len
morceaux.
Maintenant, si je veux changer la longueur par défaut, je le fais dans mon modèle:
<?php $excerpt_length = 10; the_excerpt() ?>
Changer de noyau est une solution horrible, donc j'aimerais savoir si quelqu'un propose quelque chose de mieux.
Je voudrais faire ceci:
function _get_excerpt($limit = 100) {
return has_excerpt() ? get_the_excerpt() : wp_trim_words(strip_shortcodes(get_the_content()),$limit);
}
tilisation:
echo _get_excerpt(30); // Inside the loop / query
Pourquoi?
has_excerpt
devrait retourner extrait donnéthe_content