Klonen & vertalen (WordPress): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
Regel 281: Regel 281:
  
 
* Dat gaat niet via de interface, maar wel via de CLI
 
* Dat gaat niet via de interface, maar wel via de CLI
* ''ch_FR'' lijkt niet te bestaan → ''fr_FR'':
+
* ''ch_FR'' lijkt niet te bestaan → ''fr_FR''
 +
* Zie [[WordPress & Taal]] voor details:
  
 
<pre>
 
<pre>

Versie van 26 mrt 2021 22:59

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.

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 genaamd fsdfdsfsdfs, kan verwarren met een database genaamd fgdgdgdddd. 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 waarschuwing skipping 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
  • Domeinnamen aanpassen middels wp search-replace - Alleen met https. Vergde trouwens bijna twee minuten executietijd.

Nu staat er een werkende webwinkel.

wp search-replace duurde bijna twee minuten. Maar daar krijg je wel 93.954 vervangingen voor terug!

Site backuppen (0,25h)

Belangrijk! Vertalen heeft nog enigszins een experimenteel karakter. 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 -vr /var/www/example.ch/* . Backup duurt ongeveer 6 minuten. Het grootste deel van de tijd gaat op aan het kopiëren van de ca. 250.000 afbeeldingen.

In de praktijk best wat handelingen. Interessant alternatief: TransIP maakt elke 4 uur een backup van de server. Dat heeft me meermaals gered.

Plugins uitschakelen

Sommige dingen zijn nu - binnen een ontwikkelomgeving - niet handig. Daarom:

wp plugin deactivate wp-rocket
wp plugin deactivate redis-cache
wp plugin deactivate wp-dbmanager

Bestandskenmerken bijwerken

Een versgeïnstalleerde kloon geeft verbazend veel waarschuwingen, bij inloggen in de backend. De meeste hiervan hebben betrekking op bestands- en maprechten.

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:

wp_sr /var/www/example.ch open

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"

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.

Site-taal aanpassen

  • Dat gaat niet via de interface, maar wel via de CLI
  • ch_FR lijkt niet te bestaan → fr_FR
  • Zie WordPress & Taal voor details:
wp language core install fr_FR
wp language core activate fr_FR
wp language core update

Trefwoorden

  • Kloon en vertaal
  • Kloon & vertaal

Zie ook