web-dev-qa-db-ja.com

手動の抜粋の長さを制御する方法

表示された抜粋の長さを制御する必要があるWebサイトがあります。投稿の一部は手動で抜粋しているため、excerpt_lengthフィルタは使用できません。

もちろん、私はなんらかのsubstr()を使うことができますが、もっとエレガントな解決策を探していました(もしあれば)。

6
hannit cohen

ここに私の答えを見てみましょう: あなたのfunctions.phpファイルのためのコードのベストコレクション

私があなたの質問を正しく理解していれば、それはあなたが探していることです。

これをfunctions.phpに配置します。

function excerpt($num) {
    $limit = $num+1;
    $excerpt = explode(' ', get_the_excerpt(), $limit);
    array_pop($excerpt);
    $excerpt = implode(" ",$excerpt)."... (<a href='" .get_permalink($post->ID) ." '>Read more</a>)";
    echo $excerpt;
}

次に、あなたのテーマの中で、<?php excerpt('22'); ?>というコードを使って抜粋を22文字に制限しましょう。

:)

6
Martin-Al

最近のバージョン of Wordpress(v.3.3.0 +)では、実際に wp_trim_words を使用できます。

function excerpt($limit) {
    return wp_trim_words(get_the_excerpt(), $limit);
}

https://stackoverflow.com/a/17177847/851045 も参照してください。

6
Giraldi

私はちょうどコアがそれをどのように行うかを見てみましょう: http://phpxref.ftwr.co.uk/wordpress/wp-includes/formatting.php.source.html#l1840

コピーと貼り付けを簡単にするために、ここにコードを自由に入れました。

global $post;
if( empty($post->post_excerpt) ){
  $text = apply_filters( 'the_excerpt', get_the_excerpt() );
} else {
  $text = $post->post_excerpt;
  $text = strip_shortcodes( $text );
  $text = apply_filters('the_content', $text);
  $text = str_replace(']]>', ']]&gt;', $text);
  $text = strip_tags($text);
  $excerpt_length = apply_filters('excerpt_length', 55);
  $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
  $words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
  if ( count($words) > $excerpt_length ) {
    array_pop($words);
    $text = implode(' ', $words);
    $text = $text . $excerpt_more;
  } else {
    $text = implode(' ', $words);
  }
}
1
John P Bloch

試してみてください。以下のフィルタ「excerpt_length」を使用して、excertが出力する単語数を制御できます。さまざまな条件に基づいてサイズを制御する方法の例をいくつか示します。

add_filter( 'excerpt_length', 'new_excerpt_length' );
function new_excerpt_length( $more ) {
    if(is_front_page()){
        if(has_post_thumbnail()){
            return 15;
        } else {
            return 45;
        }
    } else {
        return 100;
    }
}

編集:がらくた、私はあなたがフィルタのアプローチはノーゴーだと言ったことに気づいた。まあ、これはGoogle経由でここに来て、そしてこれを望んでいる他の人々のためのものです。

0
Infinity Media

単にそれは以下のようにすることができます。

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

参照: コーデックス

0
Ibnul Hasan