Как добавить произвольные поля в RSS для пользовательского типа записи

9 нояб. 2010 г., 04:28:33
Просмотры: 15.5K
Голосов: 18

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

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

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

0
Все ответы на вопрос 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');

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

9 нояб. 2010 г. 04:47:25
Комментарии

Значит, мне нужно добавить элемент в проверку типа записи для каждого мета-ключа (примерно 10) и затем вывести его в шаблон? Нельзя просто использовать get_post_meta в области мета-значений с ID записи?

curtismchale curtismchale
9 нояб. 2010 г. 07:29:48

Отличный ответ!

MikeSchinkel MikeSchinkel
9 нояб. 2010 г. 09:07:03

@curtismchale, я просто привел самый простой вариант. Если вам нужно выводить так много полей, я бы, вероятно, использовал что-то более похожее на ответ @mikeschinkel.

prettyboymp prettyboymp
9 нояб. 2010 г. 15:05:14
0
20

Привет @curtismchale:

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

9 нояб. 2010 г. 09:06:41
1

БОЛЬШОЕ СПАСИБО за эту отличную информацию.

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

/* ДЛЯ ВАЛИДАЦИИ необходимо добавить пространство имен */
add_action('rss2_ns', 'my_rss2_ns');
function my_rss2_ns(){
    echo 'xmlns:mycustomfields="'.  get_bloginfo('wpurl').'"'."\n";
}

Затем нужно добавить префикс пространства имен к имени поля элемента В этом примере я использовал "mycustomfields" Смотрите ниже:

/*  добавление элементов    */
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";
  }
}

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

    rss2_ns : для добавления конкретного пространства имен
            add_action('rss2_ns', 'my_rss2_ns');

    rss2_head : для добавления тегов в заголовок фида
            add_action('rss2_head', 'my_rss2_head');

    rss2_item : для добавления тегов в каждый элемент фида
            add_action('rss2_item', 'my_rss2_item');
30 июл. 2012 г. 23:20:49
Комментарии

Для тех, кто оказался здесь: Jetpack автоматически добавляет пространства имен xmlns:geo и xmlns:georss. Нет необходимости добавлять их вручную, если вы используете Jetpack.

MastaBaba MastaBaba
29 авг. 2018 г. 04:28:35