Aggiungi campi personalizzati al tipo di messaggio personalizzato RSS


17

Vorrei aggiungere campi personalizzati nel mio tipo di post personalizzato al feed RSS per quel tipo di post disponibile all'indirizzo http://example.com/feed/?post_type=my_custom_post_type

Ho visto le informazioni su come farlo per il feed normale ma niente su come riscrivere il feed di tipo di post personalizzato.

Dovrò aggiungere 10-15 articoli al feed (1o atto, 2o atto, 3o atto, prezzo, link per l'acquisto ...)

Risposte:


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

Dovresti essere in grado di sostituire e tutti gli altri meta valori che devi aggiungere al feed.


1
quindi dovrei aggiungere un elemento al controllo del tipo di post per ogni meta chiave (probabilmente circa 10), quindi chiamarlo nel modello? Non puoi semplicemente chiamare get_post_meta nell'area del meta valore con l'id post?
curtismchale,

2
Bella risposta!
MikeSchinkel,

@curtismchale, ho appena incluso la risposta più semplice. Se stai inserendo un numero così elevato di campi, probabilmente sceglierei qualcosa di più formattato come la risposta di @ mikeschinkel.
prettyboymp,

19

Ciao @curtismchale:

Piggybacking dell'eccellente risposta di @ prettyboymp , con il mio giro su di essa, ecco come puoi fare più campi personalizzati (ne ho fatti 3, puoi fare di più):

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

PS Assicurati di dare gli oggetti di scena @prettyboymp perché non sapevo come farlo prima della sua risposta. Sto solo rispondendo perché non sono sicuro di quanto tempo ci vorrà prima che ritorni, quindi ho deciso di darti una risposta nel frattempo.


7

GRAZIE GRAZIE per questa eccellente informazione.

Volevo estendere ciò che gli altri due hanno già scritto ... Per convalidare questo, devi avere uno spazio dei nomi personalizzato. Ecco come lo fai:

/* 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 quindi prefisso l'elemento nome campo con lo spazio dei nomi personalizzato In questo esempio, ho usato "mycustomfields" Vedi sotto:

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

Su una nota a margine puoi usare un'azione per agganciare uno dei 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');

Per quelli che appaiono qui: Jetpack annuncia gli spazi dei nomi xmlns: geo e xmlns: georss. Non è necessario aggiungerli se si utilizza Jetpack.
MastaBaba,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.