Есть ли метод has more tag() или его эквивалент?
Мне нужно определить, есть ли в текущем сообщении тег "больше". В настоящее время я использую
$pos=strpos($post->post_content, '<!--more-->');
Мне не хватает встроенного метода, аналогичного has_excerpt()?
4 answers
Проще говоря: нет встроенной функции, которая делает то же самое, что и ваш код выше.
Бонусный контент: Больше трюков с тегами
Быстро запишем коды, которые мы могли бы использовать, чтобы показать 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">→</span>', 'twentytwelve' ) );
}
else {
the_excerpt();
}
}
else {
the_content();
}
?>
Что он делает? Если показанная страница является домашней, архивной или страницей результатов поиска, затем покажите the_content();
, если существует тег More, 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, если оно работает неправильно.:)
Ссылка: https://developer.wordpress.org/reference/functions/get_extended/