사용자 정의 게시물 유형 RSS에 사용자 정의 필드 추가


17

http://example.com/feed/?post_type=my_custom_post_type 에있는 해당 게시물 유형의 RSS 피드에 사용자 정의 게시물 유형의 사용자 정의 필드를 추가하고 싶습니다 .

일반 피드에 대해이 작업을 수행하는 방법에 대한 정보를 보았지만 맞춤 게시물 유형 피드를 다시 작성하는 방법에 대한 정보는 없습니다.

피드에 10-15 개의 항목을 추가해야합니다 (1 차 행위, 2 차 행위, 3 차 행위, 가격, 구매 링크 ...)

답변:


20
function add_custom_fields_to_rss() {
    if(get_post_type() == 'my_custom_post_type' && $my_meta_value = get_post_meta(get_the_ID(), 'my_meta_key', true)) {
        ?>
        <my_meta_value><?php echo $my_meta_value ?></my_meta_value>
        <?php
    }
}
add_action('rss2_item', 'add_custom_fields_to_rss');

피드에 추가해야하는 다른 메타 값과 대체 할 수 있어야합니다.


1
그래서 각 메타 키 (아마도 약 10)에 대한 게시물 유형 검사에 항목을 추가 한 다음 템플릿으로 호출해야합니까? 게시물 ID가있는 메타 값 영역에서 get_post_meta를 호출 할 수 없습니까?
curtismchale

2
좋은 대답입니다!
MikeSchinkel

@ curtismchale, 방금 가장 간단한 답변을 포함 시켰습니다. 많은 필드를 사용한다면 @mikeschinkel의 답변과 같은 형식으로 갈 것입니다.
prettyboymp

19

안녕하세요 @curtismchale :

@prettyboymp의 훌륭한 답변을 피기 백 하고 내 스핀과 함께 여러 사용자 정의 필드를 수행하는 방법은 다음과 같습니다 (3 번, 더 할 수 있음).

add_action('rss2_item', 'yoursite_rss2_item');
function yoursite_rss2_item() {
  if (get_post_type()=='my_custom_post_type') {
    $fields = array( 'field1', 'field2', 'field3' );
    $post_id = get_the_ID();
    foreach($fields as $field)
      if ($value = get_post_meta($post_id,$field,true))
        echo "<{$field}>{$value}</{$field}>\n";
  }
}

추신 : 나는 그의 대답에 앞서이 작업을 수행하는 방법을 몰랐기 때문에 @prettyboymp 소품을 제공해야합니다. 그가 돌아 오기까지 얼마나 걸리는지 확신 할 수 없기 때문에 나는 단지 대답하고 있습니다.


7

이 훌륭한 정보를 주셔서 감사합니다.

다른 두 사람이 이미 작성한 내용을 확장하고 싶었습니다.이를 확인하려면 사용자 지정 네임 스페이스가 있어야합니다. 그렇게하는 방법은 다음과 같습니다.

/* IN ORDER TO VALIDATE you must add namespace   */
add_action('rss2_ns', 'my_rss2_ns');
function my_rss2_ns(){
    echo 'xmlns:mycustomfields="'.  get_bloginfo('wpurl').'"'."\n";
}

그런 다음 필드 이름 항목 앞에 사용자 지정 네임 스페이스를 붙입니다.이 예에서는 "mycustomfields"를 사용했습니다. 아래를 참조하십시오.

/*  add elements    */
add_action('rss2_item', 'yoursite_rss2_item');
function yoursite_rss2_item() {
  if (get_post_type()=='my_custom_post_type') {
    $fields = array( 'field1', 'field2', 'field3' );
    $post_id = get_the_ID();
    foreach($fields as $field)
      if ($value = get_post_meta($post_id,$field,true))
        echo "<mycustomfields:{$field}>{$value}</mycustomfields:{$field}>\n";
  }
}

참고로 작업을 사용하여 3 개 중 하나에 연결할 수 있습니다.

    rss2_ns : to add a specific namespace
            add_action('rss2_ns', 'my_rss2_ns');

    rss2_head : to add tags in the feed header
            add_action('rss2_head', 'my_rss2_head');

    rss2_item : to add tags in each feed items
            add_action('rss2_item', 'my_rss2_item');

여기에 표시된 사람들을 위해 : Jetpack은 xmlns : geo 및 xmlns : georss 네임 스페이스를 광고합니다. Jetpack을 사용하는 경우 추가 할 필요가 없습니다.
MastaBaba
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.