Làm thế nào để thêm hình ảnh nổi bật vào thẻ mục RSS?


7

Tôi có thể thêm một hình ảnh nổi bật vào nguồn cấp dữ liệu RSS như vậy:

function insertThumbnailRSS($content) {
    global $post;
    if(has_post_thumbnail($post->ID)){
        $content = ''.get_the_post_thumbnail($post->ID, 'thumbnail', array('alt' => get_the_title(), 'title' => get_the_title(), 'style' => 'float:right;')).''.$content;
    }
    return $content;
}
add_filter('the_excerpt_rss', 'insertThumbnailRSS');
add_filter('the_content_feed', 'insertThumbnailRSS');

Tuy nhiên, khi kiểm tra XML được tạo cho nguồn cấp RSS, tôi nhận thấy nó dán hình ảnh đặc trưng vào thẻ mục mô tả XML.

Làm cách nào tôi có thể chèn hình ảnh nổi bật của bài đăng vào thẻ mục nguồn cấp RSS của chính nó, hãy nói "hình ảnh", thay vì chỉ chèn nó vào với nội dung của bài đăng?

Câu trả lời:


9

Bạn có thể làm điều đó bằng cách thêm một hành động vào hook 'rss2_item' như vậy:

add_action('rss2_item', function(){
  global $post;

  $output = '';
  $thumbnail_ID = get_post_thumbnail_id( $post->ID );
  $thumbnail = wp_get_attachment_image_src($thumbnail_ID, 'thumbnail');
  $output .= '<post-thumbnail>';
    $output .= '<url>'. $thumbnail[0] .'</url>';
    $output .= '<width>'. $thumbnail[1] .'</width>';
    $output .= '<height>'. $thumbnail[2] .'</height>';
    $output .= '</post-thumbnail>';

  echo $output;
});

1
Tôi tìm thấy điều này sau nhiều giờ nghiên cứu ... giải pháp tuyệt vời, cảm ơn!
cawecoy

7

Xây dựng câu trả lời tuyệt vời của codekíp , đây là cách triển khai được sửa đổi của tôi, sử dụng phần media:contenttử phần tử Media RSS hợp lệ ( spec ) và kiểm tra sự tồn tại của hình thu nhỏ / hình ảnh nổi bật:

    function dn_add_rss_image() {
        global $post;

        $output = '';
        if ( has_post_thumbnail( $post->ID ) ) {
            $thumbnail_ID = get_post_thumbnail_id( $post->ID );
            $thumbnail = wp_get_attachment_image_src( $thumbnail_ID, 'thumbnail' );

            $output .= '<media:content xmlns:media="http://search.yahoo.com/mrss/" medium="image" type="image/jpeg"';
            $output .= ' url="'. $thumbnail[0] .'"';
            $output .= ' width="'. $thumbnail[1] .'"';
            $output .= ' height="'. $thumbnail[2] .'"';
            $output .= ' />';
        }
        echo $output;
    }
    add_action( 'rss2_item', 'dn_add_rss_image' );

Lưu ý: Bao gồm thuộc tính xmlns ở đây để xác thực nó. Cài đặt ban đầu của WordPress không bao gồm khai báo không gian tên đó và trong khi bạn có thể thay đổi nó, thì các chủ đề / plugin khác cũng vậy.

Chi tiết khác về các thuộc tính khác, v.v. có trong câu trả lời không dành riêng cho WordPress của tôi ở đây .

Điều này tích hợp với việc xây dựng bản tin RSS của MailChimp.


2
Câu trả lời tốt. Tôi đã thử các plugin WordPress thêm hình ảnh vào RSS nhưng thực tế họ chỉ thêm nó như một phần của nội dung. Điều này thêm hình ảnh dưới dạng thực thể của chính nó để bạn có nhiều quyền kiểm soát bố cục hơn khi sử dụng các thẻ hợp nhất của MailChimp.
Ian Lunn

0

Xây dựng codekíp và D_N, tôi muốn có thêm một vài thuộc tính trong media:contentđây vì vậy đây là những gì tôi đã làm:

function add_media_content_to_feed() {
  global $post;

  $post_id = $post->ID;

  if(!has_post_thumbnail($post)) {
    return;
  }

  $thumbnail_size = 'large';
  $thumbnail_id   = get_post_thumbnail_id($post_id);

  $file           = image_get_intermediate_size(get_post_thumbnail_id(), $thumbnail_size);

  $url            = $file['url'];
  $type           = $file['mime-type'];
  $height         = $file['height'];
  $width          = $file['width'];
  $file_size      = '';

  $path           = $file['path'];
  if($path && 0 !== strpos($path, '/') && !preg_match('|^.:\\\|', $path) && (($uploads = wp_get_upload_dir()) && false === $uploads['error'])) {
    $path         = $uploads['basedir']."/$path";
    $file_size    = filesize($path);
  }

  echo sprintf(__('<media:content url="%s" type="%s" medium="image" height="%s" width="%s" fileSize="%s" />'),
    $url,
    $type,
    $height,
    $width,
    $file_size
  );

}
add_action('rss2_item', 'add_media_content_to_feed');

Câu trả lời của codekíp cũng thực sự thêm hình ảnh bên dưới tất cả nội dung nguồn cấp dữ liệu. Tôi muốn hình ảnh của tôi ở trên nội dung, vì vậy tôi đã làm điều này:

function add_featured_image_to_feed($content, $feed_type) {
  global $post;
  $post_id = $post->ID;
  if(has_post_thumbnail($post)) {
    $content = '<div class="feed-image">'.get_the_post_thumbnail($post_id, 'large').'</div>'.$content;
  }
  return $content;
}
add_filter('the_content_feed', 'add_featured_image_to_feed', 10, 9999);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.