Adicione campos personalizados ao tipo de postagem personalizada RSS

15

Gostaria de adicionar campos personalizados no meu tipo de postagem personalizada ao feed RSS desse tipo de postagem, localizado em enlace

Eu vi informações sobre como fazer isso para o feed regular, mas nada sobre como reescrever o feed de tipo de postagem personalizado.

Preciso adicionar 10 a 15 itens ao feed (1º ato, 2º ato, 3º ato, preço, link de compra ...)

    
por curtismchale 09.11.2010 / 03:28

3 respostas

19
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');

Você deve poder substituir e quaisquer outros meta-valores que precisar adicionar ao feed.

    
por prettyboymp 09.11.2010 / 03:47
17

Oi @curtismchale:

Piggyback off @ prettyboymp excelente resposta, com o meu giro sobre isso, aqui está como você pode fazer vários campos personalizados (eu fiz 3, você pode fazer mais):

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

P.S. Certifique-se de dar adereços @prettyboymp porque eu não sabia como fazer isso antes de sua resposta. Eu só estou respondendo também porque não tenho certeza de quanto tempo vai demorar até que ele volte, então decidi dar uma resposta nesse meio tempo.

    
por MikeSchinkel 09.11.2010 / 08:06
7

OBRIGADO OBRIGADO por esta excelente informação.

Eu queria estender o que os outros dois já escreveram ... Para isso, você deve ter um namespace personalizado. Veja como você faz isso:

/* 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";
}

E prefixar o item do nome do campo com o namespace personalizado Neste exemplo, usei "mycustomfields" Veja abaixo:

/*  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";
  }
}

Em uma nota lateral, você pode usar uma ação para se conectar a qualquer um dos 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');
    
por Acts7 30.07.2012 / 22:20