Есть ли метод has more tag() или его эквивалент?


Мне нужно определить, есть ли в текущем сообщении тег "больше". В настоящее время я использую

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

Мне не хватает встроенного метода, аналогичного has_excerpt()?

Author: N2Mystic, 2012-01-05

4 answers

Проще говоря: нет встроенной функции, которая делает то же самое, что и ваш код выше.

Бонусный контент: Больше трюков с тегами

 2
Author: Scott, 2012-01-05 17:16:17

Быстро запишем коды, которые мы могли бы использовать, чтобы показать the_content();, существует ли тег More, и the_excerpt();, если его нет.

Код #1 (Рекомендуется)

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

( Кредит: Майкл)

Код #2

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

( Кредит: Майкл) В основном делает #1 все наоборот.

Код #3

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

( Кредит: helgatheviking) Для использования только в крайних случаях, когда вы не можете использовать strpos(). Как правило, 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();
    }
?>

Что он делает? Если показанная страница является домашней, архивной или страницей результатов поиска, затем покажите the_content();, если существует тег More, the_excerpt();, если его нет, и просто покажите the_excerpt(); на всех других страницах.

 9
Author: its_me, 2017-04-13 12:37:38

Я не смог заставить какое-либо из предоставленных решений работать, однако я обнаружил, что это хорошо работает для меня, опубликовав его в качестве дополнительного решения, если у кого-то еще возникли проблемы с его работой. Просто проверяю, совпадает ли контент с тизером и без него.

        // 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
Author: Ole Kristian Losvik, 2017-05-12 07:23:14

Для тех, кто ищет более связанный с WP ответ, вы можете использовать эту логику:

$info = get_extended($post->post_content);
if(!empty($info["extended"])){
   // it has a read more tag.
}else{
   // it hasn't one.
}

За это вы можете обвинить ядро WP, если оно работает неправильно.:)

Ссылка: https://developer.wordpress.org/reference/functions/get_extended/

 0
Author: tpaksu, 2019-01-11 14:47:30