Как показать только первые X слов (из каждого сообщения) на главной странице?
Как вы можете сделать так, чтобы на домашней странице сайта отображались только первые X (скажем, 300) слов сообщения?
Но без использования тега "больше" или отрывков, заполненных вручную? Я ищу плагин/хак для WP 2.9 и далее.
До сих пор я сталкивался с несколькими решениями, но надеюсь на рекомендуемое решение.
Проблемы, с которыми я столкнулся до сих пор:
- Что произойдет, если тег (например) начинается со слова 295 и заканчивается после слово 301?
- Можно ли использовать другой X для домашней страницы, страницы тегов, страницы категорий и так далее?
- Можно ли сохранить формат текста? (все изображения и форматирование текста)?
- Наличие плагина требует наименьшего количества ресурсов с сервера.
3 answers
Изменить количество слов на домашней странице легко:
if( is_home() )
add_filter( 'excerpt_length', create_function( '', 'return 300;' ) );
Просто скопируйте этот код и измените условную проверку, чтобы добавить это на другие страницы. Другой вариант - просто вставить код на страницу шаблона (home.php
, tag.php
, и т.д.), так что вы знаете, что он будет установлен на правильной странице.
Использование the_excerpt()
автоматически удалит короткие коды и html из содержимого, если отрывок не предоставлен. Вы можете удалить эти фильтры, но это значительно усложняет работу с word учитывается, когда вы добавляете разметку в микс. Если вы хотите сохранить форматирование/текст/изображения, для этого предназначен тег more
. Он вставляется вручную, потому что слишком сложно автоматически определить во всех случаях, где должен быть этот разрыв.
Вы можете использовать Необычный Плагин Выдержки Для WordPress для этого и немного измените его. Он сохраняет стиль, подсчитывает слова. Вам просто нужно немного изменить это, чтобы у вас было количество слов, и, возможно, если вам не нравится многоточие, также измените окончание.
Если вам просто нужны первые 300 слов контента, вы можете легко получить его с помощью
wp_trim_words( $post->post_content, 300, '');