발췌하여 ID를 발췌


31

제목과 대부분의 다른 요소와 같이 ID로 발췌 할 수없는 이유는 무엇입니까?

예. get_the_excerpt (ID). 나는 그것을 $ post-> post_excerpt 함수와 함께 사용하는 방법을 알고 있지만 발췌가 입력되지 않으면 내용의 일부를 반환하지 않으며 단순히 아무것도 반환하지 않습니다.

그래서 내가하려고하는 것은 발췌가있는 경우 ID로 발췌하고, 그 ID가있는 발췌가 없지만 일부 내용이있는 경우 대신 일부 내용을 얻는 것입니다.

어떻게할까요?

어떤 아이디어라도

놀라운 ...

편집하다 --

요청 된 루프 소스 코드.

<?php $stories = get_posts('category_name=feedback&numberposts=4'); 
            foreach ($stories as $post) :
            $title = $post->post_title;
            $excerpt = get_the_excerpt_id($post->ID);
            $thumb = get_the_post_thumbnail($post->ID,array(60, 60, true));?>
              <div class="textstandard_white" style="font-size:14px; line-height:22px; padding-top:10px;"><b><a href="<?php echo get_permalink($post->ID);?>"><?php echo $title;?></a></b></div><div align="left" style="height:18px; width:82px; background:url(http://www.divethegap.com/update/z-images/structure/icons/stars.png) left top no-repeat;"><div id="stars<?php echo $post->ID;?>" align="left" style="height:18px; background:url(http://www.divethegap.com/update/z-images/structure/icons/stars_glow.png) left top no-repeat;">
                  </div>
                  </div>

                  <script type="text/javascript">
                var width<?php echo $post->ID;?> = ((<?php
$Rating = get_post_meta($post->ID, "Rating", true);
echo $Rating;
?> * 20) + '%')
                  $('#stars<?php echo $post->ID;?>').css('width', width<?php echo $post->ID;?>);

                 </script><div class="textstandard_white" style="padding-top:6px; font-size:10px; color:#BBB; padding-bottom:10px; border-bottom:1px dotted #BBB; min-height:70px;"><div style="float:left; padding-right:6px; padding-bottom:6px;"><div style="background:#FFF; border:1px solid #FFF;
border-radius: 4px; -moz-border-radius: 4px ; -webkit-border-radius: 4px; padding:4px;"><a href="<?php echo get_permalink($post->ID);?>"><?php echo $thumb;?></a></div></div>



<?php echo $excerpt;?></div>
              <?php endforeach;?>

내용의 "일부"는 정확히 무엇입니까?
kaiser

워드 프레스의 발췌 함수는 게시물의 발췌를 반환합니다. 게시물에 발췌가없는 경우 특정 개수의 콘텐츠 문자 뒤에 '...'또는 '더 읽기'또는 템플릿이 제공하는 모든 문자를 반환합니다.
Robin I Knight

1
PITA는 아니지만 커뮤니티 규칙은 서명 및 표준 폐쇄를 허용하지 않습니다. 규칙을 준수하고 모든 질문을 편집 한 후에 Jeff Atwood 가 엄격한 메시지를 보내지 않도록 "Marvellous" 를 닫는 것으로 중지하십시오 . (그리고 메신저를 쏘지 마십시오)
MikeSchinkel

답변:


20

안녕하세요 @Robin I. Knight :

get_the_excerpt()레거시 디자인의 함수로 생각합니다 . WordPress 사용이 증가함에 따라 적합하지 않지만 다른 데이터를 가져 오기위한 새로운 기능이 수행되는 새로운 사용 사례가 많이 있습니다. 한 가지 예는 현재 $args기능 옵션 배열을 자주 사용하는 것입니다 .

그러나 필요에 따라 쉽게 고칠 수 있습니다. 다음은 테마 functions.php파일 의 어느 곳에 나 넣을 수있는 대체 함수입니다 .

function robins_get_the_excerpt($post_id) {
  global $post;  
  $save_post = $post;
  $post = get_post($post_id);
  $output = get_the_excerpt();
  $post = $save_post;
  return $output;
}

나는 그것을 테스트하지는 않았지만 내가 올바르게 그것을 확신합니다. 이것이 귀하의 요구를 충족시키지 못하면 자세히 설명하고 다른 제안을 할 수 있습니다.


작동합니다. 일종의. 매우 이상한 결과. 그것은 분명히 그 기능을 수행하고 있지만 결과는 이상합니다. GET_Posts와 함께 사용하고 있으며 어떤 이유로 상위 2 개의 get post가 항상 동일합니다. 여기에 링크가 있으며 당신은 내가 무엇을 의미하는지 볼 것입니다. 오른쪽에있는 4 개의 게시물을보십시오. divethegap.com/update/community/feedback/2010/06/steve-riches
Robin I Knight

@Robin I Knight : 루프 소스 코드를 질문에 대한 업데이트로 게시하십시오. 코드를 보지 않고 코드를 디버깅하는 것은 매우 어렵습니다. 문제를 일으키는 플러그인 일 수도 있습니다. 한 번에 하나씩 비활성화하십시오.
MikeSchinkel

위의 문제의 루프 소스 코드 ^^
Robin I Knight

BTW 함수 이름을 get_the_excerpt_id ($ post_id)로 변경했습니다
Robin I Knight

@Robin I Knight-루프에 아무것도 보이지 않지만 setup_postdata($post)@Rarst가 제안한 것처럼 루프 시작 부분에 전화 를 시도 할 수 있습니다 . 그래도 작동하지 않으면 플러그인 일 수 있습니다. 당신은 그것을 시도 했습니까? 그리고 get_the_excerpt_id()나중에 WordPress에서 해당 기능을 추가하고 사이트를 손상시킬 수 있기 때문에 호출하고 싶지 않을 것입니다 . 그리고 foreach($stories as $story): global $post; $post = $story;대신 루프를 사용하여 함수를 사용하지 않고도 할 수 있습니다.
MikeSchinkel

16

발췌의 역학은 매우 혼란 스럽습니다. 그것은 당신의 질문에 대한 정확한 대답은 아니지만 일반적으로 Loop와 관련된 템플릿 태그를 만들어야하는 경우 반환 된 배열로 작업 get_posts()하면 다음과 같이 Loop를 에뮬레이트 할 수 있습니다.

$stories = get_posts(); 

foreach ($stories as $post) {

    setup_postdata($post);

    // stuff
}
wp_reset_postdata();

wp_reset_query ()는 어떻습니까? ?
cwd

1
setup_postdata()글로벌 쿼리 사용 만 영향을받지 않고 게시물 데이터 만 재설정 해야하는 경우 @cwd
Rarst

이 솔루션은 게시물을 다른 var에 저장하고 다른 게시물을 다시 작성하여 전역으로 가져 오는 것보다 깨끗합니다. +1
Barry Kooij

@Rarst 덕분에 도움이되었습니다. setup_postdata ($ post) 추가; 내 문제를 해결
Simon

8

3.3.0부터 새로운 기능이 있습니다 : wp_trim_words

루프 외부에서 다음과 같이 사용하고 있습니다.

 <?php if ( $post_id ) {
 $post = get_post( $post_id );
 if ( $post ) { ?>
     <h2><?php echo $post->post_title; ?></h2>
     <p><em><?php echo wp_trim_words( $post->post_content ); ?></em></p>
     <p><strong>This article can only be read by subscribers.</strong></p>
 <?php } } ?>

내부적으로 the_content ()를 호출하기 때문에 루프 내에서만 작동 하는 wp_trim_excerpt 와 혼동하지 마십시오 .


6

MikeSchinkel의 답변에 추가하면 어떤 이유로 든 작동하지 않습니다. setup_postdata 줄을 추가해야 작동합니다.

function get_the_excerpt( $post_id ){

  global $post;  
  $save_post = $post;
  $post = get_post($post_id);
  setup_postdata( $post ); // hello
  $output = get_the_excerpt();
  $post = $save_post;
  return $output;

}

루프 외부에서 이것을 사용하는 경우 다른 setup_postdata를 방해하지 않아야한다고 가정합니다.

건배


MikeSchinkel의 답변을 시도했지만 효과가 없었습니다. 게시물 데이터를 설정하는 것이 트릭이었습니다. 내 경우에는 'setup_postdata'가 없으면 함수가 상위 게시물의 제목 + 발췌를 반환했습니다.
turzifer

2

@Maxime의 답변을 바탕으로 작동합니까?

$post = get_post( $id );

$excerpt = ( $post->post_excerpt ) ? $post->post_excerpt : $post->post_content;

그것은 나에게 똑바로 보인다, 그러나 나는 무엇인가 빠졌는지 궁금하다.


1

모든 게시물에 <!--more-->태그 가 있으면 위의 코드와 함께 다음을 사용할 수 있습니다.

$sjc_excerpt = explode( '<!--more-->', $post->post_content); 
echo wpautop( $sjc_excerpt[0] );

물론 <!--more-->태그 가없는 게시물이 있으면 전체로 표시됩니다. 내 상황에서 작동하지만 전부는 아닙니다 ...


1

get_the_excerpt()레거시 디자인의 함수로 생각합니다 . WordPress 사용이 증가함에 따라 적합하지 않지만 다른 데이터를 가져 오기위한 새로운 기능이 수행되는 새로운 사용 사례가 많이 있습니다. 한 가지 예는 이제$args기능 옵션 배열을 .

그러나 필요에 따라 쉽게 고칠 수 있습니다. 다음은 테마 functions.php파일 의 어느 곳에 나 넣을 수있는 대체 함수입니다 .

function robins_get_the_excerpt($post_id) {
   global $post;  
   $save_post = $post;
   $post = get_post($post_id);
   $output = get_the_excerpt();
   $post = $save_post;
   return $output;
}

MikeSchinkel의 답변에 추가하면 어떤 이유로 든 작동하지 않습니다. setup_postdata 줄을 추가해야 작동합니다.


wp_reset_post_data()루프 내부에서 작동 해야합니까 ?
Chris Pink

분명히 (이 특정 집을 돌아 다니면서) 이제는 핵심의 일부입니다.
Chris Pink

0

이것은 wp_trim_words를 많이 사용하는 작은 2 라이너 입니다. 나는 끊임없이 약어가 필요한 것을 발견하고 루프 밖에서 더 많은 기능을 읽었습니다. 다른 사람들은 이것이 유용하다는 것을 알 수 있습니다. 그래서 이것은 내가 사용하는 것입니다 :

  1. POST ID로 발췌
  2. 게시물 게시 받기 발췌가 설정되지 않은 경우
  3. 발췌문의 단어 길이 설정
  4. 더 읽기 (링크 / 텍스트) 내용 선택

편집중인 사용자 지정 템플릿에이 인라인을 직접 넣습니다.

    //Get Post Object
    $dapost = get_post(POST_ID);              
    //Get the Execerpt
    $my_excerpt = wp_trim_words( apply_filters( "the_excerpt", get_the_excerpt($dapost) ? get_the_excerpt($dapost) : $dapost->post_content  ), "20", "<a href='$dapost->guid'> ".__('Get More Stuff', 'translation')."</a>" );

고장

1. 발췌 내용

발췌문이 설정되지 않은 경우 게시물 ID로 발췌문을 가져 오십시오.

If / Else PHP 속기를 사용하고 있습니다.

    $dapost = get_post(POST_ID);    
    apply_filters( "the_excerpt", get_the_excerpt($dapost) ? get_the_excerpt($dapost) : $dapost->post_content

2. 단어 길이

발췌문의 단어 수를 20으로 설정

    "20"

3. ReadMore Content (링크 / 텍스트)를 선택하십시오.

   "<a href='$dapost->guid'> ".__('Get More Stuff', 'translation')."</a>"

나는 사용했다 $dapost->guid 내가 친화적 인 URL을 필요로하지 않았기 때문에, URL을 얻기 위해, 그리고 DB에 다른 통화를 피하기 위해 원했다. 항상 get_the_permalink를 사용할 수 있습니다.

Wordpress Documentation에서 wp_trim_words 를 참조하십시오 .


0

이것은 나를 위해 일했다 :

$excerpt = apply_filters('the_excerpt', get_post_field('post_excerpt', $post_ide));


-2

이것은 더 빠릅니다.

global $post;
return get_post($post_id)->post_excerpt;

1
발췌문이 비었을 때… 질문에 언급 된 바와 같이 아닙니다.
fuxia

실제로 except가 자동으로 생성 될 때
Joshc

유용하지 않으므로 다운
피터
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.