Plugin pro rychle nasazeni pixelu, FAPI konverzi a volitelneho server-side PageView do WordPressu. Tento dokument je urceny pro vyvojare a popisuje architekturu, strukturu kodu a postupy vyvoje.
- Vstupni bod pluginu je
fapi-signals.php. - Inicializace bezi ve
src/Plugin.php. - Pixely a konverzni skripty se vkladaji v
wp_head,fapi.jsvewp_footer. - Server-side PageView bezi pres REST API
wp-json/fapi-signals/v1/pageview. - Nastaveni se ukladaji do
wp_optionspod klicemfapi_signals_settings(s migraci z puvodniho klice).
fapi-signals.phphlavni soubor pluginu, registruje autoload a spoustiPluginsrc/Plugin.phpregistrace hooku, assetu a REST routsrc/Admin/SettingsPage.phpUI nastavenisrc/Tracking/PixelInjector.phpgenerovani a injektovani pixelu, JS logika pro injekcisrc/Tracking/ConversionInjector.phpgenerovani a injektovani konverzniho skriptusrc/Tracking/SnippetBuilder.phpstavba pixel snippetu a konverznich volanisrc/Tracking/FapiSdkInjector.phpvkladafapi.jsdo patickysrc/Tracking/RewardsInjector.phpvklada FAPI Rewards scriptsrc/ServerSide/PageViewDispatcher.phpREST endpoint pro server-side PageViewsrc/ServerSide/PayloadBuilder.phpmapovani platform -> payloadsrc/Settings.phpdefaults + nacitani/ukladani nastavenisrc/Admin/ResetController.phptestovaci reset nastaveni pres REST
PixelInjectorvytvori seznam pixel snippetu presSnippetBuilder.ConversionInjectorvygeneruje konverzni snippet (FAPI SDK callback).FapiSdkInjectorvzdy vkladahttps://web.fapi.cz/js/sdk/fapi.jsdo paticky.RewardsInjectorvklada FAPI Rewards script do hlavicky.- JS config je dostupny pres
window.FapiSignalsConfiga inicializuje injekce. - Pro PageView se generuje
event_id, ktere sdili Meta Pixel (client) a Meta CAPI (server). - Server-side PageView se odesila s
event_idi pro TikTok/Pinterest/LinkedIn. - Pokud je uzivatel prihlaseny, do Meta CAPI PageView se doplnuje
user_data(hashovane identifikatory + IP/UA) pro lepsi match.
- Klic v
wp_options:fapi_signals_settings - UI pro nastaveni pouziva
Settings::OPTION_KEY
Consent logika je v PixelInjector (JS), ale momentalne je ignorovana a skripty se vkladaji okamzite.
Kod je zachovany a jde snadno vratit zpet upravou PixelInjector a ConversionInjector.
JS klient vola:
/wp-json/fapi-signals/v1/pageview
Backend generuje payloady v PayloadBuilder a odesila je pres wp_remote_post.
src/Settings.php- pridej default values (toggle + ID/keys)
src/Admin/SettingsPage.php- pridej UI sekci nebo polozky do existujici sekce
src/Tracking/SnippetBuilder.php- pridej pixel snippet do
buildPixelSnippets - pridej konverzni call do
buildConversionSnippet
- pridej pixel snippet do
src/ServerSide/PayloadBuilder.php(pokud ma server-side podporu)- pridej novou platformu a payload
src/Tracking/PixelInjector.php- pokud je potreba server-side prepinač, rozsirit
server_sideconfig
- pokud je potreba server-side prepinač, rozsirit
- Testy
- uprav E2E v
e2e/*.spec.js - uprav unit testy v
tests/(pokud pokryvaji danou cast)
- uprav E2E v
docker compose up -d- WordPress bezi na
http://localhost:8071 - Plugin je namountovany do
wp-content/plugins/fapi-signals
npm installWP_BASE_URL=http://localhost:8071 WP_ADMIN_USER=<user> WP_ADMIN_PASS=<pass> npm run test:e2e
Poznamka: testy pouzivaji REST reset endpoint wp-json/fapi-signals/v1/reset.
Lokálně vs. GitHub Actions CI
- Lokálně: Musí běžet Docker (
make dc-up). WordPress už máš nainstalovaný a plugin aktivovaný. Všechny 3 E2E testy (včetně CookieYes) běží, pokud máš nainstalovaný plugin CookieYes (cookie-law-info). - CI: Workflow sám spustí
docker compose up -d, počká na odpověď, nainstaluje WP přes wp-cli a aktivuje plugin. Test „cookieyes CMP“ se v CI přeskočí (CI=true), protože plugin CookieYes v kontejneru není. Ostatní dva E2E testy ověřují injekci pixelů a konverzí.
Pokud mas nainstalovane dependencies:
php vendor/bin/phpunit
Nebo pres Docker service:
docker compose --profile tools run --rm phpunit
- Schvaleny plugin na WordPress.org a prideleny slug
- SVN pristup k repozitari
https://plugins.svn.wordpress.org/<slug>/ - Nastaveny
Stable tagvreadme.txt
V repu uz je pripraveny wporg/ adresar:
wporg/trunkobsahuje produkcni obsah pluginuwporg/assetsje urceny pro bannery/icony/screenshoty
Pokud je potreba, znovu si wporg/trunk pripravis synchronizaci z rootu repa:
mkdir -p wporg/trunk wporg/assets wporg/tags
rsync -av --delete \
--exclude "wporg/" \
--exclude ".git/" \
--exclude ".cursor/" \
--exclude "node_modules/" \
--exclude "tests/" \
--exclude "e2e/" \
--exclude "test-results/" \
--exclude "docker-compose.yml" \
--exclude "Dockerfile" \
--exclude "README.md" \
--exclude "SPECIFICATION.md" \
--exclude "package.json" \
--exclude "package-lock.json" \
--exclude "playwright.config.js" \
--exclude "phpunit.xml" \
--exclude ".phpunit.result.cache" \
--exclude ".env" \
--exclude ".gitignore" \
--exclude ".cursorignore" \
./ wporg/trunk/
svn checkout https://plugins.svn.wordpress.org/<slug>/ wporg-svn
rsync -av --delete wporg/trunk/ wporg-svn/trunk/
Pokud mas bannery/icony, nakopiruj je do wporg-svn/assets/.
cd wporg-svn
svn status
svn add --force .
svn delete <smazane-soubory>
svn commit -m "Release <verze>"
svn copy trunk tags/<verze>
svn commit -m "Tag <verze>"
- Zkontroluj, ze
readme.txtma spravnyStable tag - Po publikaci se zmeny projevi do par minut
Pro automaticky deploy z GitHubu je bezne pouzivany action:
10up/action-wordpress-plugin-deploy
Postup:
- vytvoris
.github/workflows/deploy.yml - do secrets pridas
SVN_USERNAMEaSVN_PASSWORD - deploy se spousti pri tagu nebo release
- Detailni specifikace je v
SPECIFICATION.md.