当前位置: 首页>>WEB开发>>正文


将自定义字段添加到自定义帖子类型RSS

webfans WEB开发 , , , 去评论

问题描述

我想将自定义帖子类型中的自定义字段添加到位于http://example.com/feed/?post_type=my_custom_post_type的该帖子类型的RSS Feed中

我已经看到了有关为常规Feed执行此操作的信息,但没有关于如何重写自定义帖子类型Feed的信息。

我需要在Feed中添加10到15个项目(第1幕,第2幕,第3幕,价格,购买链接……)

最佳解决方案

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中的任何其他元值。

次佳解决方案

您好@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";
  }
}

附:一定要给@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');

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2279.html,转载请务必附带本地址声明。