У меня есть код, который вызывает, get_the_title()
и это работает, но get_the_excerpt()
вернуть пусто. Как я могу заставить это работать?
Этот код находится внутри плагина под названием «Протокол WP Facebook Open Graph». Вот часть, которую я хочу изменить:
if (is_singular('post')) {
if (has_excerpt($post->ID)) {
echo "\t<meta property='og:description' content='".esc_attr(strip_tags(get_the_excerpt($post->ID)))."' />\n";
}else{
echo "\t<meta property='og:description' content='". [?] ."' />\n";
}
}else{
echo "\t<meta property='og:description' content='".get_bloginfo('description')."' />\n";
}
Здесь has_excerpt
всегда терпят неудачу и get_the_excerpt($post->ID)
больше не работают (не рекомендуется).
Итак, как я могу отобразить отрывок там?
PS: я использую плагин "Advanced Excerpt"
my_excerpt($post->post_content, get_the_excerpt())
и используяmy_excerpt()
функцию из wordpress.stackexchange.com/questions/6961/…the_post()
функцию (она работает и для шаблона одного сообщения), прежде чем вызыватьget_the_excerpt()
ее, чтобы настроить необходимые данные.Ответы:
Я нашел этот вопрос, когда смотрел, как это сделать без объекта post.
Мое дополнительное исследование подняло эту ловкую технику:
$text = apply_filters('the_excerpt', get_post_field('post_excerpt', $post_id));
источник
$post
глобальной переменной.$post_id
установлено (какое значение$post_id
? И$post_id
является действительным, законным идентификатором сообщения.Поскольку кажется, что у вас уже есть объект post, для которого вам нужна выдержка, вы можете просто заставить вещи работать:
setup_postdata()
Функция глобализировать$post
объект и сделать его доступным для регулярной старой функции цикла. Когда вы находитесь внутри цикла, вы звоните,the_post()
и он настраивает все для вас ... вне цикла вам нужно принудительно вызвать его вручную.источник
$post
переменную, в противном случае функции вродеthe_title()
не будут работать должным образом».global $post;$post = $post_object;setup_postdata( $post );$excerpt = get_the_excerpt();
setup_postdata($post);
FTW !!!!Попробуй это:
Создайте новую функцию в functions.php и затем вызывайте ее откуда угодно.
Вот пост, описывающий код.
источник
Теперь вы можете просто использовать
get_the_excerpt( $postID )
функцию. С тех пор: в WordPress 4.5.0 введен$post
параметр.источник
wp_trim_excerpt
фильтр вернет выдержку для текущей записи.получил его, используя
my_excerpt($post->post_content, get_the_excerpt())
и используяmy_excerpt()
функцию из Использование wp_trim_excerpt, чтобы получить the_excerpt () вне циклаисточник
В случае, если у вас нет объекта post, вот короткая функция, подобная той, что была в Withers.
источник
Это для случаев, когда вы хотите использовать
get_the_excerpt()
вне цикла:источник
Если вы хотите автоматически сгенерировать отрывок из содержания в одну строку - вы можете использовать
wp_trim_words
такую функцию:источник
источник