Показывать только контент до тега more
Я использую шаблон Siren. В файле homepage.php используется этот код для отображения содержимого портфолио:
print_excerpt(200);
Но мне нужно показывать контент только до тега <!--more-->
Я попробовал использовать это:
the_content( $more_link_text, FALSE);
но это не работает. Отображается весь контент

Вы можете использовать функцию WordPress get_extended
для получения различных частей строки (части до и после тега <!--more-->
). get_extended
возвращает массив с тремя ключами, из которых важны ключи main
и extended
: $arr['main']
содержит часть перед тегом more, а $arr['extended']
— часть после тега more.
Это даст примерно следующий результат:
// Получаем содержимое записи
$content = get_post_field( 'post_content', get_the_ID() );
// Получаем части содержимого
$content_parts = get_extended( $content );
// Выводим часть перед тегом <!--more-->
echo $content_parts['main'];

Небольшое улучшение для согласованности с функцией the_content()
: echo apply_filters('the_content', $content_parts['main']);

У меня были проблемы с тем, что фильтры блоков не применялись к $content_parts['extended']
, даже при использовании apply_filters('the_content', $content_parts['extended'])
. Решением было сначала выполнить $filtered_content = apply_filters('the_content', $content)
, а затем выполнить $content_parts = get_extended( $filtered_content )
.

К сожалению, все функции в WordPress, которые должны выводить анонс (get_extended
, get_extended
), не применяют HTML-теги и не преобразуют переводы строк в абзацы, как ожидается.
Если вам нужно вывести анонс с форматированием, я рекомендую использовать следующий код:
global $more;
$more_backup = $more;
$more = 0;
the_content('');
$more = $more_backup;
С помощью этого обходного пути вы сообщаете функции the_content(), что она находится внутри цикла, получая содержимое до тега .
