Klonen & vertalen (WordPress)
Klonen en aanpassen van een webwinkel. Fluitje van een cent, toch? Mwahh:
Procedure - On-site - 16h
Tijdschatting:
* Klonen: 2h * Basisinstellingen: 0,5h * Mollie: 0,5h * PayPal: 0,5h * Bestaande orders verwijderen: 0,5h * Bestaande klanten verwijderen: 0,25h * Ingevulde formulieren verwijderen: 0,25h * Herindexeer Yoast SEO-index: 0,25h * Verwijder onvertaalde onderdelen: 0,25h * Factuursjablonen aanpassen: 0,5h * Vertalingen - SQL-vertaalscripts: 8h * Vertalingen - Via de user-interface: 0,5h ------------------------------------------ Som: 14,25h → 16h
Site & db klonen - 2h
- Als dat locaal gebeurt (binnen dezelfde server), dan is dat in een half uur gepiept
- Als dat via download-aanpassen-upload gaat, dan duurt het ca. 2 uur (de doorlooptijd is echter 2x6h: Down- & uploaden kan héél lang duren)
- Ik heb er 2h voor inschat: Duurt toch altijd langer dan verwacht.
Details:
- Caching uitzetten
- Kopie maken van site & db
- Kopie verplaatsen naar doellocatie
- Site instantiëren op doellocatie
- Evt. DNS-entries aanpassen
- SSL toepassen
- Emailadres aanmaken.
Basisinstellingen - 0,5h
Basisinstellingen van de nieuwe site aanpassen:
- Wachtwoord eigen account evt. aanpassen
- Settings » General: Site-titel aanpassen → Gaat via db-vertaling
- Settings » General: Taal aanpassen
- SMTP: Nieuwe wachwoord invoeren: Dit gaat niet via de db-updates ivm. beveiliging
- Taalwissel (maatwerk-control) aanpassen: De huidige site gaat eruit, en een nieuwe site komt erbij.
Mollie - 0,5h
- Nieuw profiel aanmaken
- Betaalmethodes kiezen voor dit profiel (PayPal, bankoverschrijving & betaling-op-factuur gaan buiten Mollie om)
- Betaalomgeving van dit nieuwe profiel aanpassen (alleen logo uploaden)
- WooCommerce: API-sleutel van Mollie van dit nieuwe profiel invoeren
- WooCommerce: Betaalmethodes activeren en sorteren.
PayPal - 0,5h
- Voor PayPal hoef je weinig te doen, aannemende dat Live API username, Live API password en Live API signature zijn meegekomen met de kloon. Ik geloof dat je anno 2020, niet meer binnen je PayPal-account de adressen van webwinkels hoeft toe te voegen
- Uiteraard testen. En dat kost ca. een half uur inclusief mogelijke complicaties.
Bestaande orders verwijderen - 0,5h
- Via de interface, kun je in ieder geval tot 100 orders order per keer verwijderen. Bij 250 orders/keer kreeg ik foutmeldingen
- Via WP-CLI:
wp post delete $(wp post list --field=ID --post_type="shop_order") --force
- Werkt super - Zie Orders in bulk verwijderen (WooCommerce) voor details.
Bestaande klanten verwijderen - 0,25h
Verwijderen van klanten is minder werk dan het verwijderen van orders, want lang niet alle klanten maken een account aan:
- Dit kan opnieuw via de interface, maar da's gedoe
- Via WP-CLI:
wp user delete $(wp user list --role="customer" --field=ID) --yes
- Goede ervaringen mee - Zie Bulkverwijderen gebruikers (WordPress) voor details.
Ingevulde formulieren verwijderen - 0,25h
Dit betreft Gravity Forms. Verwijder eerst via de interface de formulieren. Nu zijn ze helaas nog steeds aanwezig in de database. Om ook die te verwijderen:
# These tables are not connected and there is no "cascaded deletion" configured, # so you'll have to delete content of these tables separaterly: # # delete from wp_gf_entry; # delete from wp_gf_entry_meta; # delete from wp_gf_entry_notes;
Verwijder onvertaalde onderdelen - 0,25h
Bv. blogpostings die niet in de doeltaal beschikbaar zijn
Herindexeer Yoast SEO-index - 0,25h
Ververs de Yoast index-table (wp_yoast_indexable
) middels
wp yoast index --reindex
Factuursjablonen aanpassen - 0,5h
Bij gebruik WooCommerce PDF Invoices-plugin: WooCommerce » PDF Invoices
:
- Shop name
- Shop Address: Emailadres aanpassen
- Testen.
Vertalingen - SQL-vertaalscripts - 8h
De bulk van het vertaalwerk doe ik middels SQL-scripts. Ik ga ervanuit dat dit server-sided gebeurd (ik ga dus niet de site downloaden naar m'n werkstation, vertalen, en weer uploaden). Da's efficiënt qua down- & uploadtijden, maar inefficiënt omdat alle handelingen veel kritischer zijn:
- Db-backup maken - 0,25h
- Scripts stuk voor stuk uitvoeren & testen: Dit is nog geen routine-klus - 4h
- Mogelijke complicaties: Toch downloaden, testen, etc. - 4h
Vertalingen - Via de user-interface - 0,5h
Dit zijn objecten waarvan ik het niet handig vind om ze via SQL bij te werken. Dit doe ik liever handmatig via de gebruikersinterface:
- Contactpagina
- Privacy statement
- Algemene voorwaarden
Procedure - Off-site - 16h
Bij elkaar:
* gAna: 0,25h * Conv.tracking: 4h * gAds: 2h * gMC: 4h * gSC: 1h * Molly: 0,5h * Onvoorzien: 4h --------------------- Som: 15,75h → 16h
gAna - 0,25h
- Property toevoegen aan bestaand Google Analytics-account
Conversion Tracking configureren - 4h
Dat ging recentelijk vrij moeizaam. Vandaar de ruime schatting.
gAds - 2h
Dit betreft het configureren van een kaal account:
- Site toevoegen aan bestaand Google Ads-account
- Tags?
- Koppeling gAna
- Conversion tracking?
De Search-campagne kan deels automatisch gegenereerd worden ahv. de site-database. Dat kan een hoop werk schelen. Toch doe ik dat op dit moment niet, want dit is een klus die goed uitbesteed kan worden.
gMC - 4h
Voor een Google Shopping-campagne, heb je een feed nodig in Google Merchant Center. Die kan automatisch worden aangemaakt ahv. de site-database.
gSC - 1h
Site toevoegen aan bestaand Google Site Console - Niet iets wat ik elke dag doe. Plus dat je moet wachten voordat-ie de tags herkend ofzo.
Molly - 0,5h
Account uitbreiden met nieuwe site.
Casus: ch_fr (maart 2021)
Eindelijk aan de slag: We gaan example.com klonen naar example.ch en vertalen naar het Frans. Alle vertaalscripts zijn klaar, alle routines zijn voldoende getest en de bronsite is voldoende bijgewerkt (dat vergde enige coördinatie, want de bronsite is voortdurend in ontwikkeling).
Context
- Zowel de bronsite als de doelsite, bevinden zich binnen hetzelfde CloudWays-account
- Zaken zoals domeinnaamregistratie, DNS-entries en email, gebeuren binnen een TransIP-account
De vertaal-werkzaamheden vinden plaats op een aparte ontwikkelserver:
- Sommige routines zijn verbazend rekenintensief en moeten uren achtereen ongestort hun werk kunnen doen: Hergenereren van alle afbeeldingen via het WP-CLI-commando
wp image recreate
kost op m'n laptop bv. zo'n zes uur. Ik vind het niet handig om zulke intensieve taken op een productieserver te doen. Daarnaast is sommige code redelijk experimenteel en een foutje is zo gemaakt. Temeer daar je op CloudWays niet zelf de namen van databases kunt bepalen en ik maar al te gemakkelijk een database genaamdfsdfdsfsdfs
, kan verwarren met een database genaamdfgdgdgdddd
. Ik vind het ook niet handig om routines die uren kosten, op m'n laptop te doen: Altijd lastig om daar rekening mee te houden - De site is zo'n 2GB groot. Down- & uploaden naar m'n laptop is daarom niet practisch. Server-server-communicatie gaat een stuk sneller.
Hosting-account aanpassen (0,25h)
- DNS-entries verwezen al naar het Cloudways-account. Die zijn teruggezet naar de ontwikkelserver (TransIP)
- Email aanmaken: De ervaring leert, dat je vermoedelijk wel webwinkels kunt runnen zonder eigen emailadres, maar dat dit al snel te ingewikkeld is. Daarom:
- Binnen het TransIP-account email-service afgenomen (DNS & email gaan altijd via TransIP en nooit via CloudWays)
- DNS-entries aangepast
- Emailaccount info@ aangemaakt
- Email getest.
Bestanden kopiëren
- Maak op de doellocatie een virtueel hostaccount aan, inclusief database (5min)
- Maak op bronlocatie een gecomprimeerde (archiefbestand) backup van de database (5min)
- Kopiëer de site. Zoiets als
rsync -hrz master_of_disaster@123.456.789.012:applications/example_com/public_html/* . --info=progress2
. Zie m'n CloudWays-commando-document voor details. Dit kostte op 22 maart 2021, precies 15 minuten. Als ik dit via m'n laptop had gedaan, had dat richting een halve dag geduurd. Kopiëren geeft wat foutmeldingen, maar die zijn niet ernstig: Sommige WAF-bestanden (WordFence Firewall) kunnen niet gekopiëerd worden, en er is de onschuldige waarschuwingskipping non-regular file "wp-content/db.php"
.
Site doellocatie aan de praat krijgen
wp-config.php
aanpassen- Database uitpakken & importeren
- Certbot toepassen om een SSL-certificaat te verkrijgen en aanpassen virtuele host-definities: Zelfs als het domein maar nét is aangemaakt, werkt Certbot al. Da's erg handig. Ik hoef dus alleen te werken met een domein met https
wp search-replace
- Alleen met https. Vergde trouwens bijna twee minuten executietijd.
Nu staat er een werkende webwinkel.
Plugins uitschakelen
Sommige dingen zijn binnen de huidige omgeving niet handig. Daarom:
wp plugin deactivate wp-rocket redis-cache wp-dbmanager iwp-client
- Je kunt in één
wp plugin deactivate
-commando meerdere plugins uitschakelen. Je moet ze scheiden met spaties, niet met komma's iwp-client
is een plugin om update-meldingen te onderdrukken. Die plugin wordt gebruikt door het hostingbedrijf dat de originele webwinkel host. Om precieser te zijn: iwp-client is de originele naam. In WordPress verschijnt dit onder een rebranded naam.
Bestandskenmerken bijwerken
Een versgeïnstalleerde kloon geeft verbazend veel waarschuwingen, bij inloggen in de backend. De meeste hiervan hebben betrekking op bestands- en maprechten.
Bijwerken gaat via een eigen script:
wp_sr /var/www/example.ch open
Remove existing orders
Code werkt perfect doch traag, met ca. 5 orders/seconde. Met 4.588 orders duurt dat ca. een kwartier.
wp post delete $(wp post list --field=ID --post_type="shop_order") --force
Remove existing users
Werkt perfect:
wp user delete $(wp user list --role="customer" --field=ID) --yes
- Leuke extra: Dit commando gaf ik in additionele terminal, terwijl het commando om orders te verwijderen, in een andere terminal draaide. Dat kan dus probleemloos naast elkaar
- Dit commando lijkt niet goed te werken, als
wp_sr
nog niet is uitgevoerd.
Site-taal aanpassen (5min)
- Dat gaat niet via de interface, maar wel via de CLI
- ch_FR lijkt niet te bestaan. Daarom fr_FR gebruikt
- Zie WordPress & Taal voor details:
wp language core install fr_FR wp language core activate fr_FR wp language core update
Niet-vertaalde posts verwijderen (5min)
Er waren een handjevol SEO-pagina's waarvoor er geen vertaling is → Deze pagina's handmatig verwijderd
Maak backup (0,25h)
Vertalen heeft nog enigszins een experimenteel karakter en daarom is dit een goed moment voor een backup van zowel database als bestanden: De bestanden veranderen namelijk ook: Afbeeldingen krijgen andere namen en er worden mogelijk vertaalbestanden gedownload. Backups zijn ondergebracht onder ~/backup
. Backup maken:
- Maak een db-backup op de gebruikelijke manier
- Ga naar
~/backup
en maak een nieuwe map aan. Bv.:example.ch-2021.03.22-12.03
- Maak van die map de CWD
- Kopiëer alles met zoiets als
rsync -va /var/www/example.ch/* .
. De switch-a
is belangrijk, omdat ik anders incomplete backups krijg. Het backup-proces duurt ongeveer 6 minuten. Het grootste deel van de tijd gaat op aan het kopiëren van de ca. 250.000 afbeeldingen.
Restore backup
Ik wil (eenmalig) zeker weten dat de backup functioneert. Dus heb ik de brondata verwijdert en de backup teruggezet - Er is geen andere eerlijke manier om dit te doen. Terugzetten van de backup, ging met zoiets als:
cd /var/www/example.ch rsync -va ~/backup/ch-20210330-1403/ .
Ik heb opnieuw de -a-switch gebruikt, om bestandskenmerken zo veel mogelijk te behouden.
Vertaling afbeelding-bestandsnamen (0,25h)
- Vertaling middels een mmv-script
- Werkte prima, met één uitzondering: Oorspronkelijk was de bedoeling om te beginnen met een .fr-site ipv. een .ch-site. Die wijziging was echter nog niet doorgevoerd in dit script. De schade was gelukkig beperkt en te fixen middels zoiets als
mmv "*example.fr*" "#1example.ch#2"
Trefwoorden
- Kloon en vertaal
- Kloon & vertaal