Я чувствую, что здесь должно быть что-то довольно очевидное, но я не могу заставить WordPress сотрудничать.
Я генерирую теги OG Facebook с функцией. Все отлично работает, кроме отрывка.
Начиная с устаревания get_the_excerpt($post->ID)
, есть ли другой способ создать отрывок без необходимости создавать новый цикл? Это кажется чрезмерным для меня.
Моим первым инстинктом было использовать apply_filters()
:
$description = apply_filters('the_excerpt', get_post($post->ID)->post_content);
Это дает мне полный пост, в комплекте с HTML-форматированным контентом. Хорошо, должно быть неправильно. Поэтому я попробовал следующую логическую идею:
$description = apply_filters('get_the_excerpt', get_post($post->ID)->post_content);
Нет кости. Теперь нет HTML, но это все еще полный пост (который действительно сбивает с толку).
Хорошо, без проблем. Давайте пропустим все модные вещи и просто перейдем к сокращенной записи:
$description = wp_trim_excerpt(get_post($post->ID)->post_content);
Без изменений.
Итак, мой вопрос заключается в следующем: что, черт возьми, происходит? Здесь я что-то упускаю?
Я вошел в ядро WP, чтобы выяснить, как это the_excerpt()
работает, и оно похоже на мой вызов:
/**
* Display the post excerpt.
*
* @since 0.71
* @uses apply_filters() Calls 'the_excerpt' hook on post excerpt.
*/
function the_excerpt() {
echo apply_filters('the_excerpt', get_the_excerpt());
}
У меня есть несколько вопросов, основанных на моих выводах:
- Почему фильтр не применяется, как ожидалось?
- Есть ли способ получить отрывок вне цикла без создания нового цикла?
- Я сумасшедший?
Заранее спасибо за взгляд. Я здесь довольно тупой.
get_the_excerpt()
не считается устаревшим, просто дополнительный параметр, который был передан ему, больше не используется.Ответы:
Оказывается, ответ был в
wp_trim_excerpt()
.Это определено в
wp-includes/functions.php:1879
:Таким образом, любой переданный текст не обрабатывается; это работает только если он вызывается с пустым параметром.
Чтобы решить эту проблему, я добавил в свою тему быстрый фильтр, который решает проблему:
Это несколько избыточно, но мне нравится это лучше, чем открывать новые циклы каждый раз, когда я хочу создать отрывок.
источник
get_the_title($post->ID)
доступны. Последняя строка кода была$description = wp_trim_excerpt(get_post($post->ID)->post_content);
$content = apply_filters( 'rw_trim_excerpt', $content );
и$content = rw_trim_excerpt($content);
, но ни один из них не работал (первый не урезал вывод, и позже произвел ошибку).get_the_excerpt
обработку для мимическихthe_excerpt
, так что вы можете позвонить:apply_filters('get_the_excerpt', $content);
.Пытаться:
См .:
get_post
Кодекс для всех доступных возвращающихся членов.источник
get_the_excerpt()
не подражает этому, проверьте источник, это только доступ к переменной-члену$post
которого естьpost_excerpt
. Смотрите также ссылку на кодекс в ответе.the_excerpt
: «она будет отображать автоматическую выдержку, которая ссылается на первые 55 слов содержания сообщения». Я хочу имитировать это поведение за пределами цикла.Вы можете использовать мою пользовательскую функцию для фильтрации контента (это из NARGA Framework )
Автоматическая обрезка шорткода, HTML кода, удаление [...], добавление текста «Подробнее» (переводимый)
источник