Documentatie
Aan de slag met verklein.nu
Installeren, instellen en automatiseren. Begin bij Installeren, of spring meteen naar wat je zoekt.
Installeren
- De plugin staat binnenkort op WordPress.org. Dan ga je in WordPress naar Plugins → Nieuwe plugin en zoek je op verklein.nu.
- Activeer de plugin. Je vindt hem daarna als verklein.nu in het beheermenu, direct onder Media.
- Open het tabblad Systeem & hulp en kijk of je server WebP en AVIF kan maken.
- Maak een back-up van je database en de map
wp-content/uploadsvoordat je de bibliotheek voor het eerst omzet.
Na de installatie verandert er nog niets: er wordt niets omgezet tot jij dat start of het omzetten van uploads aanzet.
Het beheer: vijf tabbladen
| Bestaande afbeeldingen | Een wizard in vier stappen: bibliotheek bekijken, kiezen, voorbeeld, omzetten. Meestal gebruik je hem maar één keer. |
|---|---|
| Nieuwe uploads | Het startscherm: de schakelaar voor automatisch omzetten bij het uploaden, de laatst omgezette uploads, en de status van je bibliotheek met een knop naar de wizard zolang er nog iets om te zetten is. |
| Instellingen | Alle instellingen op één plek, voor bestaande afbeeldingen én nieuwe uploads: formaat, kwaliteit, originelen en het verkleinen van te grote uploads. De rest staat ingeklapt onder Meer opties. |
| Herstellen & opruimen | Originelen terugzetten, URL’s opnieuw bijwerken of repareren, overgeslagen afbeeldingen bekijken en back-ups verwijderen. |
| Systeem & hulp | De systeemcheck, een test of je server WebP en AVIF goed aflevert, en uitleg met de nginx-regels voor jouw site. |
Nieuwe uploads
Automatisch omzetten staat standaard aan; de schakelaar staat op het tabblad Nieuwe uploads. Elke nieuwe JPG en PNG wordt bij het uploaden omgezet: WordPress schrijft het hoofdbestand en elk formaat meteen in WebP of AVIF, zonder eerst JPG’s te maken.
- Formaat en kwaliteit (bij Instellingen): standaard hetzelfde als voor bestaande afbeeldingen, maar je kunt uploads een eigen formaat of kwaliteit geven. AVIF maakt elke upload een paar seconden trager; WebP is snel.
- Maximale afmetingen (bij Instellingen): foto’s van een camera of telefoon zijn vaak 4000 tot 6000 pixels. Stel een maximale breedte en hoogte in. Kies of een grotere upload eerst kleiner wordt gemaakt, of wordt geweigerd. Werkt ook als automatisch omzetten uit staat.
- Maximale bestandsgrootte per afbeelding (bij Instellingen): bijvoorbeeld 1 MB. Grotere afbeeldingen worden geweigerd met een melding. Er wordt gecontroleerd na het verkleinen.
- Uploadlimiet (bij Instellingen): de maximale grootte voor alle bestanden. De pagina laat zien wat PHP op je server toestaat. Een plugin kan de limiet alleen lager zetten; hoger moet via je hoster of php.ini.
- Waar het werkt: de Mediabibliotheek, de blokeditor, het mediavenster van page builders, WooCommerce-productimports, de REST API en
wp media import. GIF, SVG en PDF blijven bij uploaden ongemoeid.
Zet je het uit, dan blijven uploads JPG of PNG tot je ze omzet: per afbeelding met de knop Omzetten in de Mediabibliotheek, of met de rest van de bibliotheek.
Bestaande afbeeldingen
Wat al in je bibliotheek staat zet je in één keer om met de wizard op het tabblad Bestaande afbeeldingen. Zolang er nog iets om te zetten is, staat er ook een knop naar de wizard bovenaan Nieuwe uploads.
- Je bibliotheek: hoeveel afbeeldingen kleiner kunnen, en of je server WebP en AVIF kan maken.
- Kiezen: het formaat (WebP, AVIF of JPG/PNG houden), wat er met de originelen gebeurt en hoeveel je comprimeert. De aanbevolen keuzes staan al aan.
- Voorbeeld: een afbeelding uit je bibliotheek in de drie niveaus. Sleep de lijn om met het origineel te vergelijken, of kies zelf een afbeelding om mee te testen. Er wordt nog niets opgeslagen.
- Omzetten: bevestig dat je een back-up hebt en start. De taak loopt in korte porties; laat de pagina open voor het snelste resultaat. Sluit je hem, dan gaat de taak verder via WP-Cron.
Na afloop zie je wat er bespaard is. Nieuwe uploads krijgen automatisch dezelfde behandeling. De caches worden geleegd; leeg zelf de cache van je CDN of Varnish. Later opnieuw draaien, bijvoorbeeld met andere instellingen, kan gewoon via hetzelfde tabblad.
Instellingen
Deze instellingen gelden voor bestaande afbeeldingen én nieuwe uploads. Voor de meeste sites zijn de vier hoofdkeuzes genoeg.
| Omzetten naar | WebP (aanbevolen), AVIF, of formaat houden, alleen comprimeren. |
|---|---|
| Compressieniveau | Lossy (kleinst), Glossy (voor fotografie en webshops), Lossless (geen zichtbaar verschil) of Eigen, met je eigen kwaliteit per formaat. |
| Levering | Vervangen (ter plekke, URL’s bijgewerkt) of naast het origineel met fallback (kopieën en <picture>). De overzichtspagina zet ze naast elkaar. |
| Originele bestanden | Naar een back-upmap (aanbevolen), laten staan of verwijderen. |
Onder Meer opties staan ingeklapt:
- PNG, JPG, GIF en PDF: PNG lossless naar WebP, PNG naar 256 kleuren of naar JPG, progressieve JPG’s, GIF naar WebP, PDF’s comprimeren en de inspanning.
- Back-ups en URL’s: slimme back-up, back-ups automatisch verwijderen, URL’s bijwerken in alle tabellen, oude URL’s doorsturen en elke pagina controleren op achtergebleven oude URL’s.
- Welke afbeeldingen worden overgeslagen: bestandstypen, namen en mappen, bestandsgrootte, uploadperiode, berichttypen en het site-icoon.
- Afbeeldingsformaten: per thumbnailformaat niet comprimeren of niet meer aanmaken, en de maximale grootte.
- Fallback-modus:
<picture>-elementen, de hele pagina, de Accept-headerregel en uitsluitingen op de site. - Geavanceerd: metadata, alleen als het kleiner is, caches, de lengte van een portie, verwijderen en e-mailrapporten.
Instellingen exporteren en importeren als JSON-bestand kan onderaan dezelfde pagina.
Systeemeisen
| WordPress | 6.7 of nieuwer (getest tot en met 7.1). Pas vanaf 6.7 zet WordPress ook het hoofdbestand zelf om, zodat niets dubbel wordt gecomprimeerd. |
|---|---|
| PHP | 7.4 of nieuwer. |
| Beeldbewerking | Imagick (aanbevolen) of GD met WebP-ondersteuning. Voor AVIF moet Imagick of GD met AVIF-ondersteuning zijn gebouwd. De Systeemcheck laat zien wat je server kan. |
| Rechten | Beheerders (manage_options). Aan te passen met een filter. |
| Schijfruimte | Ruimte voor de nieuwe bestanden naast de oude, en voor de back-ups zolang je die bewaart. |
| nginx | Een paar regels in je serverconfiguratie: zie nginx hieronder. Apache en LiteSpeed hebben niets extra’s nodig. |
| WP-CLI | Optioneel, maar het snelst voor grote bibliotheken. |
nginx
nginx negeert het .htaccess-bestand dat de back-upmap afsluit, dus zet je zelf een regel in de serverconfiguratie. Met de tweede regel komen oude JPG- en PNG-URL’s bij WordPress terecht, voor de 301-doorverwijzing. De exacte mapnaam voor jouw site staat op het tabblad Systeem & hulp, en de systeemcheck test of de map dicht is.
location ^~ /wp-content/uploads/verklein-backup-<naam>/ {
deny all;
}
location ~* ^/wp-content/uploads/.+\.(jpe?g|png)$ {
try_files $uri /index.php?$args;
}
types { image/webp webp; image/avif avif; }
Apache en LiteSpeed hebben niets extra’s nodig.
WP-CLI
Alles uit het dashboard werkt ook in de terminal, zonder time-outs. Opties die je weglaat komen uit de instellingen. wp byt werkt nog als alias, voor scripts van de oude mu-plugin.
wp verklein convert --to=webp --dry-run # eerst kijken wat er gebeurt
wp verklein convert --to=webp # omzetten, URL's bijwerken, caches legen
wp verklein convert --to=avif --quality=55 --effort=4
wp verklein convert --to=avif --mode=fallback # JPG/PNG houden, AVIF- en WebP-kopieën, <picture>
wp verklein convert --to=webp --originals=keep # originelen laten staan
wp verklein convert --to=webp --ids=12,15 # alleen deze bijlagen
wp verklein convert --to=webp --network # multisite: alle sites
wp --url=https://example.com/site-2 verklein convert --to=webp # één subsite
wp verklein restore --dry-run
wp verklein restore --ids=12,15
wp verklein rewrite --dry-run
wp verklein repair
wp verklein status
wp verklein cleanup --yes
wp verklein job run # taak uit het dashboard afmaken
wp verklein convert
Zet afbeeldingen om naar WebP of AVIF, inclusief alle formaten en (standaard) de URL’s in de database. Zonder --to, --ids of --network toont het commando de hulp.
--to=<webp|avif> | Doelformaat. |
|---|---|
--mode=<replace|fallback> | Vervangen (ter plekke, URL’s bijgewerkt) of naast het origineel met fallback (kopieën en <picture>). Standaard uit de instellingen. |
--no-webp-fallback | Fallback-modus met --to=avif: alleen AVIF-kopieën maken, geen extra WebP-kopieën (die worden standaard wel gemaakt). |
--quality=<1-100> | Kwaliteit. Standaard uit de instellingen (WebP 75, AVIF 60). |
--effort=<0-9> | Inspanning: 0 is het snelst, 9 geeft het kleinste bestand. Standaard 5. |
--originals=<backup|keep|delete> | Wat er met de originelen gebeurt: naar de back-upmap, laten staan of verwijderen. |
--no-rewrite-urls | De URL’s in de database niet bijwerken (standaard gebeurt dat wel). |
--no-all-tables-with-prefix | Alleen de WordPress-tabellen doorzoeken, niet de tabellen van plugins. |
--no-only-smaller | Ook omzetten als het resultaat niet kleiner is. |
--force-reencode | Ook afbeeldingen die al in het doelformaat staan opnieuw coderen. |
--ids=<ids> | Alleen deze bijlage-ID’s, gescheiden door komma’s. |
--retry | Ook afbeeldingen die eerder zijn overgeslagen of mislukt opnieuw proberen. |
--dry-run | Laten zien wat er zou gebeuren, zonder iets te veranderen. |
--network | Multisite: het commando voor elke site uitvoeren. |
--yes | De bevestiging overslaan (bij media in de cloud, of als de URL’s niet worden bijgewerkt terwijl de originelen worden verplaatst). |
| Oude vlaggen | --no-keep-original (hetzelfde als --originals=delete), --rewrite-urls, --all-tables-with-prefix, --rewrite-meta en --from-original worden nog geaccepteerd. |
wp verklein restore
Zet de originele JPG- en PNG-bestanden en hun URL’s terug. Werkt ook voor afbeeldingen die met de oude mu-plugin zijn omgezet. Bij afbeeldingen met kopieën (fallback-modus) worden alleen de kopieën verwijderd.
--ids=<ids> | Alleen deze bijlage-ID’s. |
|---|---|
--keep-converted | De WebP- en AVIF-bestanden laten staan. |
--dry-run | Laten zien wat er zou worden hersteld. |
--network | Multisite: voor elke site. |
Overige commando’s
wp verklein rewrite [--all-tables-with-prefix] [--dry-run] | Werkt de URL’s in de database opnieuw bij voor alle omgezette bestanden. Handig na het importeren van content, of als je met --no-rewrite-urls hebt omgezet. Maakt ook een gestopte hersteltaak af. |
|---|---|
wp verklein repair [--dry-run] | Repareert URL’s die naar een ontbrekend bestand wijzen. URL’s van bestaande bestanden blijven altijd ongemoeid. |
wp verklein status | De gekozen modus, statistieken (nog om te zetten, omgezet, met kopieën, herstelbaar, bespaard) en de volledige systeemcheck. |
wp verklein cleanup [--yes] | Verwijdert de back-ups van de originelen. Daarna kun je niet meer herstellen. |
wp verklein job <status|run|pause|cancel|clear> | Beheert de taak die in het dashboard is gestart. Met run maak je hem in de terminal af. |
wp verklein help [convert|restore] | Overzicht van alle commando’s en opties. |
Voor ontwikkelaars
Met deze filters en actions pas je het gedrag aan vanuit je thema of een eigen plugin.
verklein_capabilityfilter · string $capability | De capability die nodig is voor de beheerpagina, de Mediabibliotheek-acties en de AJAX-verzoeken. Standaard manage_options. |
|---|---|
verklein_excluded_idsfilter · int[] $ids, array $options | Bijlage-ID’s die bij het omzetten van de bibliotheek worden overgeslagen. Bevat al het site-icoon en de e-mailkoptekst van WooCommerce. $options zijn de instellingen van de taak. |
verklein_convert_uploadfilter · bool $convert, array $file | Geef false terug om een nieuwe upload niet om te zetten. $file is het upload-array van WordPress (name, type, tmp_name, size). |
verklein_resize_uploadfilter · bool $resize, array $file | Geef false terug om een nieuwe upload niet te verkleinen, ook als Uploads verkleinen aan staat. |
verklein_rewrite_hostsfilter · string[] $hosts | Hostnamen waarvan upload-URL’s worden herschreven. Standaard die van je home-URL, site-URL en uploads-URL. Voeg een CDN of oud domein toe. |
verklein_rewrite_skip_tablesfilter · string[] $prefixes | Tabellen (zonder WordPress-voorvoegsel) die de URL-update overslaat. Elke tabel die met een van deze teksten begint, wordt overgeslagen. |
verklein_purge_cachesaction · geen argumenten | Wordt aangeroepen nadat de plugin de caches heeft geleegd. Leeg hier je eigen cache of CDN. |
verklein_convertedaction · int $id, array $record | Na het omzetten van een bijlage, in beide modi. $record bevat onder meer format, quality, bytes_before en bytes_after. Bij vervangen ook new_files; in de fallback-modus delivery ('fallback'), formats en files. |
verklein_restoredaction · int $id, array $record | Na het herstellen van een bijlage, met de herstelgegevens die zijn gebruikt. In de fallback-modus zijn dat de gegevens van de verwijderde kopieën. |
verklein_picture_enabledfilter · bool $enabled | Fallback-modus: geef false terug om op deze pagina geen <picture>-elementen te maken. Staat al uit in het beheer, feeds, de REST API, AJAX, cron, WP-CLI, AMP en WooCommerce-e-mails. |
verklein_picture_htmlfilter · string $html, string $img, int $attachment_id | Fallback-modus: de <picture>-opmaak voor één afbeelding. $img is de oorspronkelijke img-tag, $attachment_id is 0 als die onbekend is. |
// Ook URL's op je CDN herschrijven.
add_filter( 'verklein_rewrite_hosts', function ( $hosts ) {
$hosts[] = 'cdn.example.com';
return $hosts;
} );
// Redacteuren mogen ook omzetten.
add_filter( 'verklein_capability', function () {
return 'edit_others_posts';
} );
// Het logo en de ID's 42 en 43 nooit omzetten.
add_filter( 'verklein_excluded_ids', function ( $ids ) {
return array_merge( $ids, array( 42, 43, (int) get_theme_mod( 'custom_logo' ) ) );
} );
// Geen conversie voor uploads met "origineel" in de bestandsnaam.
add_filter( 'verklein_convert_upload', function ( $convert, $file ) {
return false === stripos( $file['name'], 'origineel' ) ? $convert : false;
}, 10, 2 );
// Ook de tabellen van een eigen logplugin overslaan.
add_filter( 'verklein_rewrite_skip_tables', function ( $prefixes ) {
$prefixes[] = 'mijnlog_';
return $prefixes;
} );
// Na de taak ook de CDN-cache legen.
add_action( 'verklein_purge_caches', 'mijn_cdn_purge_all' );
// Geen <picture> op de afrekenpagina.
add_filter( 'verklein_picture_enabled', function ( $enabled ) {
return function_exists( 'is_checkout' ) && is_checkout() ? false : $enabled;
} );
// Een class toevoegen aan elk <picture>-element.
add_filter( 'verklein_picture_html', function ( $html ) {
return str_replace( '<picture>', '<picture class="vk-picture">', $html );
} );
// Bijhouden hoeveel er per afbeelding is bespaard.
add_action( 'verklein_converted', function ( $id, $record ) {
error_log( sprintf( 'Bijlage %d: %d bytes bespaard', $id, $record['bytes_before'] - $record['bytes_after'] ) );
}, 10, 2 );