Envira Gallery werkt niet meer na overstap op https://

Envira GalleryProbleem:
Onlangs heb ik voor een WordPress website een SSL certificaat van Let’s Encrypt geïnstalleerd. Hierna heb ik de verbinding in WordPress veranderd http:// naar https://. Dit ging allemaal goed met uitzondering van Envira Gallery. Zodra een afbeelding werd geopend in de lightbox (pop-up) was de website nier meer veilig. Na het openen van Google Chrome console zag ik de melding “mixed content”. In de lightbox werden de afbeeldingen ingeladen via http:// en niet https:// wat dus niet juist was.

De simpele oplossing:
De simpelste oplossing was om een MySQL databasedump te maken en overal het woord http://www.domeinnaam.nl te vervangen door https://www.domeinnaam.nl. Vervolgens importeer je deze databasedump weer. Over het algemeen werkt dit goed bij WordPress websites om over te stappen naar https://. Voor Envira Gallery creëerde het een nieuw probleem. Volgens de plugin zaten er geen foto’s meer in de galerijen terwijl die gewoon in de database en op de server stonden.

Waarom de simpele oplossing niet werkte:
De plugin slaat de fotogegevens als een serialized waarde op in de database. In het geval van een fotogalerij bestaat de serialized waarde uit meerdere waardes. Elke waarde in een serialized waarde wordt voorzien van het type en aantal tekens in de waarde. Hieronder staat een simpel voorbeeld. Je ziet dat voor het woord “gallery” de waarde 7 staat omdat het woord uit zoveel tekens bestaat. Voor het getal staat een s wat betekent dat het een string is of wel tekst.

a:3:{s:2:"id";i:509;s:7:"gallery";a:122:{i:1031

Stel je past het woord “gallery” aan naar “album” dan klopt het aantal tekens niet meer en dit maakt de serialized waarde ongeldig. Door de simpele oplossing van hierboven waren alle verwijzingen naar de foto’s ongeldig gemaakt en werden die niet meer herkend.

De werkende oplossing:
Om het mixed content probleem op te lossen moet je alle http:// verwijzingen voor de galerij aanpassen. Om dit goed te doen moet je de serialized waarde unserializen -> aanpassen -> serializen en weer opslaan in de database. Hiervoor heb je wel wat ervaring met MySQL, PHPMyAdmin en PHP nodig.

  1. Kopieer het script onderin deze pagina naar een PHP script
  2. Log in via PHPMyAdmin (of vergelijkbaar)
  3. Open de tabel wp_postmeta
  4. Voer deze query uit: SELECT * FROM `pvrabo_postmeta` WHERE `meta_key` LIKE ‘%_eg_gallery_data%’
  5. Kopieer de inhoud van meta_value
  6. Vervang de waarde “de meta_value waarde” in het script uit stap 1
  7. Upload het script naar een server en voer het uit
  8. Kopieer het resultaat van het script naar het vakje meta_value uit stap 5 en sla op
  9. Herhaal stap 5 t/m 9 als er meerdere galerijen zijn
  10. Open de tabel wp_options
  11. Voer deze query uit: DELETE  FROM `pvrabo_options` WHERE `option_name` LIKE ‘%_transient__eg_cache%’
  12. Bezoek de galerijen en controleer of de mixed content melding verdwenen is

Het script:

<?php 
$data = unserialize('de meta_value waarde');
foreach ($data['gallery'] as $key => $item) {
    $data['gallery'][$key]['src'] = str_replace('http://', 'https://', $data['gallery'][$key]['src']);
    $data['gallery'][$key]['link'] = str_replace('http://', 'https://', $data['gallery'][$key]['link']);
}
echo serialize($data);

Verbeteringen aan het script:
Bovenstaand script is natuurlijk heel eenvoudig. Dit zou uitgebreid kunnen worden met code die stap 4 uitvoert. Het resultaat van stap 4 kan in een foreach loop gebruikt worden. Het resultaat kan je weer opslaan in de database. Aan het einde moet dan wel code toegevoegd worden die stap 11 uitvoert.

In mijn geval was dit nogal veel werk aangezien het maar om 5 galerijen ging. Je moet het script ook testen. Bovenstaande handelingen 5 keer herhalen was dus sneller.

Laat een reactie achter

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

Deze site gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.