Как добавить произвольные поля в RSS для пользовательского типа записи
Мне нужно добавить произвольные поля моего пользовательского типа записи в RSS фид для этого типа записи, доступный по адресу http://example.com/feed/?post_type=my_custom_post_type
Я видел информацию о том, как это сделать для обычного фида, но ничего не нашел о том, как переписать фид для пользовательского типа записи.
Мне нужно добавить 10-15 элементов в фид (первый акт, второй акт, третий акт, цена, ссылка для покупки...)

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-ленту.

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

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

БОЛЬШОЕ СПАСИБО за эту отличную информацию.
Хочу дополнить то, что уже написали два предыдущих автора... Для валидации необходимо использовать собственное пространство имен. Вот как это делается:
/* ДЛЯ ВАЛИДАЦИИ необходимо добавить пространство имен */
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');
