Adăugare câmpuri personalizate în fluxul RSS al unui tip de postare personalizat
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...)

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.

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?

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.

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