web-dev-qa-db-ja.com

wordpressの複数の抜粋長

タイトルにあるように、WordPressで複数の抜粋を探しています。

Functions.phpでこれを実行できることを理解しています。

function twentyten_excerpt_length( $length ) {
    return 15;
}
add_filter( 'excerpt_length', 'twentyten_excerpt_length' );

私が知りたいのは、これらの複数がそれぞれ異なる数値を返すようにする方法です。これにより、サイドバーループの短い抜粋、注目のループの長い抜粋、および主要記事の最長の抜粋を取得できます。

テンプレートでこれらを使用するようなもの:

<?php the_excerpt('length-short') ?>
<?php the_excerpt('length-medium') ?>
<?php the_excerpt('length-long') ?>

乾杯、デイブ

63
davebowker

どうですか...

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(']]>', ']]&gt;', $content);

    return $content;
}

次に、テンプレートコードで使用します。

<?php echo excerpt(25); ?>

from: http://bavotasan.com/tutorials/limited-the-number-of-words-in-your-excerpt-or-content-in-wordpress/

95
Marty

今のところ、マーティの返信をアップグレードできます。

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

この方法でカスタム「続きを読む」リンクを定義することもできます。

function custom_read_more() {
    return '... <a class="read-more" href="'.get_permalink(get_the_ID()).'">more&nbsp;&raquo;</a>';
}
function excerpt($limit) {
    return wp_trim_words(get_the_excerpt(), $limit, custom_read_more());
}
70
Michał Rybak

これが私が思いついたものです。

これを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);
}

このように使用できます。

my_excerpt('short'); // calls the defined short excerpt length

my_excerpt(40); // 40 chars

これは、1つの関数から呼び出し可能なフィルターを追加する最も簡単な方法です。

26
Baylor Rae'

私もこの機能を探していましたが、ここでの機能のほとんどは優れた柔軟性を備えています。私自身の場合、特定のページでのみ異なる抜粋長を示すソリューションを探していました。私はこれを使用しています:

function custom_excerpt_length( $length ) {
    return (is_front_page()) ? 15 : 25;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );

このコードをテーマのfunctions.phpファイル内に貼り付けます。

10
Olaf

マーティの返信に戻ります。

この返信が公開されてから1年以上が経過していることは知っていますが、遅かったほうがましです。これがWordPressデフォルトの55を超える制限で動作するには、この行を置き換える必要があります。

     $excerpt = explode(' ', get_the_excerpt(), $limit);

この行で:

     $excerpt = explode(' ', get_the_content(), $limit);

それ以外の場合、この関数は、すでにトリミングされたテキストでのみ機能します。

5
0x61696f

Functions.phpファイルにこの関数を追加できます

function custom_length_excerpt($Word_count_limit) {
    $content = wp_strip_all_tags(get_the_content() , true );
    echo wp_trim_words($content, $Word_count_limit);
}

次に、テンプレートで次のように呼び出します

<p><?php custom_length_excerpt(50); ?>

wp_strip_all_tagsは、浮遊HTMLタグがページを壊さないようにする必要があります。


機能に関するドキュメント

5
Mike Grace

wp_trim_wordsこちらを参照 を使用できるようになったと思います。この関数を使用するためにどのような余分なデータのエスケープとサニタイズが必要かはわかりませんが、面白そうです。

4
Tri Nguyen

ここで、コンテンツまたは抜粋を制限する簡単な方法

$content = get_the_excerpt();
$content = strip_tags($content);    
echo substr($content, 0, 255);

内容が必要な場合は、get_the_content()でget_the_excerpt()を変更します。

よろしく

3
Mohammed

これらの方法の一部を使用する場合は注意してください。すべての人がhtmlタグを削除するわけではありません。つまり、誰かが投稿の最初の文にビデオ(またはURL)へのリンクを挿入すると、ビデオ(またはリンク)が抜粋に表示され、ページが爆破されます。

1
Doug Hucker

これを行うことができる素晴らしいプラグインを見つけました- コンテンツと抜粋ワード制限

0
Adam Storr

短いコードを作成することは可能です、私はそれを試しませんでしたが、その構造についての主なアイデアをあなたのために書きました

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

あなたはそれを次のように使うことができます

[the_excerpt_sc exlength="medium"]
0
usama sulaiman

高度な抜粋を使用
http://wordpress.org/extend/plugins/advanced-excerpt/ プラグイン。私もこのページから答えを見つけました。

0
Hirantha

私はこれが本当に古いスレッドであることを知っていますが、私はこの問題に苦労しました。一つには、私自身の「excerpt_more」フィルターが常に切断されていました。

私がそれを解決した方法は地獄のようにいですが、それは私が見つけることができる唯一の実用的なソリューションです。さは、WP core(!!)+さらに別のグローバル変数の使用の4行を変更することを伴います(ただし、WPはこれを非常に多く行いますが、 t気分が悪い)。

私が変更され wp_trim_excerptこれにwp-includes/formatting.phpで:

<?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(']]>', ']]&gt;', $text);
        $excerpt_length = apply_filters('excerpt_length', $len);
        $excerpt_more = apply_filters('excerpt_more', ' ' . '[&hellip;]');
        $text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
    }
    $excerpt_length = null;
    return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}

唯一の新しいものは$excerpt_lengthおよび$lenビット。

デフォルトの長さを変更したい場合、テンプレートでこれを行います:

<?php $excerpt_length = 10; the_excerpt() ?>

コアを変更するのは恐ろしい解決策なので、誰かがもっと良いものを思いついたかどうか知りたいです。

0
powerbuoy

私はこれが好きです:

function _get_excerpt($limit = 100) {
    return has_excerpt() ? get_the_excerpt() : wp_trim_words(strip_shortcodes(get_the_content()),$limit);
}

使用法:

echo _get_excerpt(30); // Inside the loop / query

なぜ?

  • has_excerpt所定の抜粋を返す必要があります
  • そうではないので、trim words/strip shortcodes from the_content
0
l2aelba