Додайте спеціальні поля до спеціального типу RSS


17

Я хотів би додати користувацькі поля у своєму користувальницькому типі публікації до стрічки RSS для цього типу публікації, розміщеної за адресою http://example.com/feed/?post_type=my_custom_post_type

Я бачив інформацію про те, як це робити для звичайного каналу, але нічого про те, як переписати власну стрічку типу публікації.

Мені потрібно додати 10 - 15 позицій у канал (1-й акт, 2-й акт, 3-й акт, ціна, посилання на покупку ...)

Відповіді:


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

Ви повинні мати можливість замінити та будь-які інші мета-значення, які потрібно додати до каналу.


1
тож мені потрібно додати елемент до перевірки типу публікації для кожної мета-ключа (можливо, близько 10), а потім зателефонувати до шаблону? Ви не можете просто зателефонувати get_post_meta в області мета значення за допомогою ідентифікатора публікації?
курсизм

2
Гарна відповідь!
MikeSchinkel

@curtismchale, я просто включив найпростішу відповідь. Якщо ви потягнете за собою стільки полів, я, певно, пішов би з чимось форматованим формою, як-от відповідь @ mikeschinkel.
prettyboymp

19

Привіт @curtismchale:

Відмінна відповідь Piggybacking off @ prettyboymp. Ось як ви можете виконати кілька спеціальних полів (я зробив 3, ви можете зробити більше):

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, оскільки я не знав, як це зробити до його відповіді. Я теж відповідаю, бо не знаю, скільки часу пройде до того, як він повернеться, тож я вирішив дати відповідь середнього часу.


7

ДЯКУЮ, ДЯКУЄМО вам за цю чудову інформацію.

Я хотів розширити те, що вже написали двоє інших ... Щоб це підтвердити, ви повинні мати власну область імен. Ось як це зробити:

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

А потім префікс елемента імені поля за допомогою спеціального простору імен У цьому прикладі я використав "mycustomfields" Див. Нижче:

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

На бічній ноті ви можете використовувати дію, щоб підключити будь-яку з 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');

Для тих, хто відображається тут: Jetpack рекламує простори імен xmlns: geo та xmlns: georss. Не потрібно додавати їх, якщо ви використовуєте Jetpack.
MastaBaba
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.