Archiv für den Monat: März 2023

WordPress-Galerie-Block: ein paar Tücken und Tricks

Der Block „Galerie“ von WordPress bietet eine einfache Möglichkeit eine Fotogalerie zu erstellen.

Zuschneiden

Zum Beispiel Galerie-1:

Wir sehen hier 4 Bilder in der gleichen Grösse und vor allem in gleichem Seitenverhältnis, obwohl sie es überhaupt nicht sind? Dem kann Abhilfe geholfen werden, in dem beim Galerie-Block „zuschneiden“ deaktiviert wird.

Dann sieht es so aus.

Galerie-2:

nicht grad ansprechend, oder? Dann doch lieber zugeschnitten. Aber WordPress schneidet grad mal so zu, wie es das selber will. Ich stelle fest, dass es immer auf das Hochformat im „Beispiel“Galerie-1“ zuschneidet. Das macht aber nicht immer Sinn.

Ich möchte das gerne „quadratisch“ haben, aber WordPress stellt mir dazu keine MIttel zur Verfügung. Also: Selbst ist der Woodesigner:

  1. Der Galerie eine erweiterte Klasse zuweisen, zb. „q-galerie
  2. Custom-CSS:
    .is-cropped.q-galerie .wp-block-image img {aspect-ratio: 1 / 1}
    (es sind natürlich andere Seitenverhältnisse möglich)
  3. Zuschneiden muss für die Galerie eingeschaltet sein

Galerie-3:

Leider sieht man des Ergebnis im Backend noch nicht, aber im Frontend kommt’s dann richtig.

Obiges Beispiel mach vor allem dann Sinn, wenn es sich um anklickbare Bilder (mit Link zur Mediendatei) handelt, welche dann in voller Grösse gezeigt werden. Also so:

Galerie-4:

Letzte Reihe nicht voll

Eine leidige Geschichte. Eine 3-Spaltige Galerie mit 4 oder 5 Bildern… Sieht so aus:

Galerie-5:

Ich möchte aber nicht, dass in der letzten Reihe die vorhandenen Bilder einfach gestreckt werden, wenn die Reihe nicht voll ist. Aber wie krieg ich das hin?

so:
Dem Galerie-Block die erweiterte CSS-Klasse „q-galerie-ungerade“ geben und:
Custom-CSS:

.wp-block-gallery.has-nested-images.q-galerie-ungerade  figure.wp-block-image {
  flex-grow: 0; /* width fix */ 
}

Soll auf allen auf der Webseite verwendeten WordPress Galerien (also nicht von Plugins) dieses System wirken:

.wp-block-gallery.has-nested-images figure.wp-block-image img {
  aspect-ratio: 1; /* squared size thumbnails */ 
}
.wp-block-gallery.has-nested-images figure.wp-block-image {
  flex-grow: 0; /* width fix */ 
}

Abenteuer bei PHP upgrade 7 -> 8

Der Live-Cycle von PHP 7, dem WordPress-Motor, geht zu Ende. Der Support wird eingestellt. Es ist also Zeit die Webseite(n) auf Vordermann zu bringen, das heisst auf der Plattform des Providers die bereits als „veraltet“ gekennzeichnete PHP-Version anzuheben. Zum Beispiel von 7.3.44 nach 8.1.

Gerade bei älteren Seiten kann dies aber zu Überraschungen führen. Denn da schlummert in manchen php-Dateien alter Code, welcher bis PHP 7 vielleicht erkannt, aber ignoriert wurde, aber ab PHP 8 zu Warnungen oder Fatal Errors führen kann.

Im schlimmsten Fall kann es sein, dass nicht mal mehr die Login-Seite erreichbar ist.

Typische Probleme bei der Updaterei, die mit begegnet sind:


wp-config:

Doppelte Einträge (woher zum Teufel kamen die?) -> z.B.: Warning: Constant ABSPATH already defined in….. Da gilt es rauszufinden, welches der Duplicate zu eliminieren ist. Dieser Fehler kann zu vielen Folgefehlern führen.
(vor der Manipulation in wp-config.php via FTP und Text-Editor unbedingt dies Datei lokal sicherstellen.)

WordPress-Pfad:
define( ‚ABSPATH‘, DIR . ‚/‘ );
bessser:
/** Absolute path to the WordPress directory. */
if ( ! defined( ‚ABSPATH‘ ) ) {
define( ‚ABSPATH‘, DIR . ‚/‘ );
}

Anführungszeichen:
besser ’so‘ als „so“.

Plugin-Fehler / Theme-Fehler:

Vielleicht sind noch ältere Plugins oder Themes im Einsatz, welche Code drin haben, der von PHP 7 noch toleriert wurde, aber jetzt unter PHP 8 zu Fehlern führen.
(Auch in Übersetzungs-Dateien kann es Störenfriede haben)

Gut möglich, dass man sich von alten Plugins verabschieden muss und für diese einen Ersatz finden muss.

Caching-Probleme:

Es kann sein, dass eigentlich alles gut wäre…. Aber wegen Caching hat es noch alte Elemente im Cache, die stören.

Für die Anhebung der PHP-Version kann folgendes Vorgehen sinnvoll sein:

  1. Backup – ist ja klar
  2. Updates aller Komponenten in WordPress (wordpress selber, Themes, Plugins, Übersetzungen.) Evt. kann es hilfreich sein, von jeder Komponente die Version „vorher“ und „nachher“ sich zu notieren.
    Keinen PHP-Update durchführen, wenn irgend eine Komponente nicht auf aktuellem Stande ist.
  3. Backup
  4. Falls vorhanden: Caching-Plugins deaktivieren
  5. Anheben der PHP-Version auf der Plattform des Providers.
  6. wenn alles gut ist- Frontend und Backend funktionieren, ohne Fehlermeldungen – Cache-Plugin aktivieren, falls eines deaktiviert wurde.
  7. Bei Problemen – diese lösen…. Vielleicht hilft einer der obigen Punkte dabei. Auch die Support-Foren von betroffenen Komponenten (zb Plugin), sofern identifizierbar, helfen manchmal weiter.

Wie immer gilt: OHNE GEWÄHR!

Bilder animiert anzeigen

Ein Bild animiert anzuzeigen, sobald es auf dem Bildschirm erscheint – also wenn Seite geladen wird oder Benutzer nach unten scrollt – gibt der Seite eine gewisse Leichtigkeit.

Dies kann auf verschiedenste Arten erreicht werde. Ich habe mich für die Library von Green Socks entschieden.
Damit die gewünschten Dateien lokal installiert werden können, können sie dort ge-downloaded werden. Ich lege sie dann ab in einem Unterverzeichnis „/js“meines Theme-Ordners.
Für diese Webseite verwende ich gsap.min.js und ScrollTrigger.min.js.

Damit diese Dateien eingebunden werden, müssen diese Dateien der Webseite bekannt gemacht werden, z.B. in der functions.php:

// GSAP lokal einbinden (ab ../themes/mychildtheme/js/)
function theme_gsap_script(){
  	// The core GSAP library
	wp_enqueue_script( 'gsap-js', get_stylesheet_directory_uri() . '/js/gsap.min.js', array(), false, true );
  	// ScrollTrigger - with gsap.js passed as a dependency
	wp_enqueue_script( 'gsap-st', get_stylesheet_directory_uri() . '/js/ScrollTrigger.min.js', array('gsap-js'), false, true );
    // Your animation code file - with gsap.js passed as a dependency
  	wp_enqueue_script( 'gsap-js2', get_stylesheet_directory_uri() . '/js/woodyapp.js', array('gsap-js'), false, true );
}
add_action( 'wp_enqueue_scripts', 'theme_gsap_script' );

Die zugehörigen Javascript Anweisungen habe ich im selben Verzeichnis in der Datei woodyapp.js abgelegt:

// Bilder im Content hinein-faden und Grösse 0.85 -> 1
const boxes = gsap.utils.toArray(".entry-content figure.wp-block-image, .entry-content .wp-block-image figure, .entry-content .wp-caption, .woody-icon");
gsap.set(".entry-content figure.wp-block-image, .entry-content .wp-block-image figure, .entry-content .wp-caption, .woody-icon", {scale: 0.85, opacity: 0}) /* nur Seite Zimbabwe-b */
// .entry-content figure.wp-block-image -> für Gutenberg-Bildblock
// .entry-content .wp-caption -> für clasic-Block-Bild (alte Bweiträge)

boxes.forEach(box => {
  gsap.to(box, {
  	scale: 1,
  	opacity: 1,
    duration: 1,
    scrollTrigger: {
      //markers: true,
      trigger: box,
      start: 'top 80%',
      end: 'top 50%',  
      onLeaveBack: self => self.disable() // nur 1x
    }
  })
});

Mit den obigen Anweisungen wird erreicht, dass die Animation auf alle Bilder (nur 1x) wirkt, wenn sie sich im content-Bereich befinden.

Das wärs schon.