Agregar campos personalizados a RSS personalizado de tipo de publicación

15

Me gustaría agregar campos personalizados en mi tipo de publicación personalizada a la fuente RSS para ese tipo de publicación ubicado en enlace

He visto información sobre cómo hacer esto para el feed regular, pero nada sobre cómo reescribir el feed de tipo de publicación personalizado.

Necesitaré agregar de 10 a 15 elementos a la fuente (primer acto, segundo acto, tercer acto, precio, enlace de compra ...)

    
pregunta curtismchale 09.11.2010 - 03:28

3 respuestas

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

Debería poder sustituir y cualquier otro valor de metadatos que necesite agregar al feed.

    
respondido por el prettyboymp 09.11.2010 - 03:47
17

Hola @curtismchale:

Respaldando con la excelente respuesta de @ prettyboymp's , con mi giro, he aquí cómo puedes hacer varios campos personalizados (hice 3, puedes hacer más):

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. Asegúrate de darle apoyos a @prettyboymp porque no sabía cómo hacerlo antes de su respuesta. También respondo porque no estoy seguro de cuánto tiempo pasará antes de que él regrese, así que decidí responderte mientras tanto.

    
respondido por el MikeSchinkel 09.11.2010 - 08:06
7

GRACIAS MUCHAS GRACIAS por esta excelente información.

Quería extender lo que los otros dos ya han escrito ... Para validar esto, debe tener un espacio de nombres personalizado. Así es como haces eso:

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

Y luego prefijar el elemento de nombre de campo con el espacio de nombres personalizado En este ejemplo, he usado "mycustomfields" Vea abajo:

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

En una nota lateral, puedes usar una acción para enlazar con cualquiera de los 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');
    
respondido por el Acts7 30.07.2012 - 22:20

Lea otras preguntas en las etiquetas