web-dev-qa-db-ja.com

抜粋をIDでGET

タイトルや他のほとんどの要素のようにIDで抜粋を取得できないのはなぜですか。

例えば。 get_the_excerpt(ID) $ post-> post_excerpt関数と一緒に使う方法は知っていますが、抜粋が入力されていないと内容の一部が返されません。単純に何も返されません。

ですから、私がやろうとしているのは、抜粋がある場合はIDで抜粋を取得し、そのIDを持つ抜粋はないがコンテンツがある場合は、代わりにコンテンツを取得することです。

どのようにそれをするでしょう。

何か案は、

素晴らしい...

編集 -

要求どおりにループソースコード。

<?php $stories = get_posts('category_name=feedback&numberposts=4'); 
            foreach ($stories as $post) :
            $title = $post->post_title;
            $excerpt = get_the_excerpt_id($post->ID);
            $thumb = get_the_post_thumbnail($post->ID,array(60, 60, true));?>
              <div class="textstandard_white" style="font-size:14px; line-height:22px; padding-top:10px;"><b><a href="<?php echo get_permalink($post->ID);?>"><?php echo $title;?></a></b></div><div align="left" style="height:18px; width:82px; background:url(http://www.divethegap.com/update/z-images/structure/icons/stars.png) left top no-repeat;"><div id="stars<?php echo $post->ID;?>" align="left" style="height:18px; background:url(http://www.divethegap.com/update/z-images/structure/icons/stars_glow.png) left top no-repeat;">
                  </div>
                  </div>

                  <script type="text/javascript">
                var width<?php echo $post->ID;?> = ((<?php
$Rating = get_post_meta($post->ID, "Rating", true);
echo $Rating;
?> * 20) + '%')
                  $('#stars<?php echo $post->ID;?>').css('width', width<?php echo $post->ID;?>);

                 </script><div class="textstandard_white" style="padding-top:6px; font-size:10px; color:#BBB; padding-bottom:10px; border-bottom:1px dotted #BBB; min-height:70px;"><div style="float:left; padding-right:6px; padding-bottom:6px;"><div style="background:#FFF; border:1px solid #FFF;
border-radius: 4px; -moz-border-radius: 4px ; -webkit-border-radius: 4px; padding:4px;"><a href="<?php echo get_permalink($post->ID);?>"><?php echo $thumb;?></a></div></div>



<?php echo $excerpt;?></div>
              <?php endforeach;?>
31
Robin I Knight

こんにちは @Robin I. Knight:

私はget_the_excerpt()をレガシーデザインの関数と見なします。 WordPressの使用が増えるにつれて、それが収まらないが、異なるデータを取得するための新しい機能が機能する、より新しいユースケースが数多くあります。一例として、$args配列の関数オプションが現在頻繁に使用されています。

しかし、それはあなたのニーズに合わせて修正するのは簡単です。テーマのfunctions.phpファイルのどこにでも置くことができる、あなたが使うことができる代替の関数があります:

function robins_get_the_excerpt($post_id) {
  global $post;  
  $save_post = $post;
  $post = get_post($post_id);
  $output = get_the_excerpt();
  $post = $save_post;
  return $output;
}

私はそれをテストしませんでした、しかし私がそれを正しくしたのはかなり確実です。これがあなたのニーズを満たさないならば、詳しく書いてください、そして多分私は他の提案をすることができます。

20
MikeSchinkel

抜粋の仕組みは非常にわかりにくいです。それはあなたの質問に対する正確な答えではありませんが、一般的に、Loop特有のテンプレートタグをget_posts()によって返される配列で動作させる必要があるならば、あなたはこのようにLoopをエミュレートすることができます:

$stories = get_posts(); 

foreach ($stories as $post) {

    setup_postdata($post);

    // stuff
}
wp_reset_postdata();
16
Rarst

3.3.0から新しい機能があります: wp_trim_words

私は次のようにループの外側でそれを使っています:

 <?php if ( $post_id ) {
 $post = get_post( $post_id );
 if ( $post ) { ?>
     <h2><?php echo $post->post_title; ?></h2>
     <p><em><?php echo wp_trim_words( $post->post_content ); ?></em></p>
     <p><strong>This article can only be read by subscribers.</strong></p>
 <?php } } ?>

これは内部でthe_content()を呼び出すので、明らかにループ内でのみ機能する wp_trim_excerpt と混同しないでください。

8
lkraav

MikeSchinkelの答えに付け加えると、どういうわけか私にはうまくいかないでしょう。私はそれを機能させるためにsetup_postdata行を追加しなければなりませんでした。

function get_the_excerpt( $post_id ){

  global $post;  
  $save_post = $post;
  $post = get_post($post_id);
  setup_postdata( $post ); // hello
  $output = get_the_excerpt();
  $post = $save_post;
  return $output;

}

あなたがループの外でこれを使っているなら、それは進行中の他のsetup_postdataを妨げるべきではないと思います。

乾杯

6
danbrown

@ Maximeの答えに基づいて、これはうまくいくでしょうか。

$post = get_post( $id );

$excerpt = ( $post->post_excerpt ) ? $post->post_excerpt : $post->post_content;

それは私には十分単純明快に思えますが、私は何かが足りないかどうか疑問に思います。

2
Dominic P

_ all _ あなたの投稿に<!--more-->タグがある場合は、上記のコードで以下を使用できます。

$sjc_excerpt = explode( '<!--more-->', $post->post_content); 
echo wpautop( $sjc_excerpt[0] );

<!--more-->タグが付いていない投稿がある場合はもちろん、それらの全体が表示されます。私の状況ではうまくいきますが、すべての人には当てはまりません...

1
Stephen Cronin

私はget_the_excerpt()をレガシーデザインの関数と見なします。 WordPressの使用が増えるにつれて、それが収まらないが、異なるデータを取得するための新しい機能が機能する、より新しいユースケースが数多くあります。一例として、$args配列の関数オプションが現在頻繁に使用されています。

しかし、それはあなたのニーズに合わせて修正するのは簡単です。テーマのfunctions.phpファイルのどこにでも置くことができる、あなたが使うことができる代替の関数がここにあります:

function robins_get_the_excerpt($post_id) {
   global $post;  
   $save_post = $post;
   $post = get_post($post_id);
   $output = get_the_excerpt();
   $post = $save_post;
   return $output;
}

MikeSchinkelの答えに付け加えると、どういうわけか私にはうまくいかないでしょう。私はそれを機能させるためにsetup_postdata行を追加しなければなりませんでした。

1
Jude

WP 4.5.0から、投稿IDをパラメータとして使用することが可能ですget_the_excerpt( $post->ID )

ソース: https://developer.wordpress.org/reference/functions/get_the_excerpt/

0
Jorge Cordero

これは私のために働いた:

$excerpt = apply_filters('the_excerpt', get_post_field('post_excerpt', $post_ide));
0
Rijo K P

これは、私がwp_trim_wordsを利用して、よく使う小さな2行です。私は常に自分自身がその略語を必要としていることを知り、ループの外でより多くの機能を読んでいます。他の誰かがこれが役に立つと思うかもしれません。だからこれは私がに使用するものです:

  1. 抜粋をPOST IDで取得
  2. 抜粋が設定されていない場合は、投稿コンテンツを取得します。
  3. 抜粋の単語長を設定する
  4. 続きを読む(リンク/テキスト)のコンテンツを選択してください

このインラインを直接編集中のカスタムテンプレートに配置します。

    //Get Post Object
    $dapost = get_post(POST_ID);              
    //Get the Execerpt
    $my_excerpt = wp_trim_words( apply_filters( "the_excerpt", get_the_excerpt($dapost) ? get_the_excerpt($dapost) : $dapost->post_content  ), "20", "<a href='$dapost->guid'> ".__('Get More Stuff', 'translation')."</a>" );

壊す

抜粋コンテンツ

投稿IDで抜粋を取得しますが、抜粋が設定されていない場合は投稿内容を取得します。

私はIf/Else PHP速記を使っています

    $dapost = get_post(POST_ID);    
    apply_filters( "the_excerpt", get_the_excerpt($dapost) ? get_the_excerpt($dapost) : $dapost->post_content

ワード長

抜粋の単語数を 20 に設定します。

    "20"

3. ReadMore Content(Link/Text)を選択してください。

   "<a href='$dapost->guid'> ".__('Get More Stuff', 'translation')."</a>"

私はURLを取得するために$dapost->guidを使用しました。なぜなら、私はフレンドリーなURLを必要とせず、またDBへの別の呼び出しを避けたかったからです。あなたは常にget_the_permalinkを使うことができます。

Wordpressのドキュメントのwp_trim_wordsを参照してください。

0
Brev Tiw