Open Source

‘Fancy Boxes’ für ‘Fancy Images’

Ein Geschenk mit Schleife

Gro­ße, pro­mi­nent plat­zier­te Bil­der sind Eye-Cat­cher. Word­Press hat sogar einen Namen dafür: Fea­tured Image. Das Pro­blem ist nur: Jeden Post immer wie­der mit einem ‘Fea­tured Image’ begin­nen zu las­sen, ermü­det: Selbst wenn sich unse­re Lese­rin schon für einen Arti­kel ent­schie­den hat, zwin­gen wir sie zum Scrol­len. Manch­mal könn­ten wir ihr es doch zur Abwech­se­lung ein­mal selbst über­las­sen, wann sie das Bild genau­er sehen will.

‘Fea­tured Images’ — so das Netz — haben am Bes­ten das 16:9 For­mat. 1 Das sind dann gro­ße Bil­der. Wir wol­len ihr das Bild aber zuerst klei­ner zu prä­sen­tie­ren — schon vom Text umflos­sen, für den sie sich ent­schie­den hat — und erst auf Wunsch — auf einen Klick hin — groß.

tomcat brutus in a basket

Eine ele­gan­te Lösung dafür heißt fancybox.2

[ de | en ]

Lösung

  • Erstel­le ein Ver­zeich­nis lib in Dei­nem Child-The­me.
  • Lade die Datei­en jquery.fancybox.min.css und jquery.fancybox.min.js von github.com/fancyapps/fancybox her­un­ter in das erstell­te Ver­zeich­nis lib.
  • Füge den fol­gen­den Code in Dei­ne functions.php ein:
/*
 * Simple short code for inserting a fancy boxed imaged 
 * (C) 2023 Karsten Reincke
 * SPDX-License-Identifier: MIT
 */
function fcbPicCode($atts){
  $atts = (array) $atts;
  $imid = $atts[0];   // obligatoric parameter
  $width = $atts[1];  // obligatoric parameter
  $wpsize = "";       // thumbnail, medium, large, or full
  $alt="";                    // optional parameter
  $style="is-style-default";  // optional parameter 
  $align="alignleft";         // optional parameter

  /* IDEA: try to download the best fitting image size be default.
   * Download the full sized image if and when the user had said
   * she wants to see it by a click (fancy)
   */
  if ($width <= 150)
    $wpsize = "thumbnail";
  elseif ($width <=300)
    $wpsize = "medium";
  elseif ($width <= 1024)
    $wpsize = "large";
  else
    $wpsize = "full";

  /* get the path to the original image */
  $fimgp=wp_get_attachment_image_url($imid,"full");
  if (!($fimgp)) return ("wrong image data");
  /* if it's an svg, there won't be any smaller images */
  if (wp_get_image_mime($fimgp) == "svg" )
    $simgp=$fimgp;
  else {
  /* otherwise get the path to the fitting smaller image */
    $simgp=wp_get_attachment_image_url($imid,$wpsize);
    if (!($simgp)) $simgp=$fimgp;
  }

  if (array_key_exists(2,$atts)) {
    $alt=$atts[2];
    if (array_key_exists(3,$atts)) {
      $style=$atts[3];
      if (array_key_exists(4,$atts))
        $align=$atts[4];
    }
  }

  $res=  
   '<div class="wp-block-image">' .
   '<figure class="' . $align . ' size-medium is-resized ' . $style . '">' .
     '<a href="' . $fimgp . '" data-fancybox="">' .
       '<img src="' . $simgp . '" alt="'. $alt .'" width="' . $width . '" >' .
      '</a>' .
   '</figure></div>';
  return $res;
}
add_shortcode('fcbpic', 'fcbPicCode');
  • Füge die fol­gen­den Zei­len in Dei­ne header.php, und zwar direkt vor dem Tag </head>;
<link rel="stylesheet" type="text/css"
  href="<?php echo get_stylesheet_directory_uri(); ?>/lib/jquery.fancybox.min.css" media="all">
<script type="text/javascript"
  src="<?php echo get_stylesheet_directory_uri();?>/lib/jquery.fancybox.min.js"></script>

Hintergrund

Natür­lich gibt es dafür auch ein Word­Press-Plug­in. Voll­mun­dig ver­spricht es, “Fan­cy­Box” wer­de “[…] auto­ma­ti­cal­ly appli­ed to all your image links and gal­le­ries”. 3 Die Beschrei­bung sagt vor­sich­ti­ger, das Plug­in benut­ze “[…] jQuery to app­ly Fan­cy­Box to ANY thumb­nails that link direct­ly to an image”. 4 Mir jeden­falls war damit nicht gehol­fen: Ich möch­te Bei­trä­ge im ers­ten Absatz mit einem klei­nen Bild ‘auf­hüb­schen’ und es mei­ner Lese­rin — auf einen Klick hin — in der ori­gi­na­len Grö­ße anzei­gen kön­nen. Auf Thumb­nails möch­te ich nicht begrenzt sein.

So habe ich auf die manu­el­le Metho­de zurück­grif­fen: Fan­cy-Biblio­the­ken im Child-The­me-Ord­ner abge­legt und einen beque­me­ren Short­code defi­niert: 5

[­fcbpic imageID width alt imageStyle imageAlignment]

Kon­kret habe ich unse­ren Code so erzeugt:

[fcbpic 5516 400 "tomcat in a basket" is-style-rounded aligncenter]

Im Übri­gen: Män­ner sind mit­ge­meint.

  1. z.B. 1200x628. oder 1280x720 vgl. pars pro toto wpastra.com[]
  2. Aber Vor­sicht: hier gibt es gera­de begin­nen­de Lizen­zir­ri­ta­tio­nen. Ich swit­che des­halb zurück zur letz­ten 3er Ver­si­on![]
  3. vgl. Fan­cy Box Instal­la­ti­on[]
  4. vgl. Fan­cy Box Details[]
  5. Die *imag­eId* erhält frau, wenn sie ihre Media­bi­blio­thek öff­net und das gewünsch­te Bild anklickt. Oben in der Url­zei­le erscheint dann die Bild-ID.[]

Kommentar schreiben

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

To top