Получить отрывок, используя get_the_excerpt вне цикла

У меня есть код, вызывающий get_the_title(), и он работает, но get_the_excerpt() возвращает пустой. Как я могу заставить его работать?

Этот код находится внутри плагина под названием «WP Facebook Open Graph protocol». Вот часть, которую я хочу изменить:

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»

29 голосов | спросил ariel 24 AM00000030000003931 2011, 03:55:39

9 ответов


5

получил его с помощью my_excerpt($post->post_content, get_the_excerpt()) и используя функцию my_excerpt() из Использование wp_trim_excerpt для получения the_excerpt () вне цикла

ответил ariel 13 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 13 Sep 2011 09:44:24 +0400 2011, 09:44:24
26

Я нашел этот вопрос, посмотрев, как сделать это без объекта post.

Мои дополнительные исследования показали эту технику:

$text = apply_filters('the_excerpt', get_post_field('post_excerpt', $post_id));

ответил cale_b 18 J0000006Europe/Moscow 2014, 19:33:10
20

Так как кажется, что у вас уже есть объект post, для которого требуется отрывок, вы можете просто заставить работать:

setup_postdata( $post );
$excerpt = get_the_excerpt();

Функция setup_postdata() будет глобализовать объект $post и сделать его доступным для обычной старой функции цикла. Когда вы находитесь внутри цикла, вы вызываете the_post(), и он устанавливает все для вас ... вне цикла вам нужно принудительно его вручную.

ответил EAMann 9 J0000006Europe/Moscow 2012, 03:06:40
18

Попробуйте следующее:

Создайте новую функцию в functions.php, а затем вызовите ее где угодно.

function get_excerpt_by_id($post_id){
    $the_post = get_post($post_id); //Gets post ID
    $the_excerpt = $the_post->post_content; //Gets post_content to be used as a basis for the excerpt
    $excerpt_length = 35; //Sets excerpt length by word count
    $the_excerpt = strip_tags(strip_shortcodes($the_excerpt)); //Strips tags and images
    $words = explode(' ', $the_excerpt, $excerpt_length + 1);

    if(count($words) > $excerpt_length) :
        array_pop($words);
        array_push($words, '…');
        $the_excerpt = implode(' ', $words);
    endif;

    $the_excerpt = '<p>' . $the_excerpt . '</p>';

    return $the_excerpt;
}

Вот после описания кода.

ответил Withers Davis 9 J0000006Europe/Moscow 2012, 03:02:37
9

Теперь вы можете просто использовать get_the_excerpt( $postID ) . Поскольку: WordPress 4.5.0 представил параметр $post.

ответил docker 20 Maypm16 2016, 14:07:23
1

Если у вас нет объекта post, вот короткая функция, как у Withers.

function get_excerpt_by_id($post_id){
    $the_post = get_post($post_id);
    $the_excerpt = $the_post->post_excerpt; 
    return $the_excerpt;
}
ответил OKParrothead 25 72012vEurope/Moscow11bEurope/MoscowSun, 25 Nov 2012 23:28:20 +0400 2012, 23:28:20
1

Это нужно, если вы хотите использовать get_the_excerpt() вне цикла:

function custom_get_excerpt($post_id) {
    $temp = $post;
    $post = get_post($post_id);
    setup_postdata($post);

    $excerpt = get_the_excerpt();

    wp_reset_postdata();
    $post = $temp;

    return $excerpt;
}
ответил Gixty 1 +04002014-10-01T03:17:27+04:00312014bEurope/MoscowWed, 01 Oct 2014 03:17:27 +0400 2014, 03:17:27
0

Если вы хотите автоматически генерировать выдержку из содержимого в одной строке - вы можете использовать wp_trim_words :

wp_trim_words
ответил Picard 15 Maypm17 2017, 21:25:17
-1
$trimexcerpt = get_the_content();
$shortexcerpt = wp_trim_words( $trimexcerpt, $num_words = 18, $more = '… ' ); 
echo $shortexcerpt;
ответил Rinzler 14 MarpmWed, 14 Mar 2018 19:53:02 +03002018-03-14T19:53:02+03:0007 2018, 19:53:02

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132