在原子进给中显示图像

时间:2012-06-19 22:36:28

标签: feed atom-feed

我在原子文件中显示图像时遇到问题。它不包括谷歌阅读器,歌剧或Firefox中的图像。

作为一个起点,我在[Atom 1.0 Syndication Format概述]中完成​​了清单6中的所有操作。但它不起作用。

更新 热链接保护图像没有问题。这里描述:How to display item photo in atom feed?

后来我根据description posted here更改了Feed。

我补充说:

<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="path_to_image.jpg" />

但它仍然不起作用

2 个答案:

答案 0 :(得分:10)

我在尝试将图像作为附件包含时遇到了同样的问题,但对我而言,最简单的方法似乎是将带有普通img标记的图像包含在html内容中。

(它也包含在CDATA中,这可能会影响Google Reader处理内容的方式。我没有尝试过。)

以下示例适用于在Google阅读器中显示原子Feed图像:

<content type="html">
  <![CDATA[
    <a href="http://test.lvh.me:3000/listings/341-test-pics?locale=en">
      <img alt="test_pic" src="http://test.lvh.me:3000/system/images/20/medium/test_pic.jpg?1343246102" />
    </a>
  ]]>
</content>

答案 1 :(得分:0)

Wordpress使用元字段附件设置媒体。根据RSS规范,这是正确的标签。我见过有人建议使用 media:content ,但如果要使用它,请确保为其设置XML名称空间。

不幸的是,由于某些狡猾的Wordpress代码,您无法动态设置此设置。 (WordPress会获取所有元字段,然后遍历它们而不是直接调用附件)

您可以在保存帖子上设置附件。它应该是一个数组,其条目的形式为"$url\n$length\n$type"

如果您想自己添加机柜标签,则可以执行以下操作:

RSS

add_action( 'rss2_item', 'hughie_rss2_item_enclosure' );
function hughie_rss2_item_enclosure():void
{
    $id = get_post_thumbnail_id();
    $url = wp_get_attachment_url($id);
    $length = filesize(get_attached_file($id));
    $type = get_post_mime_type($id);

    echo apply_filters( 'rss_enclosure', '<enclosure url="' . esc_url( $url ) . '" length="' . absint( $length ) . '" type="' . esc_attr( $type ) . '" />' . "\n" );
}

ATOM:

add_action( 'atom_entry', 'hughie_atom_entry_enclosure' );
function hughie_atom_entry_enclosure():void
{
    $id = get_post_thumbnail_id();
    $url = wp_get_attachment_url($id);
    $length = filesize(get_attached_file($id));
    $type = get_post_mime_type($id);

    echo apply_filters( 'atom_enclosure', '<link rel="enclosure" href="' . esc_url( $url ) . '" length="' . absint( $length ) . '" type="' . esc_attr( $type ) . '" />' . "\n" );
}

我发现动态设置机箱的唯一方法是使get_metadata调用短路。您可以添加检查以确保您位于提要中,甚至可以检查堆栈跟踪以确保自己。

add_filter('get_post_metadata', 'hughie_get_post_metadata', 10, 5 );
function hughie_get_post_metadata($value, int $object_id, string $meta_key, bool $single, string $meta_type)
{
    if (is_feed() && $meta_key === '') {

        $backtrace = debug_backtrace();
        if (isset($backtrace[7]['function']) && ( $backtrace[7]['function'] === 'rss_enclosure' || $backtrace[7]['function'] === 'atom_enclosure' ) ) {

            if (!isset($value['enclosure'])) {
                $value['enclosure'] = [];
            }

            $id = get_post_thumbnail_id();
            $url = wp_get_attachment_url($id);
            $length = filesize(get_attached_file($id));
            $type = get_post_mime_type($id);

            $value['enclosure'][] = "$url\n$length\n$type";
        }
    }

    return $value;
}