Добавление настраиваемых полей в Настраиваемый тип публикации RSS
Я хотел бы добавить пользовательские поля в свой пользовательский тип записи в RSS-канал для этого типа записи, расположенного по адресу http://example.com/feed/?post_type=my_custom_post_type
Я видел информацию о том, как это сделать для обычной ленты, но ничего о том, как переписать ленту пользовательского типа сообщений.
Мне нужно будет добавить 10-15 элементов в ленту (1-й акт, 2-й акт, 3-й акт, цена, ссылка на покупку...)
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');
Вы должны иметь возможность заменять и любые другие мета-значения, которые вам нужно добавить в ленту.
Привет@кертисмчейл:
Отбрасывание @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 реквизиты, потому что я не знал, как это сделать до его ответа. Я тоже просто отвечаю, потому что не знаю, сколько времени пройдет, прежде чем он вернется, поэтому я решил дать вам ответ тем временем.
СПАСИБО ВАМ СПАСИБО за эту превосходную информацию.
Я хотел расширить то, что уже написали двое других... Для проверки этого у вас должно быть пользовательское пространство имен. Вот как вы это делаете:
/* 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');