it-swarm.com.de

Wie füge ich ein Bild mit Beiträgen zum RSS-Artikel-Tag hinzu?

Ich kann dem RSS-Feed ein Bild wie folgt 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 gezeigte Bild in das XML-Beschreibungselement-Tag eingefügt wird.

Wie kann ich ein Bild mit Beitragsfunktion in den eigenen RSS-Feed-Element-Tag von "Bild" einfügen, anstatt es nur mit dem Inhalt des Beitrags einzufügen?

8
Michael Ecklund

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;
});
10
codekipple

Aufbauend auf Codekipples großartige Antwort , hier ist meine modifizierte Implementierung, die das gültige Media RSS-Element media:content -Element ( spec ) verwendet und die Existenz eines Thumbnails/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 validiert wird. Die Erstinstallation von WordPress enthält diese Namespace-Deklaration nicht, und Sie können sie ändern, ebenso andere Themes/Plugins.

Weitere Details zu den anderen Attributen etc. sind in meiner nicht WordPress-spezifischen Antwort hier .

Dies ist in das RSS-Newsletter-Gebäude von MailChimp integrierbar.

7
D_N

Ich baute Codekipple und D_N auf und wollte ein paar weitere Attribute in meinem media:content haben.

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 unterhalb des gesamten Feed-Inhalts hinzu. Ich wollte, dass mein Bild über dem Inhalt liegt, 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);
0
cfx