web-dev-qa-db-fra.com

Fin de l'extrait à la fin de la phrase

J'ai besoin de créer un extrait qui ne s'arrête pas avec un mot orphelin tel que:

Tout ce que je dois faire est de passer comme un être humain ordinaire. Simple. Qu'est ce qui pourrait aller mal? Ai-je mentionné que nous avons des chaises confortables? Je suis le docteur, je suis pire que la tante de tout le monde. se surprend et ce n’est pas ainsi que je me présente. Vous me frappez avec une batte de cricket. C’est plus ... Lire la suite

J'ai besoin que ça se termine par"Vous m'avez frappé avec une batte de cricket"(la dernière phrase complète est l'endroit où je veux qu'elle s'arrête).

J'ai trouvé ceci sur un autre post :

add_filter('get_the_excerpt', 'end_with_sentence');

function end_with_sentence($excerpt) {
  $allowed_end = array('.', '!', '?', '...');
  $exc = explode( ' ', $excerpt );
  $found = false;
  $last = '';
  while ( ! $found && ! empty($exc) ) { 
    $last = array_pop($exc);
    $end = strrev( $last );
    $found = in_array( $end{0}, $allowed_end );
  }
  return (! empty($exc)) ? $excerpt : rtrim(implode(' ', $exc) . ' ' .$last);
}

et puis j'ajoute ceci à mon modèle:

<?php get_the_excerpt(); ?>

Mais cela ne semble pas fonctionner. Il n'affiche rien.

Qu'est-ce que je fais mal?

1
agon024

Utilisez cette fonction à la place. Ensuite, mettez the_excerpt(); dans votre modèle.

/**
 * Find the last period in the excerpt and remove everything after it.
 * If no period is found, just return the entire excerpt.
 *
 * @param string $excerpt The post excerpt.
 */
function end_with_sentence( $excerpt ) {

  if ( ( $pos = mb_strrpos( $excerpt, '.' ) ) !== false ) {
    $excerpt = substr( $excerpt, 0, $pos + 1 );
  }

  return $excerpt;
}
add_filter( 'the_excerpt', 'end_with_sentence' );
1
cowgill

Cela prendra tout ce que vous voulez ;-) En plus, c'est facile à lire (je rigole, je rigole).

P.S. doit être PHP 5.4 ou supérieur ...

function end_with_sentence( $excerpt ) {
    // change the '...' to whatever your "read more" string is; default in WP is '...'
    $excerpt = explode( '(#~)', str_replace( ['...','? ','! ','. '], ['($/s$/)','?(#~)','!(#~)','. (#~)'], preg_replace( '!\s+!', ' ', trim( $excerpt ) ) ) );
    return ( !strpos( end( $excerpt ), '($/s$/)' ) ) ? implode( ' ', $excerpt ) : implode( ' ', array_slice( $excerpt, 0, -1 ) );
}
1
C C

Vous devez echo la fonction get_the_excerpt().

Donc, dans votre modèle, utilisez:

echo get_the_excerpt();
0
ngearing