我想在http://example.com/feed/?post_type=my_custom_post_type

我看到的信息中,将自定义帖子类型中的自定义字段添加到RSS提要中在常规Feed中执行此操作,但在如何重写自定义帖子类型Feed方面没有任何帮助。

我需要在Feed中添加10到15个项目(第一幕,第二幕,第三幕,价格,购买链接...)

#1 楼

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


您应该可以替换以及需要将其他任何元值添加到Feed中。

评论


所以我需要为每个元键(可能在10左右)向帖子类型检查中添加一个项目,然后将其调用到模板中?您不能只在带有帖子ID的元值区域中调用get_post_meta吗?

–curtismchale
2010年11月9日下午5:29

好答案!

– MikeSchinkel
2010年11月9日,7:07

@curtismchale,我只提供了最简单的答案。如果您要涉猎的领域如此之多,我可能会选择格式更像@mikeschinkel的答案的东西。

–prettyboymp
2010年11月9日13:05

#2 楼

嗨,@ curtismchale:

Pi带@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道具,因为在他回答之前我不知道该怎么做。我也是在回答,因为我不确定他回来之前要等多久,所以我决定同时给您一个答案。

#3 楼

谢谢您提供的出色信息。

我想扩展其他两个人已经写的内容...
为了验证这一点,您必须具有一个自定义名称空间。 br />这是您的操作方法:

/* 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
18年8月29日在1:28