Вопрос или проблема
Проблема, с которой я сталкиваюсь, заключается в том, что the_excerpt()
не возвращает содержимое из поля “Аннотация” поста. Вместо этого он возвращает первые 55 слов поста, как будто поле “Аннотация” пустое.
Мой код очень прост – внутри цикла я имею:
if( has_excerpt() ) {
the_excerpt();
} else {
the_content();
}
Есть ли что-то, что нужно сделать, чтобы сказать WordPress использовать поле “Аннотация”.
Вы пробовали использовать пример из кодекса?
if ( ! has_excerpt() ) {
the_content();
} else {
the_excerpt();
}
@shanebp – да, я это сделал, но это показывает аннотацию из 55 слов.
Я решил это следующим образом ..
Я обнаружил, что аннотация хранится в поле класса WP_Post post_excerpt, так что я получил ее напрямую с помощью …
$the_post = get_post();
$post_excerpt = apply_filters('the_excerpt', $the_post->post_excerpt);
echo $post_excerpt;
Я был бы рад услышать от кого-либо, есть ли лучший способ, а также почему the_excerpt() не возвращает содержимое этого поля.
Спасибо
.
Ответ или решение
Проблема, с которой вы столкнулись, на самом деле часто встречается среди разработчиков, работающих с WordPress. Функция the_excerpt()
предназначена для отображения содержимого поля "Excerpt" (выдержка) поста. Однако, если она возвращает первые 55 слов содержимого поста, это может означать, что поле "Excerpt" отсутствует или не заполнено.
Почему the_excerpt()
не возвращает содержимое поля "Excerpt"?
-
Проверка наличия содержания в поле "Excerpt": Функция
the_excerpt()
автоматически генерирует краткую выдержку из текста поста, если поле "Excerpt" не заполнено. Поэтому, если оно пустое, WordPress использует первые 55 слов поста как содержимое для вывода. -
Кэширование: Возможно, что кэширование влияет на вывод. В некоторых случаях, несмотря на наличие текста в поле "Excerpt", кэшированные данные могут не обновляться. Это может затруднить появление актуальной информации.
-
Правильная настройка: Убедитесь, что вы корректно заполняете поле "Excerpt" во время создания или редактирования поста. Если поле не заполнено, WordPress по умолчанию отобразит первые 55 слов содержимого поста.
Как корректно использовать the_excerpt()
Исходя из вашего кода, вот правильное использование функции, которое поможет избежать путаницы:
if ( has_excerpt() ) {
the_excerpt();
} else {
the_content();
}
Альтернативный метод
Как вы сами нашли, можно получить содержимое поля непосредственно из объекта поста. Этот способ может быть полезен, если вы хотите получить полный контроль над выводом. Пример кода:
$the_post = get_post();
$post_excerpt = apply_filters('the_excerpt', $the_post->post_excerpt);
echo $post_excerpt;
Этот подход позволяет вам непосредственно получать доступ к свойству post_excerpt
класса WP_Post и применять фильтры, так что вы получаете эффект такой же, как и при использовании the_excerpt()
.
Возможные решения
-
Проверка заполненности поля "Excerpt": Убедитесь, что для поста действительно заполнено поле "Excerpt".
-
Отключение кэширования: Попробуйте временно отключить все плагины кэширования и посмотрите, влияет ли это на вывод.
-
Тестирование других тем: Иногда темы могут переопределять поведение стандартных функций WordPress. Попробуйте временно активировать стандартную тему (например, Twenty Twenty-Three) и посмотрите, сохраняется ли проблема.
-
Обновление WordPress: Если ваша версия WordPress устарела, может помочь обновление до последней версии, что также может решить потенциальные проблемы с функционалом.
Заключение
Функция the_excerpt()
может не показывать содержимое поля "Excerpt", если это поле не заполнено. В вашем случае, прямой доступ к объекту поста – это надёжный способ извлечь нужную информацию. Если проблема сохраняется, рекомендуем провести дополнительные проверки, чтобы исключить другие факторы, влияющие на поведение функции.