我在原子文件中显示图像时遇到问题。它不包括谷歌阅读器,歌剧或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" />
但它仍然不起作用
答案 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;
}