Aggiungere campi personalizzati al feed RSS di un custom post type in WordPress

9 nov 2010, 04:28:33
Visualizzazioni: 15.5K
Voti: 18

Vorrei aggiungere campi personalizzati del mio custom post type al feed RSS relativo a quel post type, disponibile all'indirizzo http://example.com/feed/?post_type=my_custom_post_type

Ho trovato informazioni su come farlo per il feed regolare, ma nulla su come modificare il feed di un custom post type.

Devo aggiungere 10-15 elementi al feed (1° atto, 2° atto, 3° atto, prezzo, link d'acquisto...)

0
Tutte le risposte alla domanda 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');

Dovresti essere in grado di sostituire e aggiungere qualsiasi altro meta valore di cui hai bisogno nel feed.

9 nov 2010 04:47:25
Commenti

quindi dovrei aggiungere un elemento al controllo del post type per ogni meta key (probabilmente circa 10) e poi richiamarlo nel template? Non puoi semplicemente chiamare get_post_meta nell'area del meta value con l'ID del post?

curtismchale curtismchale
9 nov 2010 07:29:48

Ottima risposta!

MikeSchinkel MikeSchinkel
9 nov 2010 09:07:03

@curtismchale, ho incluso solo la risposta più semplice. Se stai recuperando così tanti campi, probabilmente opterei per qualcosa di più strutturato come la risposta di @mikeschinkel.

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

Ciao @curtismchale:

Seguendo l'eccellente risposta di @prettyboymp e aggiungendo la mia variante, ecco come puoi gestire più campi personalizzati (io ne ho usati 3, ma puoi aggiungerne altri):

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. Assicurati di ringraziare @prettyboymp perché non sapevo come fare questa cosa prima della sua risposta. Rispondo anch'io solo perché non sono sicuro di quanto tempo ci vorrà prima che lui torni, così nel frattempo ho deciso di darti una risposta.

9 nov 2010 09:06:41
1

GRAZIE GRAZIE per queste eccellenti informazioni.

Volevo ampliare quanto già scritto dagli altri due... Per far sì che questo funzioni correttamente, devi avere un namespace personalizzato. Ecco come si fa:

/* PER LA VALIDAZIONE devi aggiungere il namespace   */
add_action('rss2_ns', 'my_rss2_ns');
function my_rss2_ns(){
    echo 'xmlns:mycustomfields="'.  get_bloginfo('wpurl').'"'."\n";
}

E poi prefissare il nome del campo item con il namespace personalizzato In questo esempio, ho usato "mycustomfields" Vedi sotto:

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

Come nota a margine, puoi usare un'azione per agganciarti a uno qualsiasi dei 3

    rss2_ns : per aggiungere un namespace specifico
            add_action('rss2_ns', 'my_rss2_ns');

    rss2_head : per aggiungere tag nell'intestazione del feed
            add_action('rss2_head', 'my_rss2_head');

    rss2_item : per aggiungere tag in ogni elemento del feed
            add_action('rss2_item', 'my_rss2_item');
30 lug 2012 23:20:49
Commenti

Per chi arriva qui: Jetpack aggiunge gli spazi dei nomi xmlns:geo e xmlns:georss. Non è necessario aggiungerli se stai utilizzando Jetpack.

MastaBaba MastaBaba
29 ago 2018 04:28:35