Ankerlink an den Anfang der Seite
801 2569
Generic filters
Filter by Kategorien
,

Der Beitrag, geschriebem am 21. August 2021, ist schon etwas älter und könnte womöglich nicht mehr aktuell sein

Auf der Startseite unserer Firmenwebsite wollten wir künftig die letzten Beiträge dieses Blogs einblenden. Da beide Sites innerhalb einer Multisiteumgebung laufen, wäre es durchaus möglich gewesen, die Abfrage direkt aus der Datenbank zu machen. Doch besser als das gefiel mir die Idee, über die REST API zu gehen.

Dafür muss die Schnittstelle auch für anonyme Besucher zugänglich sein. Das lässt sich feststellen, indem man als nicht angemeldeter User https://website-adresse.com/wp-json/ abfragt, resp. https://website-adresse.com/wp-json//wp/v2 .

Einen kleinen Haken allerdings gab es, ich kam nicht an das jeweilige Beitragsbild heran. Auf der Blogseite brauchte es also auch einen kleinen Eingriff. Für das Beispiel beziehen sich die Daten auf das Bild in Thumbnailgröße. Bei Bedarf könnten durchaus auch andere Bildgrößen oder alle zugänglich gemacht werden.

add_action('rest_api_init', 'register_rest_images' );

function register_rest_images(){
    register_rest_field( array('post'),
        'featured_image_url',
        array(
            'get_callback'    => 'get_rest_featured_image',
            'update_callback' => null,
            'schema'          => null,
        )
    );
}

function get_rest_featured_image( $object, $field_name, $request ) {
    if( $object['featured_media'] ){
        $img = wp_get_attachment_image_src( $object['featured_media'], 'thumbnail' );
        return array($img[0],$img[1],$img[2]);
    }
    return false;
}

Gegen-seitig hätte es ein Shortcode sein können, oder ein Block, doch ich beschloss, einfach über den Content-Filter zu gehen, allerdings nur, wenn sich wer auf der Startseite befand. Der Performance zuliebe wurde die Abfrage nicht bei jedem Aufruf neu gemacht, sondern vorübergehend in einem transient gespeichert.

add_filter( 'the_content', function ( $content ) {
	if ( !is_front_page() ) return $content;
   
	$trans = '_trans_posts_remote_cache';

    if ( false === $blog_posts = get_transient( $trans ) ) {
		$response = wp_remote_get( add_query_arg( array(
			'per_page' => 8
		), 'https://blog.webentwicklerin.at/wp-json/wp/v2/posts?_embed' ) );
		if( !is_wp_error( $response ) && $response['response']['code'] == 200 ) {
			$remote_posts = json_decode( $response['body'] ); // our posts are here
		//	echo '<pre>' . print_r($remote_posts) . '</pre>';
			foreach( $remote_posts as $remote_post ) {
				$blog_posts[ strtotime( $remote_post->date_gmt ) ] = $remote_post;
			}
	
  		}
		set_transient( $trans, $blog_posts, 3600 ); 		
	}
	
	if ( empty($blog_posts) ) return $content;		
			
...
        foreach ( $blog_posts as $s_post ) {
	
            $img    = $s_post->featured_image_url;
            if ( isset( $img ) ) {
                $content .= sprintf('<img src="%1$s" width="%2$s" height="%3$s" alt="%4$s" />', 
                esc_url( $img[0] ), 
                esc_attr( $img[1] ), 
                esc_attr( $img[2] ),
                esc_html( $s_post->title->rendered )
                );
             ...
             }			
         }
        
...

	return $content;
} );

Über $s_post->featured_image_url im Loop auf die neuesten Beiträge kommt ein Array mit den Bildinformationen zurück: URL, Breite, Höhe.

Bitte das Kommentarfeld nicht für Supportanfragen nutzen; hier kann kein Support angeboten werden. Die Angabe von Name oder E-Mail-Adresse ist optional, ein Spitzname wäre trotzdem nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Name und E-Mail-Adresse (beides optional, da alle Kommentare moderiert werden) werden dauerhaft gespeichert. Über dieses Formular kann jeder Zeit die Löschung persönlicher Daten oder Kommentare angefordert werden; die Anfrage wird nicht veröffentlicht und nach der Bearbeitung gelöscht. IP-Adressen, die mit Kommentaren gespeichert werden, werden nach zwei Monaten automatisch gelöscht.

Ihre Nachricht wird möglicherweise zur Spam-Prüfung an OpenAI (USA) weitergeleitet. Weitere Informationen finden Sie in unserer Datenschutzerklärung.