루프 외부에서 get_the_excerpt를 사용하여 발췌


31

호출하는 코드가 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)더 이상 작동하지 않습니다 (더 이상 사용되지 않음).

그렇다면 발췌 부분을 어떻게 표시 할 수 있습니까?

추신 : 나는 또한 "고급 발췌"플러그인을 사용하고 있습니다


좋아, wordpress.stackexchange.com/questions/6961/…my_excerpt($post->post_content, get_the_excerpt()) 에서 my_excerpt()함수를 사용 하고 얻었습니다.
ariel

3
답변으로 제시된 솔루션을 추가하시기 바랍니다. 그래야 답변 할 수없는 질문으로 사이트를 괴롭히지 않습니다. :)
Rarst September

그냥 사용 the_post()하면 호출하기 전에 기능 (그것은 하나의 포스트 너무 템플릿에서 작동) get_the_excerpt()당신을 위해 설정을 할 것입니다 필요한 데이터를.
Sisir

답변:


29

포스트 객체 없이이 작업을 수행하는 방법을 찾을 때이 질문을 발견했습니다 .

내 추가 연구는이 매끄러운 기술을 밝혀 냈습니다.

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


1
루프 외부에서 데이터를 가져 오는 것이 권장되는 방법이므로 응답으로 받아 들여 져야합니다. 또한 사용자 정의 기능이나 $post전역 변수 재정의가 필요하지 않습니다 .
MacK

4
빈 문자열을 반환합니다.
Kyaw Tun

1
@KyawTun- $post_id설정 되어있는 한 작동합니다 ( $post_id? 의 값은 무엇이며 $post_id유효한 올바른 게시물 ID입니다.
cale_b

2
@cale_b 감사합니다. get_posts 쿼리를 사용하고 결과 배열에서 ID를 얻습니다. 게시물 개체에 post_title, post_content, ID 등이 있지만 작동하지 않습니다.
Kyaw Tun

the_excerpt 필터에 포함 된 <p> 태그가 아닌 TEXT가 필요한 경우 "get_the_excerpt"필터를 사용하여 위 필터가 다음과 같이되도록합니다 : $ text = apply_filters ( 'get_the_excerpt', get_post_field ( 'post_excerpt', $ post_id) ); 이렇게하면 마크 업의 어느 곳에 나 삽입 할 수있는 RAW 텍스트 만 제공됩니다.
Mohsin

22

발췌가 필요한 포스트 객체가 이미있는 것처럼 보이므로 작업을 강제로 수행 할 수 있습니다.

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

setup_postdata()함수는 $post객체 를 전역 화하여 기존의 오래된 루프 기능에 사용할 수있게합니다. 루프 내부에 있으면 호출 the_post()하고 루프 외부에서 수동으로 설정해야합니다.


1
"하지만 전역 $post변수에 대한 참조를 전달해야합니다 . 그렇지 않으면 the_title()제대로 작동하지 않습니다." global $post;$post = $post_object;setup_postdata( $post );$excerpt = get_the_excerpt();
디치

setup_postdata($post);FTW !!!!
squarecandy

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;
}

다음은 코드를 설명하는 게시물입니다.


1
내 친구를 찾으십시오. 왜 WordPress가 그러한 중요한 기능을 더 이상 사용하지 않았는지 이해하지 못했습니다. 이것은 효과적으로 처음부터 다시 작성하지만 작동합니다. 소셜 공유 플러그인과 같은 기능으로 루프 외부에서 발췌를 사용하는 빈도를 감안할 때 아마도 핵심 부분으로 남아 있었을 것입니다.
명령 아이디어

1
EAMann의 답변은이 문제에 대한 훨씬 더 나은 접근 방법이며 최선의 방법으로 고려해야합니다. 이 접근법은 기본적으로 API를 사용하는 대신 Core의 내부를 복제합니다.
Ian Dunn

9

이제 간단하게 get_the_excerpt( $postID )기능을 사용할 수 있습니다 . 이후 : WordPress 4.5.0에서 $post매개 변수가 도입되었습니다 .


1
우리가 WP 4.5 + 시대에 있기 때문에 이것은 새로운 대답입니다.
Matija Mrkaic 2016 년

18
wp_trim_excerpt필터가 현재 게시물의 발췌를 반환하므로 발췌 가 비어 있으면 작동하지 않습니다 .
Dylan

9
@Dylan의 말에 대한 자세한 내용 은 core.trac.wordpress.org/ticket/36934 를 참조하십시오
kraftner

5

그것을 사용 가지고 my_excerpt($post->post_content, get_the_excerpt())와 사용 my_excerpt()에서 기능을 루프 외부 () the_excerpt 얻을 wp_trim_excerpt을 사용하여


2
링크 전용 답변은 좋지 않습니다. 관련 코드를 여기에 복사하십시오. 해당 링크가 끊어지면 해당 사이트가 다운 / 사라지면이 답변에는 아무런 가치가 없습니다.
cale_b

그것은 나를 위해 완벽하게 작동했습니다!
Saikat

1

포스트 오브젝트가없는 경우 Withers의 함수와 같은 짧은 함수가 있습니다.

function get_excerpt_by_id($post_id){
    $the_post = get_post($post_id);
    $the_excerpt = $the_post->post_excerpt; 
    return $the_excerpt;
}

그러나 asker는 질문에 명시된 포스트 객체를 가지고 있습니다.
fuxia

3
내가 틀렸다면 바로 잡으십시오.이 방법은 수동 발췌를 반환하지만 필요한 경우 생성 하지 않습니다
Bill

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;
}

이것이 가장 직접적인 방법입니다. 그래도 성능 측면에서는 훌륭하지 않습니다. 당신은 여전히 ​​내 +1을 얻습니다
Bill

1

한 줄의 내용에서 자동으로 발췌를 생성하려면 다음과 같은 wp_trim_words기능 을 사용할 수 있습니다 .

// 30 is the number of words ehere
$excerpt = wp_trim_words(get_post_field('post_content', $post_id), 30);

-1
$trimexcerpt = get_the_content();
$shortexcerpt = wp_trim_words( $trimexcerpt, $num_words = 18, $more = '… ' ); 
echo $shortexcerpt;

제발 편집 답변을 하고, 설명을 추가 : 문제를 해결할 수있는?
fuxia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.