|

Générer des vignettes de photos de WordPress à copier-coller dans un forum

Il peut être utile de référencer son blog dans des forums dédiés au même thème. Si on fait cela avec des vignettes de photos, c’est tant mieux car les utilisateurs aiment voir les photos en plus grand. C’est possible avec un BBCode qui ressemble à ceci: [url=https://server/path/][img]https://server/path/img.jpg[/img][/url]. Les photos (médias) dans WordPress disposent de IDs HTML et l’on peut mettre un lien direct vers la photo dans la page avec la syntaxe https://server/path/#myID.

Quelques problèmes existent cependant:

  • Les galeries n’ont pas des identifiants uniques et les photos dans les galeries ne disposent pas d’identifiant du tout. Il faut donc prendre l’ID de la galerie qui est numéroté à partir de 1 et qui peut potentiellement changer en modifiant la page. Une photo unique ne change pas d’identifiant.
  • Il faut pouvoir retirer les information nécessaires de le page WordPress. Pour cela, il faut rajouter un bout de code, je fais cela avec un query string à la fin de l’adresse web: ?a. Et il faut un code qui génère le bloc en BBCode, je fais cela en JavaScript, mais celui-ci doit être appelé dans la page WordPress. Il faut donc éditer la page défaut.
  • Les médias de WordPress doivent être délivrés sous divers formats qui se retrouvent dans les balises <img> sous l’attribut srcset. Je pioche ici pour retirer le format d’une vignette.
  • Le code présenté ci-dessous extrait aussi le titre affiché, s’il manque, le script ne fonctionne pas. Il est de même si une image ne présente psa d’un attribut srcset et que la taille de la vignette appelée n’est pas définie ou existante.

Le code présenté ici permet de cliquer sur une photo et d’avoir directement le BBCode à copier coller. Testé en septembre 2020 sous Google Chrome, WordPress 5.3.3 et le thème CleanBlogg 1.6.6 uniquement.

Emplacement pour placer la référence vers le fichier JavaScript

Le fichier est basique, je le place donc en fin de page pour que tout le code soit chargé, les images elles-mêmes peuvent encore manquer au chargement. Cela se passe sous “Apparence  > Éditeur de thèmes” et ici dans le fichier footer.php (pied de page) qui existe pour la plupart des thèmes. J’y place à la fin la balise <script> qui doit bien sûr renvoyer à un fichier existant. En noir les parties existantes, en rouge la ligne rajoutée.

    ...
    </div>
    <?php wp_footer(); ?>
    <script src="https://www.voyage-hors-saison.fr/wp-content/plugins/js/identify_imgs.js"></script>
  </body>
</html>

Le fichier JavaScript

Il faut retirer trois éléments du code: l’identifiant pour permettre le saut dans la page, le titre du média et l’adresse de la vignette. On fait ceci pour toutes les photos d’une page. Pour les deux premiers, il faut différencier si on a une image unique ou une galerie.

L’image unique dispose de son identifiant dans la balise <div> qui l’entoure, on cherche donc l’ID avec parentElement. Pour les galeries, l’identifiant se trouve trois niveaux au-dessus.

L’image unique trouve son titre dans la balise <p> au-dessous, on l’accède donc par nextSibling. Les galeries sont arrangées en listes <dl>, il faut donc remonter d’un cran et piocher dans la balise <dt> plus bas. On prend nextElementSibling car on trouve ici des éléments textes (blancs) entre les balises. Plus bas, je retire au titres des informations sur l’auteur.

Pour l’adresse de la vignette, je dissèque la longe balise srcset avec une expression régulière. Je prend l’adresse pour les vignettes larges de 392px parmi les information données entre virgules. Il me faut par exemple reconnaître ceci, mais uniquement prendre la partie avec l’adresse, représentée ici en bleu:

[...], https://www.voyage-hors-saison.fr/wp-content/uploads/2020/08/20200723-122622_oberer_bluntausee-392x221.jpg 392w, [...]

Tout à la fin, je construit un attribut onclick à rajouter à chaque photo quand le query string ?a est présent. Le rendu se fait avec un prompt car le texte y est sélectionné d’office et on peut le copier-coller sans autre manœuvre. Dans le cas présent, je place la vignette dans une in cadre de citation et l’adresse et donc la partie à cliquer s’étend sur la photo et le titre qui est en gras.

if(window.location.search == "?a"){
  var imgs = document.getElementsByTagName("img");
  for(var i=1; i<imgs.length; i++){
    var out = new Array();
    if(imgs[i].parentElement.tagName.toLowerCase() == "div"){ // IMAGE NORMALE
      out["imgid"] = imgs[i].parentElement.id;
      out["imgtit"] = imgs[i].nextSibling.textContent;
    } else { // GALERIE
      out['imgid'] = imgs[i].parentElement.parentElement.parentElement.id;
      out["imgtit"] = imgs[i].parentElement.nextElementSibling.innerText;
    }    
    out["imgid"] = window.location.href.replace(/\?a$/,'#') + out["imgid"];
    out["imgtit"] = out["imgtit"].replace(/\. Photo ©.*/,''); 
    out["imgurl"] = imgs[i].srcset.match(/(\S*) 392w/g);
    out["imgurl"] = RegExp.$1;
    imgs[i].setAttribute("onclick","prompt('copy','[quote][URL="+out["imgid"]+"][IMG]"+out["imgurl"]+"[/IMG]\\n[B][U]"+out["imgtit"]+"[/U][/B][/URL][/quote]')");
  }
}

Similar Posts

  • WordPress 4 zu 5 und falsche Zeilenumbrüche sanieren

    Thema: Ubuntu – MariaDB – WordPress – Apache – CleanBlogg Theme. Das Problem Beim Update von WordPress 4 zu WordPress 5 werden die Posts im alten Format übernommen. Diese editiert man besser weiter mit dem Plugin Classic Editor weil man sonst alle Absätze in Blöcke zerlegen müsste. Trotzdem werden alle Absätze nur mit einem Zeilenumbruch angezeigt (ausser wenn Medien dazwischen geschalten sind)….

  • Virtual Host für Apache auf Ubuntu

    Thema: Ubuntu – MariaDB – WordPress – Apache – CleanBlogg Theme. Neuen Virtual Host für  Apache unter Ubuntu anlegen Unter Ubuntu ist Apache so konfiguriert, dass einzelne Web-Domains und Subdomains in je einer Konfigurationsdatei definiert sind. Sie müssen in einem anderen Verzeichnis verlinkt sein und anschliessend muss der Webserver noch neu geladen werden. Konfigurationsdatei einer WordPress-Domain Der Code-Block zeigt eine einfache Konfigurationsdatei:…

  • WordPress Dateirechte

    Thema: Ubuntu – MariaDB – WordPress – Apache – CleanBlogg Theme. Diese Seite ist nur ein Entwurf und erhebt keinen Anspruch auf Vollständigkeit oder Richtigkeit! Letztes Upadate 24. Jänner 2026. Dateirechte im Filesystem am Server Versionen WordPress jedenfalls bis 6.9 Beim Installieren braucht man unter Umständen offenere Rechte als im Normalbetrieb. Nach dem Installieren sollten die Rechte in den…

  • Passwörter für WordPress in der Datenbank anpassen

    Thema: Ubuntu – MariaDB – WordPress – Apache – CleanBlogg Theme. Zwei User-Passwörter-Paare Bei einer einfachen WordPress-Installation gibt es nur zwei User in Zusammenhang mit einer WordPress-Instanz: den Datenbank-User und den Login-User. Beide sind sowohl in den WordPress-Files als auch in der Datenbank definiert bzw. definierbar. Datenbank-User bei WordPress Das ist jener User mit Passwort, der konkret in die…

  • Eingesetzte WordPress-Plugins

    Thema: Ubuntu – MariaDB – WordPress – Apache – CleanBlogg Theme. Sämtliche Erweiterungen zu WordPress können über Plugins eingespielt werden. Die meisten wichtigen liegen in vielen verschiedenen Fassungen und von vielen verschieden Anbietern vor. Ebenso wie beim Thema/Design gibt es gratis Plugins, kostenpflichtige Plugins und Mischformen davon. Einige Plugins helfen nur bein Editieren (Backend), andere optimieren die online sichtbare…

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.