7

我在 atom 文件中显示图像时遇到问题。它不包括谷歌阅读器、歌剧或火狐的提要中的图像。

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

更新 受热链接保护的图像没有问题。此处描述:如何在原子提要中显示项目照片?

后来我根据此处发布的描述更改了提要。

我补充说:

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

但它仍然不起作用

4

2 回答 2

11

在尝试将图像包含为附件时,我遇到了同样的问题,但对我来说,最简单的方法似乎是将带有正常 img 标签的图像包含到 html 内容中。

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

下面的例子对我有用,可以让 atom feed 图像在 Google Reader 中可见:

<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>
于 2012-09-20T02:37:48.090 回答
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" );
}

原子:

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;
}
于 2020-11-26T14:05:44.000 回答