web-dev-qa-db-ja.com

Has_more_tag()メソッドと同等のものはありますか?

現在の投稿に "more"タグがあるかどうかを判断する必要があります。私は現在使用しています

$pos=strpos($post->post_content, '<!--more-->');

Has_excerpt()のような組み込みメソッドがありませんか?

5
N2Mystic

簡単に言えば、上のコードと同じことをする組み込み関数はありません。

ボーナスコンテンツ: その他のタグトリック

1
Brady

Moreタグが存在する場合はthe_content();を、存在しない場合はthe_excerpt();を表示するために使用できるコードを簡単にメモします。

コード1(推奨)

<?php
    if( strpos( $post->post_content, '<!--more-->' ) ) {
        the_content();
    }
    else {
        the_excerpt();
    }
?>

クレジット: MichaelH

コード#2

<?php
    if( strpos( get_the_content(), 'more-link' ) === false ) {
        the_excerpt();
    }
    else {
        the_content();
    }
?>

Credit: Michael )基本的には #1 を逆にします。

コード#3

<?php
    if( preg_match( '/<!--more(.*?)?-->/', $post->post_content ) ) {
        the_content();
    }
    else {
        the_excerpt();
    }
?>

Credit: helgathevikingstrpos()を使用できない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">&rarr;</span>', 'twentytwelve' ) );
        }
        else {
            the_excerpt();
        }
    }
    else {
        the_content();
    }
?>

それは何をするの? 表示されているページがホーム、アーカイブ、または検索結果ページの場合、Moreタグが存在する場合はthe_content();を、存在しない場合はthe_excerpt();を表示し、その他のすべてのページにはthe_excerpt();を表示する.

7
its_me

私は提供された解決策のどれもうまくいくことができませんでした、しかし、私はこれが私のためにうまくいっていると思いました。内容がティーザーを取り除いてもしなくても同じかどうかをテストするだけです。

        // 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;
1

もっと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/

0
tpaksu