現在の投稿に "more"タグがあるかどうかを判断する必要があります。私は現在使用しています
$pos=strpos($post->post_content, '<!--more-->');
Has_excerpt()のような組み込みメソッドがありませんか?
簡単に言えば、上のコードと同じことをする組み込み関数はありません。
ボーナスコンテンツ: その他のタグトリック
Moreタグが存在する場合はthe_content();
を、存在しない場合はthe_excerpt();
を表示するために使用できるコードを簡単にメモします。
<?php
if( strpos( $post->post_content, '<!--more-->' ) ) {
the_content();
}
else {
the_excerpt();
}
?>
( クレジット: MichaelH )
<?php
if( strpos( get_the_content(), 'more-link' ) === false ) {
the_excerpt();
}
else {
the_content();
}
?>
( Credit: Michael )基本的には #1 を逆にします。
<?php
if( preg_match( '/<!--more(.*?)?-->/', $post->post_content ) ) {
the_content();
}
else {
the_excerpt();
}
?>
( Credit: helgatheviking )strpos()
を使用できないEdgeの場合にのみ使用します。一般的にstrpos()
はpreg_match()
より効率的です。
より条件付きにする:
<?php
if ( is_home() || is_archive() || is_search() ) {
if( strpos( $post->post_content, '<!--more-->' ) ) {
the_content( __( 'Continue reading <span class="meta-nav">→</span>', 'twentytwelve' ) );
}
else {
the_excerpt();
}
}
else {
the_content();
}
?>
それは何をするの? 表示されているページがホーム、アーカイブ、または検索結果ページの場合、Moreタグが存在する場合はthe_content();
を、存在しない場合はthe_excerpt();
を表示し、その他のすべてのページにはthe_excerpt();
を表示する.
私は提供された解決策のどれもうまくいくことができませんでした、しかし、私はこれが私のためにうまくいっていると思いました。内容がティーザーを取り除いてもしなくても同じかどうかをテストするだけです。
// Choose the manual excerpt if exists
if ( has_excerpt() ) :
the_excerpt();
// Is there a more tag? Then use the teaser. ()
elseif ( get_the_content('', false) != get_the_content('', true) ) :
global $more;
$more = 0;
echo strip_tags(get_the_content( '', false ));
$more = 1;
// Otherwise make an automatic excerpt
else :
the_excerpt(40);
endif;
もっとWP関連した答えを探している人のために、この論理を使うことができます:
$info = get_extended($post->post_content);
if(!empty($info["extended"])){
// it has a read more tag.
}else{
// it hasn't one.
}
このため、WP Coreが正しく機能しない場合は、これを責めることができます。 :)
参照: https://developer.wordpress.org/reference/functions/get_extended/