Klonen & vertalen (WordPress): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
Regel 176: Regel 176:
  
 
Account uitbreiden met nieuwe site.
 
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 <code>wp image recreate</code> 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 genaamd <code>fsdfdsfsdfs</code>, kan verwarren met een database genaamd <code>fgdgdgdddd</code>. 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 <code>rsync -hrz master_of_disaster@123.456.789.012:applications/example_com/public_html/* . --info=progress2</code>. 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 waarschuwing <code>skipping non-regular file "wp-content/db.php"</code>.
 
 
=== Site doellocatie aan de praat krijgen ===
 
 
* <code>wp-config.php</code> 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
 
* <code> wp search-replace</code> - Alleen met https. Vergde trouwens bijna twee minuten executietijd.
 
 
Nu staat er een werkende webwinkel.
 
{|
 
|[[file:20210322-1157.png|thumb|<code>wp search-replace</code> duurde bijna twee minuten. Maar daar krijg je wel 93.954 vervangingen voor terug!]]
 
|}
 
 
=== Plugins uitschakelen ===
 
 
Sommige dingen zijn binnen de huidige omgeving niet handig. Daarom:
 
 
<pre>
 
wp plugin deactivate wp-rocket redis-cache wp-dbmanager iwp-client
 
</pre>
 
 
* Je kunt in één <code>wp plugin deactivate</code>-commando meerdere plugins uitschakelen. Je moet ze scheiden met spaties, niet met komma's
 
* <code>iwp-client</code> 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.
 
 
{|
 
|[[file:20210326-2035.png|thumb|Foutmeldingen bij een versgeïnstalleerde kloon. Bij nader inzien gaat het maar om drie plugins: ''WooCommerce PDF Invoices & Packing Slips'', ''WP Rocket'' en iets rondom backups]]
 
|}
 
 
Bijwerken gaat via een eigen script:
 
 
<pre>
 
wp_sr /var/www/example.ch open
 
</pre>
 
 
=== Remove existing orders ===
 
 
Code werkt perfect doch traag, met ca. 5 orders/seconde. Met 4.588 orders duurt dat ca. een kwartier.
 
 
<pre>
 
wp post delete $(wp post list --field=ID --post_type="shop_order") --force
 
</pre>
 
 
=== Remove existing users ===
 
 
Werkt perfect:
 
 
<pre>
 
wp user delete $(wp user list --role="customer" --field=ID) --yes
 
</pre>
 
 
* 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 <code>wp_sr</code> 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:
 
 
<pre>
 
wp language core install fr_FR
 
wp language core activate fr_FR
 
wp language core update
 
</pre>
 
 
=== 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 <code>~/backup</code>. Backup maken:
 
 
* Maak een db-backup op de gebruikelijke manier
 
* Ga naar <code>~/backup</code> en maak een nieuwe map aan. Bv.: <code>example.ch-2021.03.22-12.03</code>
 
* Maak van die map de CWD
 
* Kopiëer alles met zoiets als <code>rsync -va /var/www/example.ch/* .</code>. De switch <code>-a</code> 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 ongeveer zo:
 
 
<pre>
 
cd /var/www/example.ch
 
rsync -va ~/backup/ch-20210330-1403/ .
 
wp_sr /var/www/example.ch open
 
</pre>
 
 
* Ik heb opnieuw de </code>-a</code>-switch gebruikt, om bestandskenmerken zo veel mogelijk te behouden
 
* <code>wp_sr</code> is een eigen routine om rechten van WordPress-sites in te richten. Anders werkt het niet.
 
 
=== 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 <code>mmv "*example.fr*" "#1example.ch#2"</code>
 
 
=== Vertaalscripts (1h) ===
 
 
Op dit moment zijn er zo'n 15 vertaalscripts. Duurt ca. een uur bij elkaar om ze kort te inspecteren, uit te voeren, en af en toe te checken of ik resultaten zie. Van veel scripts weet ik niet meer goed wat ze doen. Dat is latere zorg.
 
 
=== Maak backup (2) ===
 
 
Goed moment voor een tweede backup. Zie eerdere backup voor details.
 
 
=== Regenerate thumbnails ===
 
 
De preciese plek in de procedure weet ik nog niet, maar er is beslist een moment voor het CLI-commando
 
 
<pre>
 
wp media regenerate
 
</pre>
 
 
=== Mollie-account uitbreiden ===
 
 
* Log in in het bestaande Mollie-account
 
* ''Websiteprofielen'' » ''Maak een nieuw websiteprofiel aan''
 
* Etc.
 
 
=== Valuta & BTW aanpassen (5min) ===
 
 
* Hoe heb ik dit bijna kunnen vergeten? Zwitserland heeft z'n eigen valuata ipv. euro
 
* BTW-instellingen hoefden niet aangepast te worden.
 
 
Zie [[WooCommerce & BTW]] & [[Webwinkels & BTW]] voor details.
 
  
 
== Trefwoorden ==
 
== Trefwoorden ==

Versie van 15 apr 2021 13:37

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
Oude inhoud van wp_yoast_indexable. Als je goed kijkt, kun je zien dat er verschillende URL's zijn. Alsof de complete geschiedenis van de site is geïncorporeerd. Zou de index niet vaker bijgewerkt moeten worden?
Oude inhoud van wp_yoast_indexable: Allemaal dezelfde actuele URL (dit is binnen een ontwikkelomgeving en s1 staat voor ontwikkelversie van een site
Uitvoer van commando wp yoast index --reindex. Het duurde ca. drie kwartier

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.

Trefwoorden

  • Kloon en vertaal
  • Kloon & vertaal

Zie ook