Özel Yazı Türü RSS'sine Özel Alanlar Ekleme


17

Http://example.com/feed/?post_type=my_custom_post_type adresinde bulunan bu yazı türü için RSS yayınına özel yazı türümde özel alanlar eklemek istiyorum

Düzenli özet akışı için bu konuda bilgi gördüm ama özel yazı türü özet akışını yeniden yazmak için hiçbir şey görmedim.

Feed'e 10-15 öğe eklemem gerekecek (1. işlem, 2. işlem, 3. işlem, fiyat, satın alma bağlantısı ...)

Yanıtlar:


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

Feed'e eklemeniz gereken diğer meta değerleri ve diğer meta değerleri değiştirebilmeniz gerekir.


1
bu yüzden her meta anahtarı için (muhtemelen yaklaşık 10) yazı türü kontrolüne bir öğe eklemem ve sonra şablona çağırmam gerekir? Sadece mesaj kimliği ile meta değer alanında get_post_meta'yı çağıramazsınız?
curtismchale

2
Güzel cevap!
MikeSchinkel

@curtismchale, sadece en basit cevabı ekledim. Bu kadar çok alanı çekiyorsanız, muhtemelen @ mikeschinkel'in cevabı gibi biçimlendirilmiş bir şeyle giderdim.
prettyboymp

19

Merhaba @curtismchale:

@ Prettyboymp'ın mükemmel cevabını piggybacking , üzerinde benim spin ile, birden fazla özel alan nasıl yapabilirsiniz (3 yaptım, daha fazlasını yapabilirsiniz):

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 @prettyboymp sahne verdiğinizden emin olun çünkü cevabından önce bunu nasıl yapacağımı bilmiyordum. Ben de cevap veriyorum çünkü o dönmeden önce ne kadar süreceğinden emin değilim, bu yüzden size bu arada bir cevap vermeye karar verdim.


7

Bu mükemmel bilgi için TEŞEKKÜR EDERİZ.

Diğer ikisinin yazdıklarını uzatmak istedim ... Bunun doğrulanması için özel bir ad alanınız olmalı. Bunu nasıl yapacağınız aşağıda açıklanmıştır:

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

Ve sonra alan adı öğesini özel ad alanına önekleyin Bu örnekte, "mycustomfields" ı kullandım Aşağıya bakın:

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

Yan notta, herhangi bir 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');

Burada gösterilenler için: Jetpack, xmlns: geo ve xmlns: georss ad alanlarını reklamlar. Jetpack kullanıyorsanız bunları eklemenize gerek yoktur.
MastaBaba
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.