WordCamp Poland 2023 i Gliwice, offisielt WordCamp Gliwice 2023, ble arrangert 12. til 14. mai 2023 i Centrum Edukacyjno-Kongresowe ved Det schlesiske teknologiske universitetet (Politechnika Śląska), ul. Konarskiego 18B (arrangementets nettside, lokasjon). Fredagen var bidragsdag, mens lørdag og søndag var satt av til foredrag, workshops og en mastermind for næringslivet.
Denne rapporten holder seg til det offisielle programmet. Alle navn og temaer nedenfor er hentet fra agendaen og sesjonsbeskrivelsene som arrangørene publiserte. Der vi skriver om innholdet i et foredrag, bygger vi på sesjonsbeskrivelsen eller opptaket, ikke på minner fra korridorene. Kodeeksemplene er våre egne eksempler knyttet til temaene fra scenen, og de er merket slik.
Trenger bedriften din erfaren teknisk støtte, eller planlegger du en krevende migrering, kan du se hva vi gjør som WordPress-utvikler i WPPoland.
Program for WordCamp Gliwice 2023 dag for dag
Arrangørene delte programmet inn i sju spor. Lørdag og søndag gikk parallelt i flere saler, så ingen kunne få med seg alt direkte.
| Spor | Innhold | Dag |
|---|---|---|
| Contributor Day | arbeid ved bordene på WordPress-prosjektet | fredag 12. mai |
| Business | foredrag om å drive bedrift, salg og team | lørdag |
| Future&Business | AI, plattformens fremtid, sky, Playground | lørdag og søndag |
| Technology | Gutenberg, headless, ytelse, migreringer | søndag |
| Workshops, sal F | avhengighetsinjeksjon, TDD med React, Core Web Vitals | lørdag |
| Workshops, sal J | WP-CLI, Astro, sikkerhet, fra Figma til FSE, valg av server | lørdag og søndag |
| Mastermind | to sesjoner ledet av Kasia Aleszczyk og Damian Ślimak | søndag |
Lørdagen ble åpnet av Tomasz Karwatka, og etter ham snakket Krzysztof Dyszczyk om å leve i AI-alderen. Begge dagene ble avsluttet med en Q&A-sesjon. Den fullstendige listen over sesjoner finnes på siden Sessions.
Hva skjer på WordCamp Contributor Day
Konferansen startet fredag 12. mai med Contributor Day. I stedet for å lytte til foredrag samles deltakerne denne dagen i arbeidsgrupper som videreutvikler WordPress-økosystemet.
Ifølge siden for Contributor Day så dagen slik ut:
- 9:30-10:00: registrering, kaffe og te.
- 10:00-10:30: velkomst, inndeling i team og oppstart ved bordene, med en kort introduksjonsworkshop for dem som kom for første gang.
- 10:30-12:30: arbeid (contributing), deretter lunsjpause og en ny arbeidsøkt.
- Til slutt en oppsummering av dagen og en gjennomgang av resultatene.
Arrangørene understreket at dagen var for alle, ikke bare for utviklere: for designere, markedsførere, oversettere og fotografer, uansett erfaringsnivå. Beskrivelsen nevnte feilretting, utfylling av manglende oversettelser, innholdsproduksjon og opplasting av bilder til den åpne mediebasen. Deltakelse krevde konferansebillett og egen påmelding.
For et byrå gir denne dagen praktisk mening. Den som selv melder en feil eller retter en oversettelse, forstår bedre hvordan endringer havner i kjernen og hvor lang veien er fra rapport til utgivelse. Veiledninger om Full Site Editing og blokkredigeringen blir til på nettopp denne måten.
Forretningsforedrag på WordCamp Gliwice 2023
Lørdagens Business-spor handlet om å drive en bedrift rundt WordPress. Sesjonsbeskrivelsene er konkrete, så vi oppsummerer dem tett på kilden.
Fra tjenestebedrift til produktbedrift (Tomasz Karwatka)
Tomasz Karwatka var blant annet med på å grunnlegge Divante, Vue Storefront, Callstack og Open Loyalty, og leder i dag Catch The Tornado, et selskap som investerer i teknologigründere (foredragsholderens biografi). I beskrivelsen av foredraget forklarte han at Divante og Callstack lyktes med å bygge produkter, blant dem Vue Storefront, som gikk gjennom akseleratoren Y Combinator.
Varslede temaer: hvorfor så få tjenestebedrifter lykkes med å bygge produkter, hvilke feil de oftest gjør, hva det egentlig koster, hvordan et prosjekt blir et fullverdig selskap, hvordan man henter ekstern finansiering og hvordan eieren av en tjenestebedrift kan maksimere verdien for seg selv. Opptaket ligger på WordPress.tv.
To år med OKR i et WordPress-team (Michał Kaźmierczak)
Michał Kaźmierczak snakket om OKR-metoden (Objectives and Key Results). Foredraget hans oppsummerte mer enn to år med OKR i et WordPress-utviklerteam: hva som fungerte, hva som ikke gjorde det, og hvem metoden i det hele tatt er nyttig for. Sesjonsbeskrivelsen oppgir ingen konkrete måltall, så vi legger ikke til noen her. Detaljene finnes i opptaket.
WooCommerce som hjertet i virksomheten (Łukasz Wilczak)
Łukasz Wilczak presenterte en case study av en WooCommerce-butikk med årlig omsetning i millioner av złoty. Butikken selger unike produkter og produkter laget på bestilling, og WooCommerce binder sammen betalinger, frakt, fakturaer og CRM. Foredraget viste produktkonfiguratoren, handlekurven, ordrebehandlingen og hvordan butikken endret arbeidet i teamet og kontakten med kundene (opptak).
Andre forretningsforedrag
I det samme sporet talte: Ola Gościniak (en trapp av digitale produkter), Aleksander Misky (abonnementsmodell i WordPress), Izabela Karkocha (å avslutte prosjekter slik at kunden anbefaler deg videre), Adrian Kałamajski (salg av kurs og e-bøker), Tomasz Kołkiewicz (byttehandel som vei til etterspørsel når kundene kutter kostnader), Dariusz Pichalski (veien til den største polske kanalen om WordPress), Krzysiek Dróżdż, Dominik Kawula (en bedrift kundene kommer tilbake til) og Marta Domasz (å investere i de ansattes utvikling). På søndag presenterte Przemysław Hernik fem prinsipper for estimering av oppgaver, nyttige både for utviklere og ledere.
Headless WordPress med Astro på WordCamp Gliwice
Maciek Palmowski hadde to innlegg om det samme temaet i programmet, sett fra to sider.
På lørdag ledet han en workshop om å integrere WordPress med Astro (sal J). Ifølge beskrivelsen lærte deltakerne grunnleggende Astro: filstruktur, komponenter, layouter og routing, og til slutt koblet de WordPress til Astro i begge modusene, SSG og SSR. Skillet er viktig: i SSG-modus lages sidene under bygging, i SSR-modus ved forespørsel, så valget avhenger av hvor ofte innholdet endres.
På søndag, i Technology-sporet, spurte Palmowski om headless WordPress virkelig gir mening. I beskrivelsen påpekte han at mange artikler og mange selskaper gir inntrykk av at headless er den eneste riktige veien, og spurte rett ut om det ikke bare er enda en måte å tjene penger på (opptak). Samme dag viste Adam Kanigowski en case study av Astro og WordPress som headless CMS: i hvilke prosjekter det fungerer, hvordan du kobler inn favorittrammeverket ditt i JS (for eksempel Vue.js) og hvilke feil som dukker opp under kodingen (opptak).
Nedenfor er vår skisse av en slik arkitektur, ikke et lysbilde fra konferansen:
DECOUPLED HEADLESS WORDPRESS ARCHITECTURE:
+-------------------------------+ REST API / GraphQL +-------------------------------+
| WordPress Backend | ---------------------------> | Astro |
| (wp-admin, editorial workflow,| JSON Data Payloads | (SSG at build time or SSR |
| custom post types, ACF) | | on request, component islands)|
+-------------------------------+ +-------------------------------+
| |
v v
+-------------------------------+ +-------------------------------+
| MySQL / MariaDB Database | | CDN or edge hosting |
| (not exposed to visitors) | | (serves the generated HTML) |
+-------------------------------+ +-------------------------------+Hvorfor en frontend i Astro sender mindre JavaScript enn en typisk SPA
I en klassisk WordPress-installasjon tvinger hver HTTP-forespørsel PHP til å laste utvidelsene, kjøre spørringer mot wp_posts og wp_postmeta, gå gjennom malhierarkiet og sette sammen den endelige HTML-en. Sidecache demper denne kostnaden, men fjerner den ikke.
Astro i SSG-modus genererer HTML under byggingen. Komponentene rendres som standard uten JavaScript på klientsiden, og interaktivitet slås bare på der du angir det med et direktiv, for eksempel client:idle eller client:visible (dokumentasjonen for Astro-direktiver). WordPress-panelet kan da kjøre på et eget underdomene, mens de besøkende får ferdig HTML uten kontakt med PHP og databasen. Om det lønner seg, avhenger av prosjektet, og det var nettopp dette Palmowski spurte om på søndag.
Eksempel på getStaticPaths i Astro med WP REST API
---
// src/pages/blog/[slug].astro
export async function getStaticPaths() {
const response = await fetch("https://cms.example.com/wp-json/wp/v2/posts?_embed&per_page=100");
const posts = await response.json();
return posts.map((post) => ({
params: { slug: post.slug },
props: { post },
}));
}
const { post } = Astro.props;
const featuredImage = post._embedded?.['wp:featuredmedia']?.[0]?.source_url;
---
<article class="prose max-w-3xl mx-auto py-12">
<h1>{post.title.rendered}</h1>
{featuredImage && <img src={featuredImage} alt={post.title.rendered} loading="eager" />}
<div set:html={post.content.rendered} />
</article>WP-CLI: avanserte teknikker og trygg search-replace
Marcin Krzemiński ledet på lørdag en workshop i avanserte WP-CLI-teknikker for dem som allerede kan det grunnleggende. Ifølge beskrivelsen installerte og brukte deltakerne WP-CLI-utvidelser, genererte kode for en utvidelse og et tema, og jobbet med WP-CLI på en ekstern server over SSH. Workshopene ble ikke filmet.
Team som vedlikeholder mange miljøer, flytter før eller siden en database mellom domener. Denne delen er vårt tillegg, basert på dokumentasjonen for wp search-replace.
Slik erstatter du serialiserte data trygt
Den typiske katastrofen med manuelle SQL-skript for search-and-replace er ødelagte serialiserte PHP-matriser i tabellene wp_options og wp_postmeta. Når lengden på teksten endres, men den lagrede lengden ikke gjør det (for eksempel s:21:"https://staging.local" byttet til s:19:"https://example.com"), klarer ikke PHP å gjenskape objektet. Resultatet er ødelagte widgeter og tapte temainnstillinger.
WP-CLI-dokumentasjonen sier at kommandoen håndterer serialiserte PHP-data på en intelligent måte og ikke endrer verdiene i primærnøkler. Som standard bruker den raske SQL-spørringer og går over til PHP i kolonner med serialiserte data, mens flagget --precise tvinger PHP for alle kolonner, noe som er tregere, men tryggere for komplekse strukturer:
# Step 1: dry run to preview affected tables and matching rows
wp search-replace "https://staging.example.com" "https://example.com" \
--all-tables \
--dry-run \
--precise
# Step 2: export a backup, then run the replacement
wp db export pre-migration-backup.sql
wp search-replace "https://staging.example.com" "https://example.com" \
--all-tables \
--precise \
--recurse-objectsAutomatisering av oppdateringer av utvidelser og kjerne i skript
# Verify file checksums against official WordPress.org releases
wp core verify-checksums
wp plugin verify-checksums --all
# Update every plugin that has an update available
wp plugin update --all
# Flush object cache and regenerate rewrite rules
wp cache flush
wp rewrite flush --hardAvhengighetsinjeksjon i WordPress-utvidelser
Bartek Jaskulski ledet på lørdag en workshop om en container for avhengighetsinjeksjon i WordPress-utvidelser (sal F). Ifølge beskrivelsen bygde deltakerne om en eksempelutvidelse direkte, og sesjonen konsentrerte seg om oppsett av PHP-DI, en av de mest brukte DI-containerne i PHP. Temaene var prinsippet om avhengighetsinversjon som utgangspunkt, hvordan man unngår mønsteret Service Locator, grensesnittenes rolle i objektorientert programmering og hvordan man lager tilstandsløse tjenester.
Problemet dette løser, kjenner alle som vedlikeholder eldre utvidelser: hundrevis av funksjoner i én fil, globale variabler (global $wpdb) og databasekall vevd inn i logikken. Eksemplet nedenfor er vårt eget. Det viser en klasse som får avhengighetene sine gjennom konstruktøren i stedet for å opprette dem selv:
<?php
declare(strict_types=1);
namespace WPPoland\Plugin;
interface CacheInterface {
public function get(string $key): mixed;
public function set(string $key, mixed $value, int $ttl = 3600): bool;
}
final class ObjectCacheService implements CacheInterface {
public function get(string $key): mixed {
return wp_cache_get($key, 'wppoland_group');
}
public function set(string $key, mixed $value, int $ttl = 3600): bool {
return wp_cache_set($key, $value, 'wppoland_group', $ttl);
}
}
final class CustomerReportManager {
public function __construct(
private readonly CacheInterface $cache,
private readonly \wpdb $db
) {}
public function generateReport(int $customerId): array {
$cacheKey = "customer_report_{$customerId}";
$cached = $this->cache->get($cacheKey);
if ($cached !== false) {
return $cached;
}
$query = $this->db->prepare(
"SELECT * FROM {$this->db->prefix}customer_orders WHERE customer_id = %d",
$customerId
);
$data = $this->db->get_results($query, ARRAY_A);
$this->cache->set($cacheKey, $data, 1800);
return $data;
}
}Et slikt oppsett gjør det mulig å bytte inn en attrapp av CacheInterface i tester med PHPUnit eller Pest uten en fungerende WordPress-database. En container som PHP-DI setter sammen disse objektene automatisk, så manuell new forsvinner fra oppstartskoden til utvidelsen.
Tester, lokale miljøer og e-post: sesjoner for utviklere
Flere søndagssesjoner i Technology-sporet og lørdagsworkshops handlet om utviklerens daglige arbeid.
- Sebastian Kurzynowski stilte opp to ganger. På lørdag ledet han en workshop i TDD med React: først testene, så koden som oppfyller dem, og til slutt refaktorering basert på de samme testene, med vekt på å skille forretningslogikken fra det visuelle laget. På søndag snakket han om hvordan TDD og andre kvalitetsorienterte tilnærminger sparer penger, og hvordan man innfører TDD i et team som hovedsakelig består av folk som er nye i IT (opptak).
- Piotr Niewiadomski viste et lett lokalt miljø for WordPress bygget med Docker, Composer, den innebygde webserveren i PHP og en SQLite-database.
- Bartosz Nowak presenterte Juniper, en åpen boilerplate som er videreutviklet etter workshopene på WordCamp i 2022. Den nye utgaven la til
.sh-skript for å sette opp prosjektet, en objektorientert tilnærming i temaet og håndtering av utvidelser gjennomcomposer.json(repositoriet på GitHub). - Kamil Porembiński svarte på hvorfor e-post fra WordPress havner i søppelpost, og om en utvidelse for utsending alene løser problemet (opptak).
- Lørdagens sikkerhetsworkshop i sal J var rettet mot markedsførere, bloggere og gründere: retningslinjer for passord og tilganger i WordPress, sjekk av datalekkasjer og hva man gjør etter en lekkasje.
WordPress-ytelse på WordCamp Gliwice 2023: TTFB, Core Web Vitals og bilder
Flere foredragsholdere snakket om ytelse, hver fra sin vinkel.
- Aneta Rutkowska spurte om TTFB bare påvirkes av hostingen. I beskrivelsen varslet hun en case study av et nettsted der TTFB ble redusert fra over 3 s til 110 ms, en gjennomgang av 65 000 WordPress-installasjoner hos LH.pl og de ti mest installerte utvidelsene, samt en sammenligning av hvordan hosting og utvidelser påvirker TTFB (opptak).
- Krystian Wójcik ledet en workshop om anbefalingene for Core Web Vitals: hvordan man forbedrer hver parameter, hva man bør passe seg for og når det ikke lønner seg å jage en score på 100/100. Hvordan vi selv går frem, beskriver vi i veiledningen om Core Web Vitals.
- Mateusz Gbiorczyk sammenlignet formatene WebP og AVIF ut fra erfaringene med en utvidelse for bildekonvertering som brukes av flere hundre tusen nettsteder (opptak).
- Jakub Józwiak viste en implementering av Algolia i WordPress, altså å flytte søket i en stor database ut av WordPress-databasen.
- Piotr Pantkowski ledet en workshop om valg av server for WordPress: de vanligste feilene ved kjøp av hosting og hvordan man sjekker de viktigste funksjonene i praksis.
- Maciej Kuchnik fortalte om vanskelige datamigreringer mellom WordPress-installasjoner og om hvordan man planlegger dem.
Slik avlaster du WP-Cron på serveren
Ett tema dukker opp i hver samtale om TTFB, så vi legger det til basert på håndboken for WordPress-utvidelser. WP-Cron sjekker listen over planlagte oppgaver ved hver sidevisning og kjører dem som har passert tidspunktet sitt. Den går ikke i bakgrunnen som systemets cron, så en oppgave planlagt til 14:00 kjøres først ved den første sidevisningen etter dette klokkeslettet.
Håndboken beskriver hvordan WP-Cron flyttes til systemets oppgaveplanlegger: først en oppgave i systemet (på Linux med crontab -e), deretter slås kjøringen ved sidevisninger av med linjen define( 'DISABLE_WP_CRON', true ); i wp-config.php. Ifølge dokumentasjonen trengs det da ikke lenger å kjøre WP-Cron ved hver sidevisning, og det gir bare serveren ekstra arbeid.
Gutenberg og Full Site Editing i programmet
Magdalena Paciorek viste ferdige Gutenberg-komponenter som utviklere kan bruke til å utvide redigeringsverktøyet: lage nye blokker og sidepaneler, med eksempler fra virkelige prosjekter (opptak).
Łukasz Wroński ledet på søndag en workshop for dem som bygger nettsteder i sidebyggere og vil komme i gang med Full Site Editing. Planen omfattet et undertema med filstruktur (theme.json, functions.php, CSS- og JS-filer), flytting av en enkel landingsside fra Figma til WordPress, en egen skrifttype og nye stiler for knapper og lister.
WordPress sin fremtid, AI og WordPress Playground
Future&Business-sporet stilte spørsmål om retningen for hele plattformen.
- Krzysztof Dyszczyk snakket i lørdagens åpningsinnlegg om trender innen kunstig intelligens og utfordringene som følger når den blir allemannseie.
- Et panel om AI med Krzysztof Radzikowski, Marta Domasz og Maciej Kuchnik, ledet av Kasia Aleszczyk, handlet om hvorvidt man skal bruke AI eller frykte for jobben.
- Albert Nogala delte spørsmålet om WordPress sin tilstand opp i forretningsmessige, sosiale og teknologiske faktorer.
- Michał Strześniewski sammenlignet no-code- og low-code-verktøy med den klassiske måten å bygge nettsteder i WordPress på.
- Oskar Sajdak snakket om WordPress i skyene AWS og Azure og om problemene som venter utvikleren der.
- Mariusz Jałyński og Dominik Charasim tok for seg hvordan AI påvirker SEO, og arbeid med ChatGPT.
Det mest teknisk konkrete innlegget var Adam Zielińskis foredrag om WordPress Playground, altså WordPress som kjører i nettleseren uten serveroppsett. I beskrivelsen nevnte han tre bruksområder: demo av en utvidelse på en nettside, testing av kode på ulike versjoner av WordPress og PHP, og interaktive kurs (opptak). Ifølge dokumentasjonen for Playground kjører prosjektet helt på klientsiden i WebAssembly, uten backend, og miljøet styres gjennom Query API, Blueprints API (en JSON-fil) eller JavaScript API.
Hvor du kan se opptak fra WordCamp Gliwice 2023
Opptakene av foredragene ligger på arrangementets side på WordPress.tv. Listen teller 31 videoer, nesten alle publisert 30. mai 2023. Workshopene (WP-CLI, Astro, avhengighetsinjeksjon, TDD med React, Core Web Vitals, sikkerhet, fra Figma til FSE, valg av server) og mastermind-sesjonene ble ikke filmet, så om dem vet vi bare det sesjonsbeskrivelsene forteller.
Oppsummering
WordCamp Gliwice 2023 samlet på tre dager Contributor Day, to dager med foredrag i flere spor, åtte workshops og en mastermind. Teknisk sterkest var workshopene om Astro, WP-CLI og avhengighetsinjeksjon, samt foredragene om TTFB og Playground. Det var bra at headless fikk to perspektiver, et praktisk i workshopen og et skeptisk på scenen.
Planlegger bedriften din en migrering til headless WordPress, trenger den bedre Core Web Vitals, eller leter den etter et erfarent utviklerteam, kan du se på våre tjenester som WordPress-utvikler.







