Показывать только контент до тега 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']);
long
У меня были проблемы с тем, что фильтры блоков не применялись к $content_parts['extended'], даже при использовании apply_filters('the_content', $content_parts['extended']). Решением было сначала выполнить $filtered_content = apply_filters('the_content', $content), а затем выполнить $content_parts = get_extended( $filtered_content ).
Bence Szalai
К сожалению, все функции в WordPress, которые должны выводить анонс (get_extended, get_extended), не применяют HTML-теги и не преобразуют переводы строк в абзацы, как ожидается.
Если вам нужно вывести анонс с форматированием, я рекомендую использовать следующий код:
global $more;
$more_backup = $more;
$more = 0;
the_content('');
$more = $more_backup;
С помощью этого обходного пути вы сообщаете функции the_content(), что она находится внутри цикла, получая содержимое до тега .