WP Offload S3 Lite: Post Types ausschließen

Um deinen eigenen Webspace zu entlasten empfiehlt es sich, Fotos der Mediathek in einem CDN (Content Delivery Network) zu hosten. Finen bequemen Einstieg erhälst du mit AWS (Amazon Webservices) und das Plugin von Delicious Brains „WP Offload S3 Lite“. Das kostenlose Plugin genügt für die einfachste Funktion, die Mediathek auf S3 zu hosten. Das Premiumplugin von Offload S3 ermöglicht dir noch ein paar bequeme Zugriffe auf die Dateien, die bei S3 liegen.

Für die Nutzung von S3 benötigst du einen AWS-Account, einen sogenannten IAM-Nutzer und S3-Berechtigungen. An dieser Stelle empfehlen wir, die einfachen Anweisungen von Delicious Brains.

Sobald du nun etwas in die Mediathek lädst, merkst du eigentlich keinen Unterschied. Von der Bedienung ist alles wie vorher. Nur mit dem Unterschied, dass du im wp-uploads Ordner keine Dateien mehr vorfindest. Diese werden von nun an alle zu S3 hochgeladen, inklusive der diversen Bildgrößen-Instanzen. Über die herkömmlichen WordPress-Funktionen kannst du, wie gewohnt, auf die Dateien zugreifen:

$image_src = wp_get_attachment_image_src( get_post_thumbnail_id(get_the_ID()),"medium" );
echo $image_src[0];

Offload S3 Hosting für einen Custom Post Types deaktivieren

Falls du nicht möchtest, dass alles zu S3 geladen wird, kannst du das mit ein paar Zeilen Code realisieren. Folgend ein Beispiel, wie du dieses Verhalten nur für einen Custom Post Type (CPT) aktivieren kannst. Dafür benötigst du etwas Extrahilfe. Mit den sogenannten Cloudfront Tweaks bekommst du ein paar nützliche Funktionen gestellt. Dazu erstellst du im Plugins Ordner einen Unterordner mit dem Namen amazon-s3-and-cloudfront-tweaks. Dort legst du die PHP-Datei mit den Funktionen ab.

Nach erfolgreicher Aktivierung in den WordPress-Plugins stehen dir nun allerhand Funktionen zur Verfügung. Du benötigst die Funktion pre_update_attachment_metadata. Du kannst sie hier an Ort und Stelle bearbeiten. In unserem Beispiel möchten wir Fotos nur zu S3 hochladen, wenn sie mit einem Eintrag des Custom Post Types „rueckblick“ verknüpft wurden („rueckblick“ kannst du durch einen eigenen CPT ersetzen):

function pre_update_attachment_metadata( $pre_update, $data, $post_id ) {
   $parent_post_id = get_post_ancestors( $post_id );

   $pre_update = true; // does NOT upload to s3
   if ( get_post_type( $parent_post_id[0] ) == "rueckblick" ) {
      $pre_update = false; // does upload to s3
   }

   return $pre_update;
}

Vielen Dank für den Gastbeitrag.