Добавление настраиваемых полей в Настраиваемый тип публикации RSS


Я хотел бы добавить пользовательские поля в свой пользовательский тип записи в RSS-канал для этого типа записи, расположенного по адресу http://example.com/feed/?post_type=my_custom_post_type

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

Мне нужно будет добавить 10-15 элементов в ленту (1-й акт, 2-й акт, 3-й акт, цена, ссылка на покупку...)

Author: Johannes Pille, 2010-11-09

3 answers

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

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

 20
Author: prettyboymp, 2010-11-09 02:47:25

Привет@кертисмчейл:

Отбрасывание @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";
  }
}

P.S. Обязательно предоставьте @prettyboymp реквизиты, потому что я не знал, как это сделать до его ответа. Я тоже просто отвечаю, потому что не знаю, сколько времени пройдет, прежде чем он вернется, поэтому я решил дать вам ответ тем временем.

 19
Author: MikeSchinkel, 2010-11-09 07:06:41

СПАСИБО ВАМ СПАСИБО за эту превосходную информацию.

Я хотел расширить то, что уже написали двое других... Для проверки этого у вас должно быть пользовательское пространство имен. Вот как вы это делаете:

/* 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');
 7
Author: Acts7, 2012-07-30 20:20:49