Añadir campos personalizados al RSS de un tipo de entrada personalizado

9 nov 2010, 04:28:33
Vistas: 15.5K
Votos: 18

Me gustaría añadir campos personalizados de mi tipo de entrada personalizado al feed RSS específico para ese post type, ubicado en http://example.com/feed/?post_type=my_custom_post_type

He encontrado información sobre cómo hacer esto para el feed normal, pero nada sobre cómo modificar el feed de un tipo de entrada personalizado.

Necesito añadir entre 10 y 15 elementos al feed (primer acto, segundo acto, tercer acto, precio, enlace de compra...)

0
Todas las respuestas a la pregunta 3
3
22
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ías poder sustituir y agregar cualquier otro valor meta que necesites incluir en el feed.

9 nov 2010 04:47:25
Comentarios

¿Entonces necesitaría agregar un elemento a la verificación del tipo de publicación para cada meta clave (probablemente alrededor de 10) y luego llamarlo en la plantilla? ¿No se puede simplemente llamar a get_post_meta en el área de valor meta con el ID de la publicación?

curtismchale curtismchale
9 nov 2010 07:29:48

¡Buena respuesta!

MikeSchinkel MikeSchinkel
9 nov 2010 09:07:03

@curtismchale, solo incluí la respuesta más simple. Si estás extrayendo tantos campos, probablemente usaría algo más parecido a la respuesta de @mikeschinkel.

prettyboymp prettyboymp
9 nov 2010 15:05:14
0
20

Hola @curtismchale:

Complementando la excelente respuesta de @prettyboymp, con mi propio enfoque, aquí te muestro cómo puedes hacer múltiples campos personalizados (yo hice 3, pero 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";
  }
}

PD: Asegúrate de darle crédito a @prettyboymp porque yo no sabía cómo hacer esto antes de su respuesta. Solo estoy respondiendo también porque no estoy seguro de cuándo volverá, así que decidí darte una respuesta mientras tanto.

9 nov 2010 09:06:41
1

MUCHAS GRACIAS por esta excelente información.

Quería ampliar lo que los otros dos ya han escrito... Para que esto valide, debes tener un namespace personalizado. Así es como se hace:

/* PARA QUE VALIDE debes agregar el namespace   */
add_action('rss2_ns', 'my_rss2_ns');
function my_rss2_ns(){
    echo 'xmlns:mycustomfields="'.  get_bloginfo('wpurl').'"'."\n";
}

Y luego prefijar el nombre del campo item con el namespace personalizado En este ejemplo, he usado "mycustomfields" Mira a continuación:

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

Como nota adicional, puedes usar una acción para engancharte a cualquiera de los 3

    rss2_ns : para agregar un namespace específico
            add_action('rss2_ns', 'my_rss2_ns');

    rss2_head : para agregar etiquetas en el encabezado del feed
            add_action('rss2_head', 'my_rss2_head');

    rss2_item : para agregar etiquetas en cada ítem del feed
            add_action('rss2_item', 'my_rss2_item');
30 jul 2012 23:20:49
Comentarios

Para los que llegan aquí: Jetpack añade los espacios de nombres xmlns:geo y xmlns:georss. No es necesario añadirlos si estás usando Jetpack.

MastaBaba MastaBaba
29 ago 2018 04:28:35