Wie füge ich dem RSS-Artikel-Tag ein Bild mit einem Beitrag hinzu?

7

Ich kann dem RSS-Feed wie folgt ein Bild mit einem Beitrag hinzufügen:

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');

Als ich jedoch das für den RSS-Feed generierte XML untersuchte, stellte ich fest, dass das vorgestellte Bild in das XML-Beschreibungselement-Tag eingefügt wird.

Wie kann ich ein Bild mit einem Beitrag in das eigene RSS-Feed-Element-Tag von "Bild" einfügen, anstatt es nur mit dem Inhalt des Beitrags einzufügen?

Michael Ecklund
quelle

Antworten:

9

Sie können dies tun, indem Sie dem Hook 'rss2_item' eine Aktion wie folgt hinzufügen:

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;
});
Codekipple
quelle
1
Ich fand das nach stundenlangen Nachforschungen ... tolle Lösung, danke!
Cawecoy
7

Aufbauend auf der großartigen Antwort von Codekipple ist hier meine modifizierte Implementierung, die das gültige Media RSS- media:contentElementelement ( Spezifikation ) verwendet und auf das Vorhandensein eines Miniaturbilds / vorgestellten Bilds überprüft:

    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' );

Hinweis: Fügen Sie hier das xmlns-Attribut ein, damit es überprüft wird. Die Erstinstallation von WordPress enthält diese Namespace-Deklaration nicht. Sie können sie zwar ändern, aber auch andere Themen / Plugins.

Weitere Details zu den anderen Attributen usw. finden Sie in meiner nicht WordPress-spezifischen Antwort hier .

Dies lässt sich in die RSS-Newsletter-Erstellung von MailChimp integrieren.


quelle
2
Gute Antwort. Ich habe WordPress-Plugins ausprobiert, die das Bild zu RSS hinzufügen, aber tatsächlich fügen sie es nur als Teil des Inhalts hinzu. Dadurch wird das Bild als eigene Entität hinzugefügt, sodass Sie mehr Kontrolle über das Layout haben, wenn Sie die Zusammenführungs-Tags von MailChimp verwenden.
Ian Lunn
0

Aufbauend auf Codekipple und D_N wollte ich ein paar weitere Attribute in meinem, media:contentalso habe ich Folgendes getan:

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');

Die Antwort von Codekipple fügt auch das Bild unter allen Feed-Inhalten hinzu. Ich wollte mein Bild über dem Inhalt haben, also habe ich Folgendes getan:

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);
cfx
quelle