web-dev-qa-db-ja.com

文末で抜粋を終了する

次のような孤児の言葉で終わらない抜粋を作成する必要があります。

私がしなければならないのは、普通の人間として合格することだけです。簡単です。何が問題になる可能性がありますか?私たちは快適な椅子があると言ったのですか?私は医者です、私はみんなのおばよりも悪いです。そして、それは私が自分自身を紹介している方法ではありません。あなたはクリケットバットで私を襲いました。もっと...もっと読む

「クリケットコウモリで私を襲った」で終わらせる必要があります。

私はこれを 他の投稿 で見つけました。

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);
}

それからテンプレートにこれを追加します。

<?php get_the_excerpt(); ?>

しかし、うまくいかないようです。何も表示されません。

何がおかしいのですか?

1
agon024

代わりにこの関数を使ってください。それからthe_excerpt();をあなたのテンプレートに入れてください。

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

これはあなたがそれを投げるものをすべて取るでしょう;-)さらに、それは読みやすいです(冗談、私は冗談です)。

P.S PHP 5.4以上である必要があります...

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

関数get_the_excerpt()echoする必要があります。

だからあなたのテンプレートで使用します:

echo get_the_excerpt();
0
ngearing