タイトルや他のほとんどの要素のように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;?>
こんにちは @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;
}
私はそれをテストしませんでした、しかし私がそれを正しくしたのはかなり確実です。これがあなたのニーズを満たさないならば、詳しく書いてください、そして多分私は他の提案をすることができます。
抜粋の仕組みは非常にわかりにくいです。それはあなたの質問に対する正確な答えではありませんが、一般的に、Loop特有のテンプレートタグをget_posts()
によって返される配列で動作させる必要があるならば、あなたはこのようにLoopをエミュレートすることができます:
$stories = get_posts();
foreach ($stories as $post) {
setup_postdata($post);
// stuff
}
wp_reset_postdata();
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 と混同しないでください。
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を妨げるべきではないと思います。
乾杯
@ Maximeの答えに基づいて、これはうまくいくでしょうか。
$post = get_post( $id );
$excerpt = ( $post->post_excerpt ) ? $post->post_excerpt : $post->post_content;
それは私には十分単純明快に思えますが、私は何かが足りないかどうか疑問に思います。
_ all _ あなたの投稿に<!--more-->
タグがある場合は、上記のコードで以下を使用できます。
$sjc_excerpt = explode( '<!--more-->', $post->post_content);
echo wpautop( $sjc_excerpt[0] );
<!--more-->
タグが付いていない投稿がある場合はもちろん、それらの全体が表示されます。私の状況ではうまくいきますが、すべての人には当てはまりません...
私は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行を追加しなければなりませんでした。
WP 4.5.0から、投稿IDをパラメータとして使用することが可能ですget_the_excerpt( $post->ID )
ソース: https://developer.wordpress.org/reference/functions/get_the_excerpt/
これは私のために働いた:
$excerpt = apply_filters('the_excerpt', get_post_field('post_excerpt', $post_ide));
これは、私がwp_trim_wordsを利用して、よく使う小さな2行です。私は常に自分自身がその略語を必要としていることを知り、ループの外でより多くの機能を読んでいます。他の誰かがこれが役に立つと思うかもしれません。だからこれは私がに使用するものです:
このインラインを直接編集中のカスタムテンプレートに配置します。
//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"
"<a href='$dapost->guid'> ".__('Get More Stuff', 'translation')."</a>"
私はURLを取得するために$dapost->guid
を使用しました。なぜなら、私はフレンドリーなURLを必要とせず、またDBへの別の呼び出しを避けたかったからです。あなたは常にget_the_permalinkを使うことができます。
Wordpressのドキュメントのwp_trim_wordsを参照してください。