Da ich vor kurzem einige Stunden an diesem Problem gearbeitet habe, möchte ich dir dieses nun kurz schildern und die Lösung mit dir teilen. Ich arbeite geraden mit einem Partner an einem Projekt, bei dem Bilder auf einer WordPress-Site für ausgeloggte User MIT Wasserzeichen und für eingeloggte User OHNE Wasserzeichen angezeigt werden sollen.

Es gibt eine Fülle von Plugins, welche in WordPress Watermarks erzeugen können. Zu diesen zählen beispielsweise Smart Watermark (funktioniert außerordentlich gut und ist sehr einfach) oder Image Watermark. In diesem Projekt verwenden wir das Theme ‚Stocky‘ in welchem der WordPress Online-Shop ‚Easy Digital Downloads‘ integriert ist.

WordPress lädt standardmäßig von einem Bild 3 verschiedene Bilder hoch. 1x Thumbnail, 1x Medium und 1x Large – auch die Originaldatei bleibt dabei erhalten – also standardmäßig insgesamt 4 Dateien. Ein Watermark-Plugin macht nichts anderes, als die vorhandenen Bilder mit Watermarks zu überschreiben. Dabei kann allerdings gewählt werden, welche Art von Bilder (Thumbnail, Large, etc.) überschrieben werden.

Die Lösung für das Problem der eingeloggten und ausgeloggten User sieht nun folgendermaßen aus:

Wenn (if) ein User eingeloggt ist soll ein Bild angezeigt werden, auf dem keine Watermark vorhanden ist – z.B. die Original-Bilddatei (natürlich skaliert). Voraussetzung dafür ist dann natürlich, dass das Watermark-Plugin die Original-Datei im Vorhinein nicht überschrieben hat. Nach einen kurzen Blick in die WordPress-Referenz bin ich auf die Funktion ‚is user logged in‚ gestoßen. Daraufhin habe ich das jeweilige Seiten-Template (z.B. page.php, single-post.php, etc.) des Themes gesucht, auf der das Bild angezeigt wird (in meinem Fall – unter dem Theme Stocky – war es die Seite ’single-download.php‘. Den Code, der das Bild auf der Seite anzeigt, habe ich sodann in ein if verpackt. If user is logged in – Original wird ausgegeben. Als else wird sodann beispielsweise die jeweilige Datei mit Wasserzeichen – z.B. Large – ausgegeben.

Das ganze sieht dann folgendermaßen aus (code in fett wurde modifiziert):

<?php if ( is_user_logged_in() ) { ?>
<?php if (has_post_thumbnail()) { ?>
<a id=“main_product_image“ href=“<?php $image_url = wp_get_attachment_image_src( get_post_thumbnail_id(), ‚original‚); echo esc_attr($image_url[0]); ?>“ class=“lightbox“>
<span class=“preview“></span>
<?php the_post_thumbnail( ‚original‚ ); ?>
</a>
<?php }
}

else {?>

<?php if (has_post_thumbnail()) { ?>
<a id=“main_product_image“ href=“<?php $image_url = wp_get_attachment_image_src( get_post_thumbnail_id(), ‚large‚); echo esc_attr($image_url[0]); ?>“ class=“lightbox“>
<span class=“preview“></span>
<?php the_post_thumbnail( ‚large‚ ); ?>
</a>
<?php }
}
?>

Mit diesem Schritt können Watermark-Bilder für eingeloggte und ausgeloggte User gesplittet werden. In meinem Fall habe ich schlussendlich das Plugin Image Watermark verwendet.