web-dev-qa-db-ja.com

文字で抜粋

Functions.phpにコードがあります。

function string_limit_words($string, $Word_limit)
{
  $words = explode(' ', $string, ($Word_limit + 1));
  if(count($words) > $Word_limit)
  array_pop($words);
  return implode(' ', $words);
}

しかし、私は文字数の抜粋を制限する必要があります、あなたは私を助けてもらえますか?

4
Marcin

このコードを私の最後のプロジェクトの1つで使用しました。

function ng_get_excerpt( $count ){
  $permalink = get_permalink( $post->ID );
  $excerpt = get_the_content();
  $excerpt = strip_tags( $excerpt );
  $excerpt = mb_substr( $excerpt, 0, $count );
  $excerpt = mb_substr( $excerpt, 0, strripos( $excerpt, " " ) );
  $excerpt = rtrim( $excerpt, ",.;:- _!$&#" );
  $excerpt = $excerpt . '<a href="'.$permalink.'" style="text-decoration: none;">&nbsp;(...)</a>';
  return $excerpt;
}

私はここからそれを得ました:

http://wordpress.org/support/topic/limit-excerpt-length-by-characters

https://stackoverflow.com/questions/10923955/make-function-that-limits-text-not-show-last-punctuation-mark

末尾に句読点を使用できず、最後の完全なWordで終了するという利点があります。

@ medhamza7 または @bainternet または @fuxia で示唆されているようにフィルターを使用することが好ましい。

4
Nicolai

この答えから関数 utf8_truncate()を使用してください そしてwp_trim_excerpt()を通してあなたの道を戦いなさい。

テストされていないサンプルコード

add_filter( 'excerpt_more', 'wpse_69436_excerpt_more' );

function wpse_69436_excerpt_more( $more )
{
    add_filter( 'wp_trim_excerpt', 'wpse_69436_trim_excerpt' );
    // we remove the more text here
    return '';
}

function wpse_69436_trim_excerpt( $excerpt )
{
    return utf8_truncate( $excerpt, 300 );
}
2
fuxia

WordPressには、excerpt_lengthという便利な名前のフィルタがあり、いくつかの文字を受け入れます。

function custom_excerpt_length( $length ) {
    return 50;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );

制限を50に変更します。

@ toschoコメントごとに更新:

それは上記の解決策が同様に言葉のためであり、文字のためではないので、ここで簡単なものです:

add_filter('the_excerpt','excerpt_char_limit');
function excerpt_char_limit($e){
    return substr($e,0,50);
}
1
Bainternet

もっと良い方法はget_the_excerptフィルタを使うことです。

function get_excerpt($excerpt="",$limit=140){

    $excerpt = preg_replace(" (\[.*?\])",'',$excerpt);
    $excerpt = strip_shortcodes($excerpt);
    $excerpt = strip_tags($excerpt);
    $excerpt = mb_substr($excerpt, 0, $limit);
    $excerpt = mb_substr($excerpt, 0, strripos($excerpt, " "));
    $excerpt = trim(preg_replace( '/\s+/', ' ', $excerpt));
    $excerpt = $excerpt.'...';
    return $excerpt;
}   
add_filter('get_the_excerpt',"get_excerpt");

$limit=140を必要な文字数に変更します。あなたが別の方法でしたい場合も:

add_filter('get_the_excerpt',function ($excerpt="",$limit=140){

    $excerpt = preg_replace(" (\[.*?\])",'',$excerpt);
    $excerpt = strip_shortcodes($excerpt);
    $excerpt = strip_tags($excerpt);
    $excerpt = mb_substr($excerpt, 0, $limit);
    $excerpt = mb_substr($excerpt, 0, strripos($excerpt, " "));
    $excerpt = trim(preg_replace( '/\s+/', ' ', $excerpt));
    $excerpt = $excerpt.'...';
    return $excerpt;
});

これは既存の関数名get_excerptのような衝突を避けるためです。

1
med amine hamza