Adăugare câmpuri personalizate în fluxul RSS al unui tip de postare personalizat

9 nov. 2010, 04:28:33
Vizualizări: 15.5K
Voturi: 18

Doresc să adaug câmpuri personalizate în tipul meu de postare personalizată la fluxul RSS pentru acel tip de postare, accesibil la http://example.com/feed/?post_type=my_custom_post_type

Am găsit informații despre realizarea acestui lucru pentru fluxul obișnuit, dar nimic despre cum să rescriu fluxul pentru tipul de postare personalizat.

Trebuie să adaug între 10 și 15 elemente în flux (primul act, al doilea act, al treilea act, preț, link de cumpărare...)

0
Toate răspunsurile la întrebare 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');

Ar trebui să poți înlocui cu orice alte valori meta pe care trebuie să le adaugi în flux.

9 nov. 2010 04:47:25
Comentarii

deci ar trebui să adaug un element la verificarea tipului de postare pentru fiecare cheie meta (probabil în jur de 10) și apoi să le includ în șablon? Nu poți pur și simplu să folosești get_post_meta în zona de valoare meta cu ID-ul postării?

curtismchale curtismchale
9 nov. 2010 07:29:48

Răspuns frumos!

MikeSchinkel MikeSchinkel
9 nov. 2010 09:07:03

@curtismchale, am inclus doar cel mai simplu răspuns. Dacă extragi atâtea câmpuri, probabil aș merge pe o soluție mai apropiată de răspunsul lui @mikeschinkel.

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

Salut @curtismchale:

Continuând de la răspunsul excelent al lui @prettyboymp, cu abordarea mea, iată cum poți adăuga mai multe câmpuri personalizate (eu am folosit 3, dar poți adăuga mai multe):

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. Asigură-te că îi dai credit lui @prettyboymp, deoarece eu nu știam cum să fac asta înainte de răspunsul lui. Răspund și eu doar pentru că nu sunt sigur când se va întoarce, așa că am decis să îți ofer un răspuns în acest timp.

9 nov. 2010 09:06:41
1

MULȚUMIM, MULȚUMIM pentru această informație excelentă.

Am vrut să extind ceea ce au scris deja ceilalți doi... Pentru a valida acest lucru, trebuie să aveți un namespace personalizat. Iată cum puteți face asta:

/* PENTRU A VALIDA trebuie să adăugați un namespace   */
add_action('rss2_ns', 'my_rss2_ns');
function my_rss2_ns(){
    echo 'xmlns:mycustomfields="'.  get_bloginfo('wpurl').'"'."\n";
}

Și apoi prefixați numele câmpului item cu namespace-ul personalizat În acest exemplu, am folosit "mycustomfields" Vedeți mai jos:

/*  adăugați elemente    */
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";
  }
}

Ca o observație suplimentară, puteți folosi o acțiune pentru a vă conecta la oricare dintre cele 3

    rss2_ns : pentru a adăuga un namespace specific
            add_action('rss2_ns', 'my_rss2_ns');

    rss2_head : pentru a adăuga tag-uri în antetul feed-ului
            add_action('rss2_head', 'my_rss2_head');

    rss2_item : pentru a adăuga tag-uri în fiecare element al feed-ului
            add_action('rss2_item', 'my_rss2_item');
30 iul. 2012 23:20:49
Comentarii

Pentru cei care ajung aici: Jetpack adaugă namespace-urile xmlns:geo și xmlns:georss. Nu este nevoie să le adăugați dacă utilizați Jetpack.

MastaBaba MastaBaba
29 aug. 2018 04:28:35