OW Consent — Dokumentacion
Menaxhimi i plotë i pëlqimit në WordPress: banner shumëjuridiksional, bllokim i gjurmuesve, skaner, dokumente ligjore, regjistër provash dhe portal të drejtash. Autor: OptionWeb — Julien Daniel Faqja e shtojcës: https://optionweb.dev/sq/addons/ow-consent/ Licenca: GPL-2.0-or-later Versioni i mbuluar nga ky dokument: 1.4.3
Tabela e përmbajtjes
- Vështrim i përgjithshëm
- Instalimi
- Nisja e shpejtë
- Njëmbëdhjetë profilet e përputhshmërisë
- Kategoritë e cookie-ve
- Banneri
- Bllokimi automatik
- Skaneri i gjurmuesve
- Gjeneruesi i dokumenteve ligjore
- Regjistri i pëlqimeve
- Portali i të drejtave (DSAR)
- Opt-out-i CCPA «Do Not Sell or Share»
- Google Consent Mode v2
- IAB TCF v2.2
- Global Privacy Control
- Zbulimi rajonal
- Integrimi me OW Forms
- Butoni pluskues
- Shortcode-et
- API REST
- Referenca e cilësimeve
- Zgjidhja e problemeve
- FAQ
Vështrim i përgjithshëm
OW Consent është një suitë për menaxhimin e pëlqimit në WordPress. Ajo mbulon gjithë zinxhirin: shfaqjen e një zgjedhjeje, zbatimin e saj real te gjurmuesit, ruajtjen e provës, publikimin e dokumenteve që e shpjegojnë atë dhe pritjen e kërkesave të subjekteve të të dhënave.
Vijnë të gatshme njëmbëdhjetë profile përputhshmërie — nga GDPR-ja te CCPA-ja, duke kaluar nga Ligji 25 i Kebekut, LGPD-ja braziliane apo DPDP-ja e Indisë. Profili aktiv vendos modelin e pëlqimit (opt-in ose opt-out), vlerat e parazgjedhura të Google Consent Mode, tekstin e dokumenteve të gjeneruara, të drejtat e publikuara dhe autoritetin mbikëqyrës që citohet.
Gjithçka qëndron brenda faqes suaj. Shtojca kontakton vetëm një shërbim të jashtëm, Global Vendor List-in e IAB Europe, dhe vetëm nëse aktivizoni modulin TCF, i cili është i çaktivizuar si parazgjedhje. Pa telemetri, pa llogari, pa abonim.
E pajtueshme me një cache të plotë faqesh, nga vetë ndërtimi
Ky është pika arkitekturore që qeveris gjithçka tjetër. Asgjë nga ajo që jep serveri nuk varet nga cookie-ja e pëlqimit. HTML-ja është e njëjtë për të gjithë vizitorët: gjurmuesit rishkruhen si etiketa inerte për të gjithë, dhe është një runtime JavaScript ai që i liron brenda shfletuesit, kategori pas kategorie, duke lexuar cookie-n para renderimit të parë.
Pasojë praktike: LiteSpeed Cache, WP Rocket, Varnish apo një CDN nuk mund t'ia shërbejnë
zgjedhjet e një vizitori një tjetri. Vetëm përgjigjet vërtet personale — faqja e konfirmimit
të identitetit për një kërkesë të drejtash, përgjigjet REST që përmbajnë të dhëna të
vizitorit — shënohen shprehimisht si të pacache-ueshme. Asnjë nonce nuk shtypet as brenda
HTML-je të cache-ueshme: banneri merr një të freskët nga një endpoint no-store pak para
çdo shkrimi.
Çfarë vjen brenda
- Banner pëlqimi: katër pozicione, temë e çelët / e errët / automatike, «Refuzoji të gjitha» po aq i dukshëm sa «Pranoji të gjitha», panel preferencash i përdorshëm me tastierë, plotësisht i përkthyeshëm.
- Bllokim automatik i gjurmuesve: skripte, fragmente inline, iframe, piksela,
sugjerime burimesh (
preconnect,dns-prefetch,preload), fletë stilesh analytics/marketing dhe media palësh të treta, nisur nga 175 firma të përfshira dhe të redaktueshme. - Skaner gjurmuesish: shfletim i faqeve tuaja me WP-Cron, lexim i header-ave
Set-Cookie, sondë shfletuesi e rezervuar për administratorët, dhe një panel që thotë gjithnjë çfarë ka mbuluar vërtet shfletimi. - Gjenerues dokumentesh ligjore: politikë privatësie dhe politikë cookie-sh për të njëmbëdhjetë profilet, në gjuhën e juridiksionit; njoftim ligjor dhe kushte të përgjithshme në frëngjisht.
- Regjistër pëlqimesh: çdo veprim i shtohet një tabele të lidhur në zinxhir me HMAC, bashkë me profilin në fuqi, hash-in e dokumenteve të publikuara dhe hash-in e bannerit që u shfaq vërtet.
- Portal të drejtash (DSAR): formular me shortcode, verifikim me e-mail, afati i nenit 12.3 që nis nga konfirmimi i identitetit, lidhje me eksportuesin dhe fshirësin vendas të WordPress-it.
- Google Consent Mode v2, IAB TCF v2.2, Global Privacy Control, zbulim rajonal, integrim me OW Forms: secili aktivizohet më vete.
- API REST e plotë nën namespace-in
owc/v1.
Çfarë nuk bën — lexojeni para se të angazhoheni
Në një çështje juridike, një premtim i tepruar ju ekspozon aq sa ekspozon edhe botuesin. Ja kufijtë, ashtu siç janë shkruar në kod.
- Dokumentet e gjeneruara janë modele, jo këshillë juridike. Çdo dokument mbyllet me një paralajmërim që e thotë këtë, dhe ai paralajmërim është aktiv si parazgjedhje. Jepini dokumentet për rishikim para se t'i publikoni.
- Moduli TCF nuk është një CMP i regjistruar pranë IAB Europe. Ai kërkon një CMP ID që duhet ta siguroni vetë, nuk ofron asnjë zgjedhje në nivel ofruesi, dhe ofruesit kanë të drejtë ta refuzojnë sinjalin e tij. Nëse të ardhurat reklamuese nën TCF kanë peshë për ju, përdorni një CMP të certifikuar.
- Regjistri është i pafalsifikueshëm vetëm me kusht. Zinxhiri është provë vetëm nëse çelësi i tij i nënshkrimit qëndron jashtë bazës së të dhënave. Shtojca e zbulon rastin e kundërt, e raporton vetë dhe jua thotë në administrim, në vend që të pretendojë të kundërtën.
- Skaneri nuk ekzekuton asnjë JavaScript. Ai sheh çfarë përmban HTML-ja juaj dhe çfarë
lëshojnë header-at tuaj
Set-Cookie; atë që një menaxher etiketash injekton në runtime e sheh vetëm një sondë e rezervuar për administratorët e kyçur. - Bllokimi i parazgjedhur nuk është «gjithçka e palës së tretë». Një skript i panjohur i palës së tretë lejohet si parazgjedhje; janë iframe-t e panjohura që bllokohen si parazgjedhje. Bllokimi mbështetet te katalogu i firmave, të cilin mund ta pasuroni.
- Pa JavaScript, asnjë zgjedhje nuk mund të regjistrohet. Vizitori sheh një bllok
<noscript>dhe asgjë jothelbësore nuk ngarkohet, por as nuk regjistrohet asgjë. - Pa ndarje shtet për shtet në SHBA e as provincë për provincë në Kanada brenda zbulimit
rajonal: gjithë territori amerikan merr profilin
ccpa, gjithë Kanadaja merrquebec. - Njoftimi ligjor dhe kushtet e përgjithshme ekzistojnë vetëm në frëngjisht. Për çdo juridiksion, gjuha e së cilës nuk është frëngjishtja, gjeneruesi refuzon t'i prodhojë këto dy dokumente në vend që të publikojë një tekst të papërshtatshëm.
- Asnjë rol i dedikuar: gjithë administrimi kërkon lejen
manage_options.
Kjo listë është zgjedhje e pranuar hapur, jo një udhërrëfyes i fshehur. Në përputhshmëri, një mjet që i deklaron vrimat e veta vlen më shumë se një mjet që i fsheh.
Instalimi
Nga .zip-i
- Shkarkoni
ow-consent-1.4.3.zipnga https://optionweb.dev/sq/addons/ow-consent/ - Shtojcat → Shto të re → Ngarko shtojcën
- Zgjidhni skedarin, klikoni Instalo, pastaj Aktivizo
Me FTP
Shpaketoni arkivin dhe vendoseni dosjen ow-consent në /wp-content/plugins/, pastaj
aktivizoni shtojcën nga Shtojcat.
Kërkesat paraprake
- WordPress 6.2 ose më i ri — kjo është një refuzim nisjeje, jo një rekomandim (shihni më poshtë)
- PHP 7.4 ose më i ri
- MySQL 5.7+ / MariaDB 10.2+
- WP-Cron funksional nëse përdorni skanerin, ruajtjen e regjistrit, kujtesat e afatit DSAR ose modulin TCF
Mbrojtësi WordPress 6.2. Që nga 1.3.0, çdo identifikues tabele lidhet me shënuesin
%itëwpdb::prepare(), të cilin WordPress-i e kupton vetëm nga 6.2 e tutje. Në një bërthamë më të vjetër,prepare()do të kthente një varg bosh, katalogu i gjurmuesve do të zgjidhej në heshtje si një grup bosh, dhe banneri do të vazhdonte t'i premtonte vizitorit një bllokim që s'do të ndodhte. Prandaj shtojca refuzon të niset dhe shfaq një mesazh gabimi që thotë shprehimisht se asgjë nuk bllokohet dhe se asnjë pëlqim nuk regjistrohet. Header-iRequires at leaste pengon tashmë aktivizimin nën 6.2, por ai nuk mbulon as një kthim pas të bërthamës nën një instalim në shërbim, as një kopje të hedhur me FTP.
Çfarë instalohet
Në aktivizim, OW Consent krijon katër tabela:
| Tabela | Përmbajtja |
|---|---|
{prefix}owc_ledger | Regjistri i pëlqimeve, i lidhur në zinxhir me hash |
{prefix}owc_dsar | Kërkesat për ushtrimin e të drejtave |
{prefix}owc_scanner | Gjetjet e skanerit të gjurmuesve |
{prefix}owc_scripts | Katalogu i firmave që përdor bllokimi |
Një tabelë e pestë, {prefix}owc_form_links, krijohet veçmas nga integrimi me OW Forms
nëse shtojca motër është aktive (shihni Integrimi me OW Forms).
Aktivizimi shton gjithashtu:
- opsionin
owc_settings, të mbjellë bosh — me qëllim: për sa kohë nuk keni ruajtur asgjë, të gjithë tekstet vijnë nga parazgjedhjet angleze, të përkthyera në çast në gjuhën e faqes, në vend që të ngurtësojnë në bazë lokalen e personit që aktivizoi shtojcën; - opsionin
owc_version; - katalogun e gjurmuesve që vjen brenda (
data/tracker-catalog.json), të futur në grupe nga 100 meINSERT IGNORE, me një flamur mbjelljeje sipas versionit (owc_catalog_seeded_1.4.3); - detyrën ditore
owc_daily_maintenance, të planifikuar një orë pas aktivizimit.
Pesë ngjarje të tjera cron armatosen nga modulet që i përdorin. Gjashtë hook-et cron të
shtojcës janë: owc_scanner_run, owc_scanner_run_batch, owc_ledger_retention,
owc_tcf_refresh_gvl, owc_run_upgrade dhe owc_daily_maintenance.
Në multisite, tabelat krijohen për çdo faqe, kurrë të përbashkëta
(wp_2_owc_ledger, etj.). Një aktivizim në nivel rrjeti i shfleton të gjitha faqet
vetëm nëse rrjeti ka jo më shumë se 200 faqe; përtej kësaj, çdo faqe furnizohet me
përtaci në kërkesën e saj të parë. Një nënfaqe e krijuar pas një aktivizimi rrjeti
furnizohet nga hook-u wp_initialize_site.
Çfarë duhet përcaktuar në wp-config.php
Asnjëra prej këtyre konstanteve nuk është e detyrueshme, por dy prej tyre e ndryshojnë vlerën provuese të asaj që prodhon shtojca.
// Rekomandohet: e nxjerr çelësin e nënshkrimit të regjistrit jashtë bazës së të dhënave.
define( 'OWC_LEDGER_KEY', 'një varg i gjatë i rastësishëm, unik për këtë faqe' );
// Rekomandohet: salt-et standarde të WordPress-it. Pa to, WordPress i ruan në bazë,
// dhe regjistri e sinjalizon vetë veten si të falsifikueshëm.
define( 'AUTH_KEY', '…' );
define( 'AUTH_SALT', '…' );
// Nëse faqja qëndron pas një CDN-je, një balancuesi ngarkese ose një reverse proxy-je.
// Pa këtë konstante, CF-Connecting-IP, X-Forwarded-For dhe X-Real-IP SHPËRFILLEN
// dhe përdoret vetëm REMOTE_ADDR — çka u jep të gjithë vizitorëve tuaj të njëjtin
// identitet për kufizimin e shpeshtësisë.
define( 'OWC_TRUSTED_PROXY', '198.51.100.0/24, 2001:db8::/32' );
// `OWC_TRUSTED_PROXIES` pranohet si alias; vlen edhe një varg, edhe një grup.
// Vetëm për zbulimin rajonal: deklaron cilët header shtetesh janë të besueshëm.
define( 'OWC_GEO_TRUSTED_HEADERS', 'cloudflare' ); // 'cloudflare'|'cloudfront'|'proxy'|'all'
define( 'OWC_BEHIND_CLOUDFLARE', true );
define( 'OWC_BEHIND_CLOUDFRONT', true );
OWC_LEDGER_KEY shërben edhe për të nxjerrë çelësin e cookie-s së zbulimit rajonal. Nëse
nuk përcaktohet, çelësi i regjistrit bie te wp_salt('auth').
Kush ka qasje
Gjithë administrimi i shtojcës dhe të gjitha rrugët REST të administrimit kërkojnë lejen
manage_options. Nuk ekziston as rol i dedikuar, as leje më e imët: t'ia hapësh
ekranin e shtojcës dikujt do të thotë t'i japësh cilësimet e faqes.
Rruga e përditësimit
Shtojca nuk e migron kurrë skemën e vet drejtpërdrejt mbi një faqe anonime. Kur ndryshon
versioni, owc_version dhe një flamur owc_pending_upgrade shkruhen menjëherë, pastaj:
- migrimi kryhet inline nëse kërkesa është një kërkesë administrimi jashtë AJAX-it, një ekzekutim cron-i ose një komandë WP-CLI;
- përndryshe planifikohet një ngjarje
owc_run_upgradepesë sekonda më vonë.
admin-ajax.php trajtohet si kërkesë anonime: është pikë hyrjeje publike. Migrimi kryhet
nën një kyç (owc_upgrade_lock, i vjedhur pas 300 sekondash), dhe një rrjetë sigurie mbi
admin_init i kap faqet ku WP-Cron-i është i çaktivizuar. Në një version identik, kostoja e
plotë është një get_option() i vetëm.
Çaktivizimi dhe fshirja
Çaktivizimi i ruan të gjitha të dhënat dhe fshin vetëm gjashtë ngjarjet cron. Në çaktivizim rrjeti shfletohen të gjitha faqet në grupe nga 200 — ndryshe nga aktivizimi — sepse një cron i lënë i armatosur nuk do të zhdukej kurrë.
Fshirja e shtojcës nis uninstall.php, i cili vepron në dy faza:
- Gjithnjë, pavarësisht cilësimit tuaj: gjashtë cron-et fshihen dhe tabela
{prefix}owc_dsarhiqet, bashkë me transient-et e saj të kufizimit të shpeshtësisë. Është e vetmja tabelë që përmban të dhëna personale drejtpërdrejt identifikuese për palë të treta (adresë e-maili, emër, tekst i lirë); sapo shtojca të ketë ikur, asgjë nuk e kufizon më ruajtjen e saj dhe asnjë ekran nuk lejon t'u përgjigjeni, t'i eksportoni apo t'i fshini. Eksportoni kërkesat që duhet të ruani përpara se ta fshini shtojcën. - Vetëm nëse
delete_data_on_uninstallështë aktivizuar shprehimisht: fshihen tabelatowc_ledger,owc_dsar,owc_scanner,owc_scriptsdheowc_form_links, opsionet me emër, të gjitha opsionet me prefiksinowc_(përfshirë transient-et) dheusermetame prefiksinowc_. Në multisite, opsionet e rrjetit ndjekin vendimin e faqes kryesore.
Ky cilësim është i çaktivizuar si parazgjedhje: prova e pëlqimit, e kërkuar nga neni 7.1 i GDPR-së, i mbijeton fshirjes së shtojcës.
Nisja e shpejtë
Pas aktivizimit, hapni zërin OW Consent në shiritin anësor të administrimit. Gjithë shtojca rri në këtë ekran të vetëm, në dhjetë skeda: Dashboard, Banner, Compliance, Legal identity, Categories, Policies, Scanner, Tracker catalogue, Audit ledger, DSAR requests.
Një ruajtje prek vetëm skedën e hapur. Kjo është me qëllim: çdo vlerë boolean ka një fushë të fshehur binjake, dhe një çelës që mungon në formular do të thotë «kjo fushë ndodhet në një skedë tjetër», kurrë «e pashënuar». Pa këtë, ruajtja e një skede do të mbishkruante cilësimet e të gjitha të tjerave.
1. Zgjidhni profilin tuaj të përputhshmërisë
Skeda Compliance. Profili vendos modelin e pëlqimit, vlerat e parazgjedhura të Consent
Mode, dokumentet e gjeneruara dhe të drejtat e publikuara. Si parazgjedhje: gdpr.
compliance_strict është i aktivizuar si parazgjedhje: është ai që e shtrin bllokimin
përtej skripteve të regjistruara nga WordPress-i. Lëreni aktiv nëse doni që të trajtohen
iframe-t, pikselat dhe skriptet e shkruara drejt e në temën tuaj.
2. Plotësoni identitetin ligjor
Skeda Legal identity. Këto fusha janë lënda e parë e dokumenteve të gjeneruara, dhe gjenerimi refuzohet për sa kohë një fushë e detyrueshme mbetet bosh — bashkë me listën e çelësave që mungojnë, jo me një dështim në heshtje.
Minimumi për të gjitha dokumentet: legal_company_name dhe legal_company_email. Për
gjithçka veç politikës së cookie-ve, shtoni adresën dhe shtetin. Për njoftimin ligjor,
shtoni edhe telefonin, drejtorin e botimit dhe të dhënat e plota të strehuesit; në Francë,
Belgjikë dhe Luksemburg bëhen të detyrueshme edhe forma juridike dhe numri i regjistrimit.
Lëreni legal_dpa_authority bosh: autoriteti mbikëqyrës nxirret nga shteti dhe profili
juaj. Ta plotësoni me dorë në një faqe shumëjuridiksionale do të thotë të emërtoni
rregullatorin e gabuar.
3. Kontrolloni kategoritë tuaja
Skeda Categories. Të gjashtë kategoritë janë të disponueshme si parazgjedhje.
Çaktivizoni ato që faqja juaj nuk i përdor: një kategori që mungon në ndërfaqe nuk është
fitim përputhshmërie, është një burim i bllokuar përgjithmonë pa asnjë çelës për ta liruar —
bllokimi atëherë e kalon te marketing.
Lërini etiketat bosh sa kohë ju përshtaten: kështu ato ndjekin gjuhën e faqes. Sapo të personalizoni një tekst, ai tekst pushon së ndjekuri gjuhën.
4. Rregulloni bannerin
Skeda Banner. Pozicioni, tema, butonat, etiketat, kohëzgjatja e rinovimit.
Dy pika që nuk duhen humbur: lëreni banner_reject_all aktiv («Refuzo» duhet të jetë po
aq i thjeshtë e po aq i dukshëm sa «Prano»), dhe lëreni kryqin e mbylljes të çaktivizuar
— ai mungon si parazgjedhje sepse një mbyllje pa zgjedhje barazohet me refuzim të
nënkuptuar. Nëse e aktivizoni, një klikim mbi kryq kryen gjithë rrugën «Refuzoji të gjitha»,
kurrë një mbyllje në heshtje.
5. Gjeneroni dokumentet tuaja
Skeda Policies. Katër dokumente: politika e cookie-ve, politika e privatësisë, njoftimi ligjor, kushtet e përgjithshme. Secili bëhet një faqe WordPress me versione, lidhja e së cilës riinjektohet në cilësime.
Gjeneroni fillimisht në parapamje, rilexoni, pastaj publikoni. Dhe jepini për rishikim te një profesionist: shiriti i paralajmërimit në fund të çdo dokumenti nuk është dekorativ.
6. Hapni portalin e të drejtave
Krijoni një faqe dhe ngjisni në të [owc_dsar_form]. Plotësoni dsar_email në skedën
DSAR requests: kjo është adresa e kontaktit që publikohet nën formular dhe marrësi i
njoftimeve. Pa të, shtojca bie te legal_dpo_email, pastaj te admin_email — por
admin_email nuk publikohet kurrë në një faqe publike.
7. Kontrolloni para se ta hapni për publikun
Paneli i kontrollit kryen pesëmbëdhjetë verifikime përputhshmërie dhe i dallon gabimet nga paralajmërimet: banner i çaktivizuar, «Refuzoji të gjitha» që mungon, kryq mbyllje i aktivizuar, identitet ligjor i paplotë, portal të drejtash i mbyllur, regjistër i çaktivizuar, asnjë politikë e lidhur, autoritet mbikëqyrës në kundërshtim me profilin aktiv (me një buton «Fix this» që e rikthen në gjendjen fillestare), faqe jo në HTTPS, gjurmues të pakategorizuar, kërkesa DSAR jashtë afatit, rregulla katalogu që nuk mund të aktivizohen kurrë.
Kalojini këto pesëmbëdhjetë rreshta në të gjelbër përpara se të shpallni se faqja juaj është në përputhshmëri.
Njëmbëdhjetë profilet e përputhshmërisë
Profili i përputhshmërisë nuk është kozmetik. Ai drejton modelin ligjor, ndërfaqen, sinjalet teknike dhe përmbajtjen e dokumenteve të publikuara.
Lista
| Profili | Regjimi i synuar | Modeli |
|---|---|---|
gdpr | GDPR + ePrivacy (BE/ZEE) | Opt-in |
uk_pecr | UK GDPR + PECR (Mbretëria e Bashkuar) | Opt-in |
ch_nfadp | nFADP zvicerane | Opt-in |
quebec | Ligji 25 (Kebek) | Opt-in |
lgpd | LGPD (Brazil) | Opt-in |
popia | POPIA (Afrika e Jugut) | Opt-in |
pipl | PIPL (Kinë) | Opt-in |
dpdp | DPDP Act 2023 (Indi) | Opt-in |
ccpa | CCPA / CPRA (Kaliforni) | Opt-out |
us_generic | Ligje shtetërore amerikane të përgjithshme | Opt-out |
au | Privacy Act (Australi) | Opt-out |
Cilësimi: compliance_profile, parazgjedhja gdpr.
Opt-in do të thotë se para çdo zgjedhjeje jepen vetëm kategoritë e detyruara.
Opt-out do të thotë se gjithçka është e dhënë deri në refuzim. Tre profilet opt-out janë
ccpa, us_generic dhe au. Runtime-i JavaScript zbaton saktësisht të njëjtën rregull si
PHP-ja, kështu që serveri dhe shfletuesi nuk mund të raportojnë dy gjendje të ndryshme.
Çfarë ndryshon vërtet profili
| Çfarë ndryshon | Detaji |
|---|---|
| Modeli i pëlqimit | Opt-in, veç ccpa, us_generic, au |
| Vlerat e parazgjedhura të Consent Mode | Të shtatë sinjalet kalojnë në granted nën një profil opt-out |
| Lidhja «Do Not Sell or Share» e detyrueshme | Vetëm ccpa dhe us_generic |
| GPC ligjërisht detyrues | Vetëm ccpa dhe us_generic — Australia përjashtohet shprehimisht: regjim opt-out, por që nuk e njeh GPC-në |
| Perimetri «zbatohet GDPR-ja» për TCF | 27 shtete të BE-së + IS, LI, NO + GB + CH, pra 31 kode |
| Gjuha e dokumentit të gjeneruar | quebec → frëngjisht; lgpd → portugalisht; gdpr me shtet FR, BE ose LU → frëngjisht; gjithë pjesa tjetër → anglisht |
| Autoriteti mbikëqyrës i cituar | Tabelë sipas profilit, e imtësuar sipas shtetit për GDPR-në |
| Lista e të drejtave të publikuara | Një listë e shkruar për çdo profil, me citim neni |
| Trupi «regjimi i cookie-ve» i dokumentit anglisht | Tekst, perimetër transferimi dhe garanci të ndryshme sipas profilit |
Dokumentet e gjeneruara sipas profilit
Politika e privatësisë dhe politika e cookie-ve ekzistojnë për të njëmbëdhjetë profilet.
Shabllonet zgjidhen sipas kësaj radhe, fiton i pari që gjendet:
<lloji>_<profili>_<gjuha>, pastaj <lloji>_<profili>, pastaj <lloji>_<gjuha>, pastaj
<lloji>.
Trupat anglisht të politikës së cookie-ve janë të vetëdijshëm për profilin: rregulla e
zbatueshme, perimetri i transferimit, garancitë dhe teksti i panelit ndryshojnë për gdpr,
uk_pecr, ch_nfadp, au, pipl, dpdp, ccpa dhe us_generic, me citimet përkatëse
(neni 5(3) i direktivës 2002/58, PECR reg. 6, neni 45c(b) LTC dhe neni 19/6(7)(b) nLPD,
APP 8, neni 24 PIPL, seksionet 5/6/7/9(3)/16 të DPDP Act 2023, §1798.121 dhe Cal. Code Regs.
tit. 11 §7025, VCDPA/CPA/CTDPA/UCPA/TDPSA).
Autoriteti mbikëqyrës i cituar
| Profili | Autoriteti i emërtuar |
|---|---|
gdpr, shteti FR | CNIL |
gdpr, shteti BE | APD-GBA |
gdpr, shteti LU | CNPD |
gdpr, shteti DE | BfDI |
gdpr, shtet tjetër i ZEE-së | Formulim i përgjithshëm («autoriteti mbikëqyrës kompetent») |
uk_pecr | ICO |
ch_nfadp | PFPDT / FDPIC |
quebec | Commission d'accès à l'information |
lgpd | ANPD |
ccpa | California Privacy Protection Agency |
popia | Information Regulator (South Africa) |
pipl | Cyberspace Administration of China |
dpdp | Data Protection Board of India |
au | OAIC |
us_generic | Attorney General i shtetit tuaj |
Nëse e keni ndryshuar legal_dpa_authority, fiton ajo që keni shkruar ju mbi këtë nxjerrje
automatike.
Kufijtë e mbulimit juridiksional
- Vetëm katër shtete të ZEE-së kanë autoritet të emërtuar (FR, BE, LU, DE). Një faqe nën GDPR në Spanjë, Itali ose Holandë publikon një formulim të përgjithshëm.
- Pa ndarje shtet për shtet në SHBA. Profili
us_genericekziston dhe mbart tekstet e veta VCDPA/CPA/CTDPA/UCPA/TDPSA, por asnjë zbulim automatik nuk ia cakton: zgjidhet me dorë. - Pa ndarje sipas provincave në Kanada.
- Vetëm tri gjuhë dokumentesh: frëngjisht, anglisht, portugalisht. Trupat nuk kalojnë nga mekanizmi i përkthimit të WordPress-it — kjo është me qëllim: një dokument ligjor duhet të jetë njëgjuhësh dhe gjuha e tij ndjek juridiksionin, kurrë lokalen e administratorit.
- Njoftimi ligjor dhe kushtet e përgjithshme: vetëm shabllone frëngjisht. Gjeneruesi
refuzon prerazi për çdo gjuhë tjetër të synuar, veç nëse jepni trupin tuaj përmes filtrit
owc_policy_template.
Kategoritë e cookie-ve
Lista kanonike
Gjashtë kategori, në këtë radhë shfaqjeje, necessary gjithmonë e para:
| Slug | Etiketa e përfshirë | Përshkrimi i përfshirë |
|---|---|---|
necessary | Necessary | Strictly required for the site to function (cart, login, language preferences). Cannot be disabled. |
functional | Functional | Enhance the experience (chat, embedded videos, maps). Without them some features may not work. |
analytics | Statistics | Help us understand how you use the site (anonymously). No personal data is shared for commercial purposes. |
marketing | Marketing | Enable us to show you ads and content tailored to your interests on other sites. |
preferences | Preferences | Remember your interface choices (layout, saved filters). |
social | Social & embeds | Allow embedded social content (YouTube, Instagram, X) to load. |
Vlerat e mësipërme janë parazgjedhjet angleze që mund të ruhen. Në një faqe shqip, vizitori sheh përkthimin — shihni mekanizmin e përkthimit më poshtë.
Disponueshmëria
Cilësimi cat_<slug>_available, një për çdo kategori. Të gjashtë janë të disponueshme si
parazgjedhje. Çelësi i vjetër cat_<slug>_enabled lexohet ende si rezervë, pa migrim.
preferences dhe social vijnë të disponueshme sepse katalogu fillestar i klasifikon
YouTube, Spotify, SoundCloud, Instagram, X dhe Facebook si social: pa këtë kategori në
ndërfaqe, këto integrime do të mbeteshin të bllokuara përgjithmonë pa asnjë mënyrë opt-in-i.
necessary është e detyruar: nuk mund të çaktivizohet (neni 5.3 ePrivacy). Prandaj ajo
nuk ka çelës disponueshmërie në administrim, veçse një etiketë dhe një përshkrim.
Mekanizmi i përkthimit
Cilësimet cat_<slug>_label dhe cat_<slug>_desc. Vlera e ruajtur kthehet fjalë për
fjalë vetëm nëse nuk është bosh dhe ndryshon nga parazgjedhja angleze; përndryshe del
përkthimi.
Pasojë që duhet ditur: për sa kohë nuk personalizoni asgjë, ndryshimi i gjuhës së faqes ndryshon gjuhën e kategorive. Sapo të shkruani tekstin tuaj, ai tekst ngurtësohet në gjuhën në të cilën e keni shkruar. E njëjta rregull vlen për tekstet e bannerit.
Përshkrimi i përkthyer i necessary ndërtohet nga dy vargje: i dyti emërton cookie-t e vetë
shtojcës, owc_consent (deri në 13 muaj) dhe owc_geo (24 orë, i shkruar vetëm kur zbulimi
rajonal është aktiv).
Përputhja me Google Consent Mode v2 — detyruese
Ky është burimi i vetëm i së vërtetës në shtojcë: banneri, bllokimi dhe bootstrap-i e lexojnë të gjithë këtë tabelë, prandaj nuk mund të divergojnë.
| Kategoria | Sinjalet Consent Mode v2 |
|---|---|
necessary | security_storage, functionality_storage |
functional | functionality_storage, personalization_storage |
analytics | analytics_storage |
marketing | ad_storage, ad_user_data, ad_personalization |
preferences | personalization_storage |
social | ad_storage, ad_user_data |
Nuancë e rëndësishme: nëse faqja juaj e shfaq kategorinë functional, atëherë
functionality_storage hiqet nga lista e necessary. Përndryshe do të jepej para çdo
pëlqimi, ndonëse i përket një kategorie opsionale.
Përputhja me TCF — vetëm përshkruese
functional → functional, analytics → measurement, marketing → advertising,
preferences → personalization, social → social_media.
Këto janë etiketa shfaqjeje. Përputhja detyruese nga ana e TCF-së është tabela e identifikuesve numerikë të qëllimeve IAB, e përshkruar në seksionin IAB TCF v2.2. Mos e lidhni kurrë një sjellje TCF me këto pesë etiketa.
Çfarë ndodh nëse zhduket një kategori
Nëse një rregull katalogu tregon drejt një kategorie që faqja juaj nuk e shfaq më — keni
çaktivizuar social, për shembull — bllokimi e kalon burimin te marketing, ose, në
mungesë, te kategoria e parë opsionale e disponueshme. Pa këtë normalizim, burimi do të
mbetej i bllokuar përgjithmonë pa asnjë çelës për ta liruar.
Banneri
Kur shfaqet
Banneri renderohet mbi wp_footer me prioritet 5, ndërsa burimet e tij vendosen në radhë
mbi wp_enqueue_scripts. Ai del menjëherë nëse është i vërtetë njëri prej këtyre kushteve:
kontekst administrimi, feed RSS, robots.txt, ose banner_enabled i çaktivizuar. Del edhe
nëse wp_head nuk është nisur kurrë — një temë që nuk thërret wp_head() do të merrte
përndryshe një kod inert dhe pa stil.
HTML-ja është e njëjtë për të gjithë vizitorët. Të gjitha kutizat e panelit renderohen
në OFF nga ana e serverit dhe pastaj hidratohen nga ana e klientit prej cookie-s. Është
JavaScript-i ai që vendos <html data-owc="given|none"> në mënyrë sinkrone, para renderimit
të parë; CSS-ja e shfaq bannerin vetëm mbi data-owc="none".
Rrjedhim që duhet ditur: një vizitor pa JavaScript nuk e sheh kurrë bannerin, prandaj
nuk mbetet kurrë i mbyllur pas një modaleje që s'e mbyll dot. Në vend të tij sheh një bllok
<noscript> që shpjegon se preferencat e tij nuk mund të regjistrohen dhe se asnjë cookie
jothelbësore nuk ngarkohet sa kohë nuk është bërë ndonjë zgjedhje.
Pozicionet dhe tema
| Cilësimi | Vlerat | Parazgjedhja |
|---|---|---|
banner_position | bottom-bar, bottom-card, center-modal, top-bar | bottom-bar |
banner_style | auto, light, dark | auto |
Vetëm center-modal merr role="dialog", aria-modal="true", një sfond të errësuar, një
kurth fokusi dhe tastin Esc. Tri pozicionet e tjera janë një role="region": Esc-i nuk
kapet (tema ruan trajtimin e vet) dhe fokusi nuk vidhet në renderimin e parë, çka do ta
shtynte një përdorues tastiere përtej të gjitha lidhjeve të kapërcimit.
Paleta e errët zbatohet nën prefers-color-scheme: dark me mbrojtëse që të mos mbishkruajë
një temë e cila deklaron shprehimisht light. Tema e faqes mund ta drejtojë paletën me
variabla CSS: --owc-paper-tint, --owc-ink, --owc-smoke, --owc-fog, --owc-ui,
--owc-accent, --owc-accent-strong, --owc-accent-darker.
Detaje zbatimi: z-index 99998 për bannerin dhe 99997 për sfondin, mbështetje për
env(safe-area-inset-*) për prerjet e iOS-it, zhvendosje automatike nën shiritin e
administrimit të WordPress-it kur pozicioni është lart.
Butonat
| Cilësimi | Parazgjedhja | Efekti |
|---|---|---|
banner_accept_all | true | Shfaq «Pranoji të gjitha» |
banner_reject_all | true | Shfaq «Refuzoji të gjitha» |
banner_preferences | true | Shfaq «Personalizo» |
banner_close_x | false | Shfaq kryqin e mbylljes |
banner_show_logo | true | Shfaq logon e faqes |
«Pranoji të gjitha» dhe «Refuzoji të gjitha» ndajnë të njëjtën klasë formatimi: i njëjti sfond, i njëjti bordurë, e njëjta trashësi, e njëjta mbushje. Kjo është përgjigjja ndaj kërkesës së CNIL / EDPB (udhëzimet 03/2022): refuzimi duhet të jetë po aq i thjeshtë e po aq i dukshëm sa pranimi.
Kryqi i mbylljes
Ai është i çaktivizuar si parazgjedhje, sepse një kryq mbylljeje barazohet me refuzim të nënkuptuar. Tri sjellje që duhen ditur:
- Kur
banner_close_xështë off, kryqi ndodhet në kod por mbart atributinhidden, dhe CSS-ja e heq krejtësisht: as i dukshëm, as i fokusueshëm, as i shpallur te lexuesit e ekranit. - Kur aktivizohet, klikimi mbi kryq kryen gjithë rrugën «Refuzoji të gjitha», kurrë një mbyllje në heshtje.
- Ai zbulohet nga runtime-i dhe rietiketohet në një rast të vetëm: kur një refuzim nuk ka mundur të regjistrohet fare. Atëherë ai nuk refuzon më asgjë, veçse e mbyll njoftimin — dhe kjo mbyllje nuk numërohet si zgjedhje. Një vizitor të cilit serveri ia refuzon vendimin nuk lihet përballë një banneri që s'e mbyll dot.
Shtresa e parë
- Titulli (
text_title) dhe mesazhi (text_message). Mesazhi është e vetmja fushë me HTML të pasur e shtojcës; ai renderohet me njëwp_ksestë kufizuar te<a href target rel>. - Lidhja drejt politikës së privatësisë:
link_privacy_policy, me rezervë te faqja e politikës e deklaruar në WordPress nëse cilësimi është bosh. - Lidhja drejt politikës së cookie-ve:
link_cookie_policy, pa rezervë. - Emri i kontrolluesit të të dhënave:
legal_company_name, përndryshe emri i faqes, i shfaqur si «Kontrollues i të dhënave: …» (neni 13(1)(a)). - Logoja: logoja e personalizuar e temës në madhësinë
medium, përndryshe ikona e faqes.
Paneli i preferencave
Një rresht për çdo kategori të disponueshme, brenda një role="group" me emër.
- Një kategori e detyruar shfaq një distinktiv tekstual «Always active», pa çelës.
- Një kategori opsionale shfaq një
<button role="switch">mearia-checked,aria-labelledbydhearia-describedby. Gjendja mbahet ngaaria-checked, nga pozicioni i kursorit dhe nga një fjalë e dukshme On/Off — kurrë vetëm nga ngjyra. - Objektiv prekjeje i zgjeruar në 44 px në ekran të vogël (WCAG 2.2 AA, kriteri 2.5.8).
- Shiriti i veprimeve të panelit është
stickyposhtë, që «Ruaji zgjedhjet e mia» të mbetet i arritshëm ndërsa lista rrëshqet.
Nëse moduli TCF është aktiv, shfaqen dy blloqe shtesë: qëllimet TCF të arritshme dhe veçoritë speciale të deklaruara. Shihni IAB TCF v2.2.
Rinovimi i pëlqimit
| Cilësimi | Parazgjedhja | Kufijtë |
|---|---|---|
consent_renewal_months | 12 | 0 deri 13 |
consent_policy_hash_check | true | — |
0 nuk do të thotë «mos pyet kurrë më». Vlera 0 kthehet në 13 muaj, dhe 13 muaj është
tavani i fortë (vendimi CNIL 2020-091). Prandaj kohëzgjatja efektive është gjithnjë mes 1
dhe 13 muajsh, dhe është pikërisht kjo vlerë që qeveris kohëzgjatjen e cookie-s, kontrollin e
skadimit nga ana e serverit dhe kohëzgjatjen e publikuar në dokumentet e gjeneruara.
Konstantja OWC_COOKIE_TTL që duket në kodin burimor është vetëm një rezervë.
consent_policy_hash_check e rikërkon pëlqimin kur ndryshojnë dokumentet tuaja: cookie-ja
mbart një hash të faqeve të politikave të lidhura, dhe një ndryshim e rihap bannerin. Hash-i
është varg bosh kur asnjë faqe nuk është e lidhur — kjo lejon të dallohet «e panjohur»
nga «e ndryshuar» dhe të mos rikërkohet kurrë gjithë një faqe mbi një krahasim bosh.
Tekstet
Shtatë vende, të gjitha bosh si parazgjedhje dhe pra të përkthyera automatikisht:
text_title, text_message, text_accept_all, text_reject_all, text_preferences,
text_save, dhe floating_button_label për butonin pluskues.
Në administrim, çdo fushë e shfaq parazgjedhjen e vet të përkthyer si tekst udhëzues: duke e lënë bosh ruani parazgjedhjen që ndjek gjuhën e vizitorit.
Filtri owc_banner_texts lejon zëvendësimin e këtyre teksteve me kod. Pranohen edhe vende
shtesë; vlerat joskalare ose bosh shpërfillen që një callback i pakujdesshëm të mos mund ta
zbrazë bannerin.
Si regjistrohet vërtet zgjedhja
Runtime-i JavaScript është në ES5 strikt — pa funksione shigjetë, pa literale shabllonesh — që të punojë në shfletuesit e integruar brenda aplikacioneve dhe në WebView-t e vjetra. Sekuenca e tij e shkrimit ia vlen të njihet, sepse është ajo që shpjegon shumicën e mesazheve të gabimit.
- Riankorimi i origjinës. URL-të REST vijnë nga konfigurimi i WordPress-it. Nëse
vizitorët tuaj lëvizin mbi një host tjetër (www kundrejt apex-it, alias, domen
parapamjeje, proxy që rishkruan
Host), kjo URL është cross-origin dhe shfletuesi refuzon ta ruajëSet-Cookie-n ndërsa WordPress-i përgjigjet me 200. Prandaj runtime-i e riankoron rrugën e dhënë nga PHP-ja mbi origjinën ku ndodhet vërtet vizitori. - Nonce. Merret i freskët nga
GET /owc/v1/noncepak para shkrimit, kurrë i futur në HTML të cache-ueshme, i dërguar në header-inX-OWC-Nonce. Marrja ka tavan 4 sekonda, dhe një nonce që mungon, është bosh ose i paarritshëm nuk e pengon kurrë shkrimin e as nuk i raportohet vizitorit. page_urli shprehur brenda trupit të kërkesës, që rreshti i regjistrit të mos varet nga header-iReferer, të cilin një shtesë, një meta-referrer ose një proxy mund ta heqë.- Mbrojtëse kundër bllokimit prej 15 sekondash me
AbortController: kërkesa anulohet, jo thjesht shpërfillet, që një POST i vonuar të mos shkruajë një rresht të dytë. - Përkufizimi i suksesit. POST-i është sukses nëse, dhe vetëm nëse: përgjigjja është
ok, trupi është JSON i analizueshëm,json.ok === true, dhe cookie-ja rilexohet brenda shfletuesit. Një faqe cache-i, një sfidë në skaj ose një WAF i shërbyer me 200 nuk numërohen. - Nëse serveri përgjigjet me
cookie_set: false, runtime-i e shkruan vetë cookie-n me parametrat e kthyer, pastaj rilexon. Një dështim mbetet dështim: asgjë nuk publikohet, asgjë nuk zhbllokohet. - Vetëm një ridërgim, dhe vetëm mbi një 403 kodi i të cilit është
owc_bad_nonce,rest_cookie_invalid_nonceoserest_nonce_invalid, dhe vetëm nëse nonce-i i marrë është vërtet i ndryshëm. - Ajo që publikon runtime-i është ajo që ka ruajtur serveri: kategoritë e refuzuara nga serveri zbriten nga gjendja lokale.
Sa kohë POST-i nuk ka pasur sukses, asgjë nuk zbulohet, asgjë nuk zhbllokohet, dhe nuk lëshohet asnjë sinjal Consent Mode «granted».
Taksonomia e gabimeve
Runtime-i dallon nëntë shkaqe, secili me mesazhin e vet të dukshëm: network, refused,
ratelimit, unexpected, timeout, browser, config, cookie,
owc_cookie_not_persisted. Statusi HTTP dhe kodi i serverit vendosen mbi element
(data-owc-status, data-owc-code) dhe regjistrohen një herë me console.warn — kurrë të
renderuara si tekst i dukshëm. Prandaj një pamje ekrani mbështetjeje e emërton shkakun pa
qenë nevoja për një gjurmë rrjeti.
API-ja JavaScript e bannerit
window.OWCBanner.show(); // hap në modalitetin banner
window.OWCBanner.hide(); // mbyll
window.OWCBanner.openPreferences(); // hap panelin e preferencave
window.OWCBanner.openDnsmpi(); // hap panelin me marketing, social
// dhe preferences tashmë në OFF (hyrja CCPA)
window.OWCBanner.reset(); // fshin cookie-n nga ana e klientit, dërgon një
// tërheqje, pastaj ringarkon faqen
window.OWCBanner.acceptCategory( 'social' ); // kthen një premtim që zgjidhet me true
// vetëm nëse serveri e ka ruajtur vërtet
Një bootstrap më i lehtë shtypet në <head> me prioritet 1 dhe e ekspozon
window.OWConsent: .config, .categories, .geo, .profile, .optOut, .state,
.has(cat), .refresh(), .paint(), .gcmSignals(state). Konfigurimi i tij filtrohet me
owc_bootstrap_config — por gjithçka që ndodhet aty është publike dhe e përbashkët me
cache-in: mos vendosni kurrë aty një të dhënë të veçantë të një vizitori.
Si të hapet paneli nga faqet tuaja
Tri mënyra, të gjitha të barasvlershme:
- fragmenti i URL-së
#owc-preferences(ose#owc-dnsmpi), i marrë parasysh në ngarkim dhe mbihashchange; - çdo element që mbart klasën
owc-open-preferencesose atributindata-owc-open; - atributi
data-owc-dnsmpi="1"për të detyruar sjelljen «Do Not Sell».
Një ngjarje owc:consent-changed transmetohet në çdo ndryshim, me ngarkesën e dërguar në
detaj. Atë e dëgjojnë bootstrap-i, butoni pluskues, runtime-i CCPA dhe moduli TCF; mund ta
dëgjoni edhe ju.
Kufijtë e bannerit
- Gjithçka varet nga
wp_head()dhewp_footer(): një temë që nuk i thërret nuk merr asgjë. - Pa
window.fetchdhewindow.Promisenuk është i mundur asnjë shkrim dhe shfaqet gabimibrowser. - Një pëlqim mund të regjistrohet nga ana e serverit pa u ruajtur nga ana e shfletuesit (adresë e faqes e ndryshme nga hosti ku ndodhet vizitori, ruajtje e bllokuar, jar i mbushur). Runtime-i e zbulon këtë rast, refuzon ta numërojë si sukses, shfaq një mesazh të dedikuar dhe ia përcjell faktin serverit në shkrimin e radhës.
- Banneri nuk ka shortcode: ai shfaqet kudo ose askund.
Bllokimi automatik
Ky është moduli që e kthen një zgjedhje në efekt real. Ai i rishkruan etiketat që mbartin gjurmues para çdo pëlqimi, për të gjithë, dhe ia lë runtime-it t'i lirojë brenda shfletuesit.
Dy modalitete, një cilësim i vetëm
compliance_strict, i aktivizuar si parazgjedhje.
- I çaktivizuar (modalitet i butë): lidhet vetëm filtri
script_loader_tag. Me fjalë të tjera, rishkruhen vetëm skriptet e regjistruara mewp_enqueue_script(). Një<script>i shkruar drejt e në temë, një embed, një iframe, një piksel<img>: asgjë nuk preket. - I aktivizuar (modalitet strikt): përveç filtrit, një buffer daljeje kap gjithë
dokumentin, dhe trajtohet edhe kodi i renderuar përmes API-së REST. Në administrim, nëse
kërkesa është një
admin-ajax.php, një buffer i veçantë mbulon përgjigjet që i shërbejnë edhe pjesës publike («ngarko më shumë», arkiva të filtruara) — por vetëm nëse vetë trajtuesi ka deklaruarContent-Type: text/html.
Çfarë nuk vihet kurrë në buffer
Buffer-i strikt del menjëherë për: administrimin, kërkesat AJAX, feed-et, robots.txt,
trackback-et, cron-in, favicon-at, kërkesat REST, kërkesat JSON, parapamjen e mjetit të
personalizimit, sitemap-et, si dhe pikat e hyrjes wp-login.php, wp-register.php,
wp-signup.php, xmlrpc.php, wp-cron.php, wp-trackback.php — të testuara mbi emrin e
saktë të skriptit, kurrë si nënvarg i URL-së. Ai del edhe për kërkesat e skanerit, të cilat
kanë nevojë për HTML-në e papërpunuar.
Pesë kalimet
Rishkrimi bëhet me shprehje të rregullta të kalibruara, kurrë me një analizues DOM. Tre mbrojtëse e rrethojnë tërësinë: një dokument mbi 8 MB kthehet i paprekur, një dështim i motorit PCRE e kthen dokumentin të paprekur, dhe nëse rezultati del më pak se gjysma e madhësisë fillestare, kthehet origjinali. Me fjalë të tjera, modaliteti i dështimit të bllokimit është «faqe e shërbyer pa bllokim», kurrë «faqe e thyer».
Kalimi 0 — maskimi. Komentet HTML, <style> dhe <textarea> zëvendësohen me shënues të
bazuar në karaktere kontrolli, që asnjë model i mëvonshëm të mos përputhet brenda tyre.
Kalimi 1 — <script>. Vendimi, sipas radhës:
- tashmë i trajtuar → i paprekur;
- skript i vetë shtojcës → i paprekur;
type="text/plain"ose tip jo-JS (ld+json,importmap,x-template) → i paprekur;- URL-ja kërkohet në
src,data-src,data-rocket-src,data-lazy-src,data-litespeed-src,data-cfsrc— pra mbulohen atributet e shtojcave të performancës; - host në listën e lejimeve → i paprekur; burim first-party që nuk i ngjan një gjurmuesi → i paprekur;
- përputhje me katalogun në formën
host + shteg; një URLdata:osejavascript:dekodohet dhe gjykohet si trup inline; - një rregull i klasifikuar
necessarynuk bllokohet kurrë (Stripe.js, reCAPTCHA, Turnstile, cdnjs…): bllokimi i tij nuk fiton asnjë përputhshmëri dhe e thyen fragmentin që e thërret; - asnjë përputhje →
blocker_unknown_script_policy, parazgjedhjaallow; - përndryshe rishkrim në
type="text/plain"medata-owc-cat,data-owc-vendor,data-owc-srcdhe, nëse tipi origjinal ishte i veçantë (module, për shembull),data-owc-typeqë të mos degradohet skripti i rikthyer.
Trupat inline krahasohen fillimisht me rregullat e katalogut të tipit inline_signature,
pastaj me katërmbëdhjetë firma të ankoruara të koduara në kod: fbq(, _fbq.push,
gtag(, dataLayer.push(, ga('…, _gaq.push, _paq.push, hjid, clarity(,
ttq.load|track|page, snaptr(, twq(, lintrk(, pintrk(. Përjashtim i shprehur:
një gtag('consent', …) i vetëm, domethënë një deklarim i parazgjedhur i Consent Mode pa
shënues tjetër, mbetet i ekzekutueshëm.
Kalimi 2 — <iframe>. Të njëjtat atribute URL-je, plus data-original dhe
data-srcset. First-party ose listë lejimesh → i paprekur. necessary → i paprekur,
përndryshe një formular me captcha do të bëhej i padërgueshëm. Pa përputhje →
blocker_unknown_iframe_policy, parazgjedhja block. Iframe-ja e bllokuar bëhet
src="about:blank" dhe mbështillet në një zëvendësues vizual që përmban një buton
«Prano
Kalimi 3 — <img>, vetëm pikselat e gjurmimit. Rregull e rëndësishme: një rresht
katalogu i vetëm nuk mjafton kurrë për të neutralizuar një imazh. Nëse imazhi përputhet me
katalogun, por kategoria e tij nuk është as analytics as marketing — një CDN imazhesh,
një shërbim gravatarësh, një strehues fontesh — ai lihet i paprekur, përndryshe do të
fshiheshin mediat e faqes në vend të një gjurmuesi. Vetëm heuristika e etiketës mund të
bllokojë: njëmbëdhjetë pika mbledhjeje të njohura (facebook.com/tr,
px.ads.linkedin.com, ct.pinterest.com, bat.bing.com, analytics.twitter.com,
t.co/i/adsct, tr.snapchat.com, analytics.tiktok.com, google-analytics.com/collect,
googleads.g.doubleclick.net, pixel.quantserve.com) ose një imazh i palës së tretë me
përmasa 1×1 piksel. Atëherë src-ja zëvendësohet me një GIF transparent, dhe fshihen
të gjitha atributet që mbartin URL, që një ngarkues me përtaci të mos e rikthejë
origjinalin.
Kalimi 4 — <link>. I kushtëzuar nga blocker_block_resource_hints, parazgjedhja
true. Trajton vetëm hostet që ndodhen tashmë në katalog, kurrë një të panjohur.
- Sugjerimet e burimeve (
preconnect,dns-prefetch,prefetch,prerender,preload,modulepreload) drejt një pale të tretë të katalogueshme fshihen, jo shtyhen: një sugjerim hap një lidhje TCP+TLS dhe zbulon IP-në e gjurmën TLS të vizitorit, dhe nuk ka asgjë për t'u rikthyer më pas. - Një fletë stilesh e klasifikuar
analyticsosemarketingneutralizohet. - Google Fonts dhe hostet e tjerë të tipografisë të klasifikuar
functionalnuk preken kurrë: neutralizimi i tyre jep tekst me font rezervë në gjithë faqen, pa asnjë fitim përputhshmërie.
Kalimi 5 — <object>, <embed>, <source>, <video>, <audio>. Kurrë bllokim si
parazgjedhje: trajtohet vetëm një palë e tretë që ndodhet tashmë në katalog. Atributet
autoplay dhe preload hiqen.
Çfarë numërohet si «first party»
URL-ja e faqes, URL-ja e WordPress-it, URL-ja e përmbajtjes, URL-ja e includes-ave,
ekuivalentët e tyre të rrjetit në multisite, dhe baza e ngarkimeve. www.-ja hiqet gjatë
krahasimit. Çdo shteg që nis me /wp-content/ ose /wp-includes/ është first-party
pavarësisht hostit, për të mbuluar rishkrimet e CDN-ve. Skemat jo-HTTP (data:, blob:,
javascript:) nuk janë kurrë first-party.
Kundërpërjashtim: një URL që përmban gtag, gtm.js, analytics, pixel, fbevents,
hotjar, matomo, piwik ose clarity trajtohet edhe mbi hostin e vetë faqes. Kjo
është ajo që kap një GTM ose një Matomo të vetëstrehuar, si dhe proxy-t first-party.
Runtime-i i zhbllokimit
I shtypur në <head> me prioritet 2. Konfigurimi i tij JSON përmban vetëm emrin e cookie-s
dhe listën e hosteve të mbikëqyrur — asgjë që varet nga vizitori.
- Leximi i gjendjes: cookie-ja
owc_consentdekodohet derisa të stabilizohet, me maksimum tri kalime, sepse cookie-t e shkruara para 1.4.3-shit kodoheshin dy herë. - Mbrojtja e skripteve të injektuara në mënyrë dinamike: setter-i
HTMLScriptElement.prototype.srcdhesetAttributembështillen. Një ngarkues first-party që i caktons.src = 'https://www.googletagmanager.com/gtm.js?id=…'kapet dhe elementi vuloset para ekzekutimit. Lista e mbikëqyrur ka njëzet hoste:googletagmanager.com,google-analytics.com,googleadservices.com,googlesyndication.com,doubleclick.net,connect.facebook.net,static.hotjar.com,script.hotjar.com,clarity.ms,cdn.matomo.cloud,analytics.tiktok.com,snap.licdn.com,sc-static.net,static.ads-twitter.com,bat.bing.com,s.pinimg.com,cdn.segment.com,js.hs-scripts.com,cdn.amplitude.com,cdn.mxpnl.com. Gjithçka që nuk ndodhet aty kalon pa u prekur. Hostet e listës suaj të lejimeve hiqen nga kjo listë para shtypjes. - Riinjektim sipas radhës së dokumentit. Një skript i jashtëm i rikthyer e bllokon radhën
deri te
onloadoseonerror-i i tij, me një vonesë maksimale prej 5 sekondash që një ofrues i paarritshëm të mos bllokojë pjesën tjetër. Atributiasynczbatohet vetëm nëse ishte i pranishëm që në origjinë — pa këtë, një skript i krijuar mecreateElementdo të detyrohej asinkron dhe fragmenti i konfigurimit do të ekzekutohej para bibliotekës së vet. Për një skript inline të rikthyer,document.writeridrejtohet përkohësisht që të mos fshihet dokumenti. - Tërheqja e pëlqimit: nëse një kategori e zbatuar tashmë kalon shprehimisht në
false, runtime-i e ringarkon faqen. Një skript i ekzekutuar nuk mund të shkarkohet (neni 7.3 GDPR). Një kategori që thjesht mungon në ngarkesë nuk është tërheqje. - Një
MutationObservere riskanon kodin e injektuar pas ngarkimit (AJAX, seksione me përtaci). - Një klikim mbi butonin e një embed-i të bllokuar thërret
OWCBanner.acceptCategory(); nëse API-ja e bannerit nuk ekziston, embed-i zhbllokohet lokalisht, pa ruajtur asgjë.
Katalogu i firmave
Tabela {prefix}owc_scripts. Skedari i përfshirë, data/tracker-catalog.json, përmban
175 rreshta që mbulojnë 71 ofrues të veçantë:
| Ndarja | Detaji |
|---|---|
| Sipas objektivit | 110 modele URL-je, 65 emra cookie-sh |
| Sipas tipit | 172 fragmente teksti, 3 shprehje të rregullta |
| Sipas kategorisë | necessary 55, marketing 37, functional 37, analytics 36, social 10 |
Kolonat: pattern, pattern_type (host, regex, inline_signature), match_target
(url ose cookie), name, vendor, category, privacy_policy_url, gcm_signal,
tcf_vendor_id, retention_days.
Dy sjellje që duhen ditur:
- Rreshtat me
match_target = 'cookie'nuk përdoren kurrë nga bllokimi. Ato shërbejnë vetëm për tabelën e cookie-ve të dokumenteve të gjeneruara. Krahasimi i tyre si nënvarg URL-je ishte pikërisht ajo që e thyente JavaScript-in e faqeve. - Një model i tipit
hostqë synon një URL, me më pak se gjashtë karaktere dhe pa pikë, refuzohet: «fr» ose «IDE» do të përputheshin me «frame.js» dhe «provider.js».
Katalogu ruhet në cache-in e objekteve (1 orë) dhe në një transient (12 orë). Një rezultat
bosh nuk ruhet kurrë në cache. Çdo shkrim nis veprimin owc_catalog_updated, i cili i
zbraz këto cache.
Skeda Tracker catalogue lejon shtimin, modifikimin, fshirjen dhe kërkimin e rregullave, me një filtër «vetëm rregullat që nuk mund të aktivizohen»: model bosh ose i padukshëm, shprehje e rregullt që nuk kompilohet ose që bën backtracking katastrofik, model shumë i shkurtër dhe pa pikë për një URL, kategori që nuk ekziston më. Ky diagnostikim bëhet në PHP, sepse vetëm motori PCRE mund të thotë nëse një shprehje kompilohet.
Cilësimet e bllokimit
| Cilësimi | Parazgjedhja | Vlerat |
|---|---|---|
compliance_strict | true | boolean |
blocker_unknown_script_policy | allow | allow, block |
blocker_unknown_iframe_policy | block | allow, block |
blocker_block_resource_hints | true | boolean |
blocker_allowlist | '' | një host për rresht |
Pikat e zgjerimit
// Hoste që nuk bllokohen kurrë, përveç blocker_allowlist.
add_filter( 'owc_blocker_allowlist', function ( array $hosts ) {
$hosts[] = 'cdn.partneri-im.example';
return $hosts;
} );
// Rreshtat e katalogut para validimit.
add_filter( 'owc_scripts_catalog', function ( array $rows ) {
$rows[] = array(
'pattern' => 'tracker.example.com',
'pattern_type' => 'host',
'match_target' => 'url',
'name' => 'Shembull',
'vendor' => 'Shembull SH.A.',
'category' => 'analytics',
);
return $rows;
} );
Metoda publike OWC_Blocker::block_html_fragment( $html ) e zbaton bllokimin mbi një
fragment që nuk ka kaluar nga buffer-i i daljes.
Kufijtë e bllokimit
- Pa
compliance_strict, trajtohen vetëm skriptet e vendosura në radhë nga WordPress-i. - Një skript i panjohur i palës së tretë lejohet si parazgjedhje. Bllokimi real mbështetet te katalogu dhe te firmat inline — pasurojini.
- Mbrojtja e skripteve të injektuara nga JavaScript-i mbulon vetëm njëzet hoste; një gjurmues jashtë listës, i injektuar nga kod first-party, kalon.
- Fletët e stileve të klasifikuara
functional(fonte web) lihen të kalojnë me qëllim. - Një gjurmues i katalogueshëm si
<img>por i klasifikuar ndryshe ngaanalyticsosemarketingnuk neutralizohet. - Mediat (
object,embed,source,video,audio) nuk bllokohen kurrë si parazgjedhje: trajtohet vetëm një palë e tretë që ndodhet tashmë në katalog. - Një dokument mbi 8 MB, një dështim i PCRE-së ose një humbje mbi 50 % e përmbajtjes japin një faqe të shërbyer pa asnjë bllokim, në heshtje.
- Tërheqja e pëlqimit shkakton një ringarkim të plotë të faqes.
Skaneri i gjurmuesve
Skaneri inventarizon çfarë ngarkojnë vërtet faqet tuaja. Ai është i çaktivizuar si parazgjedhje: aktivizojeni në skedën Scanner.
Tri burime zbulimi
Çdo gjetje e ruan prejardhjen e vet dhe informacionin «a mund të veprojë bllokimi mbi të».
1. HTML-ja e shërbyer. Skaneri merr një mostër të URL-ve të vetë faqes suaj dhe lexon
kodin: <script src> dhe <script data-owc-src> — pra shihen edhe skriptet e bllokuara
tashmë —, firmat inline, <iframe>, fletët e jashtme të stileve dhe imazhet URL-ja e të
cilave përmban 1x1, pixel, track, beacon ose impression. Nuk ekzekutohet asnjë
JavaScript: ajo që një menaxher etiketash injekton në runtime është e padukshme për këtë
kalim.
2. Header-at Set-Cookie. Këto janë të vetmet cookie që shfletimi nga serveri mund
t'i provojë, përfshirë cookie-t HttpOnly që një sondë shfletuesi nuk do t'i shohë
kurrë. Ato shënohen si të pabllokueshme: asgjë brenda bllokimit nga ana e klientit nuk
mund ta ndalë një cookie të lëshuar nga serveri. Cookie-t e vetë shtojcës shpërfillen.
3. Sonda e shfletuesit. Shtypet në fundfaqe vetëm për një përdorues të kyçur që ka
manage_options, dhe vetëm nëse skaneri është aktiv. Ajo fotografon document.cookie në
ngarkim, vëzhgon mutacionet e DOM-it — kjo është ajo që kap atë që injekton një menaxher
etiketash —, e pyet document.cookie çdo 5 sekonda për cookie-t e shkruara nga ana e
klientit, dhe i përcjell vëzhgimet e veta çdo 2 sekonda si dhe mbi beforeunload. Përgjigjja
që mbart sondën shënohet si e pacache-ueshme.
Kufi i pranuar në kod: një administrator zakonisht i ka pranuar tashmë të gjitha. Prandaj sonda përshkruan gjendjen pas pëlqimit, jo gjendjen para pëlqimit.
Shfletimi
Radha e URL-ve ndërtohet për të mbuluar shabllone, jo faqe: fillimisht URL-të bazë (ballina, faqja statike e hyrjes, faqja e artikujve, dhe katër faqet e politikave të lidhura), pastaj një ndërthurje rrethore sipas familjes — deri në 30 faqe, 15 artikuj, 5 për çdo lloj përmbajtjeje publike të personalizuar, 3 kategori dhe 3 etiketa. Pa këtë ndërthurje, tridhjetë faqe thuajse identike e hanin gjithë buxhetin dhe shabllonet e WooCommerce-it nuk arriheshin kurrë.
Filtri owc_scanner_urls lejon shtimin e URL-ve, por rezultati rikufizohet sërish te
hosti i faqes: skaneri nuk del kurrë jashtë domenit tuaj.
Çdo kërkesë bëhet me ridrejtime të ndjekura me dorë (maksimum dy kërcime, çdo kërcim
i ritestuar kundrejt hostit të faqes), me përgjigje me tavan 2 MB, me një header
Cache-Control: no-cache, no-store dhe një parametër URL-je unik që të mos lexohet një faqe
cache-i, si dhe me user-agent-in OW-Consent-Scanner/<version>. Një përgjigje jo-HTML
numërohet si e shpërfillur, jo si dështim.
Një sekret anashkalimi dërgohet në header-in X-OWC-Scanner që bllokimi të tërhiqet dhe
të lejojë shikimin e HTML-së së papërpunuar. Ai krahasohet në kohë konstante, dhe header-i
testohet i pari që një vizitor i zakonshëm të mos e nisë as leximin e opsionit.
Buxheti, kyçi, rifillimi
| Kufizimi | Vlera |
|---|---|
| URL për ekzekutim | scanner_max_urls, parazgjedhja 25, kufijtë 1 deri 500 |
| Afati për kërkesë | scanner_timeout, parazgjedhja 8 s, kufijtë 1 deri 60 |
| Buxheti kohor për grup | max_execution_time − 10 s, përndryshe 45 s, i kufizuar mes 5 dhe 60 s |
| Kyçi i ekzekutimit | 15 minuta |
| Jetëgjatësia e radhës | 6 orë |
Nëse buxheti shterohet, planifikohet një rifillim një minutë më vonë dhe shfletimi vazhdon aty ku ndaloi. Një nisje e dytë ndërsa një shfletim është në punë përgjigjet «një skanim është tashmë në vazhdim». Ndërprerje e shkurtër: nëse tri kërkesa dështojnë pa u lexuar asnjë faqe, shfletimi ndalon në vend që ta harxhojë afatin e vet mbi njëzet e dy URL të tjera — ky është rasti tipik i një faqeje të cilës i është bllokuar loopback-u HTTP.
Firmat inline të njohura
Njëzet e tri gjilpëra, të grupuara në njëzet e një etiketa: gtag('config', gtag('event',
gtag('js', gtm.start, ga('create', ga('send', fbq('init', fbq('track',
_paq.push, (h.hj=h.hj, clarity('init', clarity.ms/tag, mixpanel.init,
amplitude.init, amplitude.getInstance, _linkedin_partner_id, snaptr('init',
ttq.load, pintrk("load", pintrk('load', rdt('init', criteo_q.push, _etmc.push.
Çelësi i heqjes së dublikatave është firma, kurrë një hash i trupit: një fragment i vërtetë gtag ose Pixel përmban vlera të veçanta për faqen, çka do të jepte një rresht për çdo faqe.
Cikli i reagimit: gjetje → katalog → bllokim
Kjo është pika që e bën skanerin të dobishëm. Klasifikimi i një gjurmuesi shkruan një rregull në katalogun e bllokimit. Një klikim mbi kategorinë e një gjetjeje bën tri gjëra: shkruan kategorinë mbi rresht, e mban mend vendimin tuaj manual, dhe krijon rregullin përkatës. Në fund të çdo shfletimi të plotë, i njëjti veprim kryhet në masë për gjithçka që katalogu nuk di ta klasifikojë tashmë.
Rregullat e konvertimit:
- një gjetje e tipit
cookiebëhet rregullmatch_target = cookiembi emrin e cookie-s; - një gjetje e tipit
inline_scriptshkruan rregull vetëm nëse gjendet gjilpëra origjinale. Pa të nuk shkruhet asnjë rregull: një rregull i ndërtuar nisur nga etiketa «Google gtag (config)» do të ishte e vdekur përgjithmonë dhe do të përputhej me emrin e gjetjes, çka do ta bënte të dukej «e mbuluar» përgjithmonë; - përndryshe, një rregull
hostmbi domenin, i refuzuar nëse domeni është bosh.
Vendimet tuaja manuale ruhen veçmas (maksimum 500) dhe rizbatohen në çdo vëzhgim të ri, sepse flamuri «i konfirmuar» do të thotë edhe «një rregull katalogu u përputh» dhe prandaj nuk mund ta mbajë vetëm informacionin «administratori vendosi». Riklasifikimi si «i pakategorizuar» e fshin zërin: është kthim pas i vërtetë.
Katalogu krahasohet së pari me modelin më të gjatë, që një rregull e gjerë
(google-analytics.com) të mos e mbishkruajë rregullin më të saktë që keni shkruar ju
(www.google-analytics.com).
Planifikimi, alarmet, ruajtja
scanner_frequency pranon hourly, twicedaily, daily dhe weekly — por administrimi
propozon vetëm përsëritjet që instalimi juaj i njeh vërtet. Parazgjedhja: weekly.
Çaktivizimi i skanerit i heq nga plani të dyja ngjarjet.
Dy e-maile të veçanta, kurrë të dyja njëherësh:
- Gjurmues të pakategorizuar — dërgohet vetëm për identifikues vërtet të rinj, me një kujtesë me tavan 500 zëra.
- «Shfletimi nuk mundi ta lexojë këtë faqe» — i kufizuar në një mesazh në javë për çdo firmë gabimi. Ky është modaliteti më i rëndë i dështimit, sepse një shfletim që nuk lexon asgjë nuk prodhon asnjë gjetje, pra as ndonjë alarm të llojit të parë.
Marrësi: scanner_alert_email, përndryshe adresa e administrimit të faqes.
Ruajtja: 90 ditë. Gjetjet e parishikuara prej 90 ditësh fshihen, sapo të jetë lexuar të paktën një faqe — jo vetëm kur mbaron një shfletim.
Paneli i mbulimit
Kjo është pjesa më e rëndësishme e skedës Scanner, dhe ajo ushqen edhe kutinë e paralajmërimit të dokumenteve të gjeneruara. Ajo u përgjigjet gjithnjë këtyre pyetjeve:
- a është nisur ndonjëherë një shfletim?
- a mbaroi i fundit, apo u ndërpre nga buxheti i vet kohor?
- sa faqe u morën vërtet (jo sa u hoqën nga radha)?
- sa nuk u morën dot, dhe cili ishte gabimi i parë?
- a ka raportuar ndonjëherë ndonjë shfletues diçka, apo nuk është vëzhguar kurrë asnjë JavaScript?
- cila është dritarja përtej së cilës zhduket një gjurmues i parishikuar?
Një shfletim që nuk arriti asnjë faqe paraqitet si dështim, jo si rezultat i pastër. Është ky panel që duhet lexuar përpara se të publikoni një politikë cookie-sh të ndërtuar mbi këto gjetje.
Skeda Scanner
Tri karta (gjurmues të zbuluar, të pakategorizuar, shfletimi i fundit dhe ekzekutimi i
radhës), paneli i mbulimit, një buton «nis një skanim tani», formulari i planifikimit, e
pastaj lista e gjetjeve: filtra sipas kategorisë, kërkim me tekst, filtër sipas llojit të
elementit (script, inline_script, iframe, stylesheet, pixel, cookie, link,
preconnect), filtër sipas gjendjes, eksport CSV, faqosje nga 25. Klasifikim një nga një
ose në masë — përzgjedhësi i masës ka një element të parë bosh të çaktivizuar, që një dërgim
i pakujdesshëm të mos bëhet një çklasifikim i përgjithshëm.
Cilësimet e skanerit
| Cilësimi | Parazgjedhja | Kufijtë |
|---|---|---|
scanner_enabled | false | boolean |
scanner_frequency | weekly | hourly, twicedaily, daily, weekly |
scanner_max_urls | 25 | 1 deri 500 |
scanner_timeout | 8 | 1 deri 60 |
scanner_probe_mode | admins | admins, off |
scanner_alert_email | '' | adresë e-maili |
Për dijeni:
scanner_probe_modenuk përdoret në këtë version. Kodi e sinjalizon shprehimisht — kushti i shtypjes së sondës nuk e lexon më këtë cilësim dhe mbështetet vetëm tescanner_enabled. Ruajtja eoffe ruan vlerën pa e çaktivizuar sondën. Për ta ndalur vërtet sondën, çaktivizoni skanerin.
Kufijtë e skanerit
- Shfletimi nga serveri nuk ekzekuton asnjë JavaScript. Pa sondën, ajo që injekton një menaxher etiketash mungon në inventar.
- Sonda është e rezervuar për administratorët e kyçur dhe nuk ekziston asnjë modalitet që ta ekzekutojë për një vizitor të zakonshëm: kjo do të kërkonte informimin e vet paraprak.
- Një cookie e vendosur me header-in
Set-Cookiezbulohet, por është e pabllokueshme. - Shfletimi nuk del kurrë jashtë domenit dhe ka tavan 25 URL si parazgjedhje: një faqe e madhe nuk mbulohet kurrë e plotë.
- Në një host ku loopback-u HTTP është i bllokuar (autentikim HTTP i preprodhimit, mur zjarri), shfletimi nuk lexon asgjë.
- Një gjetje e parishikuar prej 90 ditësh zhduket, dhe pra zhduket edhe nga politika e cookie-ve.
- Skaneri varet nga WP-Cron: në një faqe me
DISABLE_WP_CRONdhe pa cron sistemi, shfletimi i planifikuar nuk niset.
Gjeneruesi i dokumenteve ligjore
Katër dokumentet
| Lloji | Përmbajtja | Gjuhët e disponueshme |
|---|---|---|
cookie_policy | Politika e cookie-ve | frëngjisht, anglisht, portugalisht |
privacy_policy | Politika e privatësisë | frëngjisht, anglisht, portugalisht |
legal_notice | Njoftimi ligjor | vetëm frëngjisht |
terms | Kushtet e përgjithshme | vetëm frëngjisht |
Çdo dokument i gjeneruar është një faqe WordPress, e versionuar me metatë dhëna:
_owc_policy_type, _owc_policy_version (rritet me çdo gjenerim), _owc_policy_hash
(hash SHA-256 i HTML-së), _owc_policy_generated_at, _owc_policy_profile,
_owc_policy_lang, _owc_policy_manual_edit.
Pas gjenerimit, lidhja riinjektohet në cilësimet përkatëse (link_cookie_policy,
link_privacy_policy, link_legal_notice, link_terms), dhe publikimi i një politike
privatësie e përditëson faqen e politikës të deklaruar në WordPress.
Dy kyçe para publikimit
Kyçi 1 — fushat e detyrueshme. Gjenerimi refuzohet bashkë me listën e çelësave bosh, në vend që të publikohen klauzola me vrima.
| Dokumenti | Fushat e kërkuara |
|---|---|
| Të gjitha | legal_company_name, legal_company_email |
| Përveç politikës së cookie-ve | + legal_company_address, legal_country |
| Njoftimi ligjor | + legal_company_phone, legal_publication_director, legal_host_name, legal_host_address, legal_host_phone |
| Njoftimi ligjor, shteti FR / BE / LU | + legal_company_legal_form, legal_company_reg_number |
Kyçi 2 — gjuha. Gjeneruesi refuzon të publikojë një dokument të shkruar në një gjuhë që juridiksioni nuk e përdor. Në parapamje, dokumenti del me një shirit të kuq paralajmërimi; në publikim, është refuzim i prerë. Në skedën Policies, butoni i gjenerimit fshihet kur nuk ekziston asnjë shabllon për llojin dhe profilin aktiv, në vend që të shfaqet e të dështojë sistematikisht.
Zgjidhja e gjuhës
| Profili | Gjuha e dokumentit |
|---|---|
quebec | frëngjisht |
lgpd | portugalisht |
gdpr me legal_country ∈ {FR, BE, LU} | frëngjisht |
| Gjithë pjesa tjetër | anglisht |
Paralajmërimi i detyrueshëm
Për sa kohë policy_disclaimer është aktiv — dhe ai është aktiv si parazgjedhje — çdo
dokument mbyllet me një bllok që thotë se ky është një model i gjeneruar automatikisht, se
duhet rishikuar nga një profesionist i kualifikuar para publikimit, dhe që mbart datën e
gjenerimit e versionin e shtojcës. Çaktivizojeni vetëm me vetëdije të plotë.
Tabela e gjurmuesve — rregullat e ndershmërisë
Tabela e publikuar në politikën e cookie-ve vjen nga tabela e skanerit tuaj, jo nga një bazë e palës së tretë. Pesë rregulla e qeverisin atë që shfaq.
- Dritarja e freskisë: publikohen vetëm gjetjet e rishikuara brenda 90 ditëve të fundit. Nëse kolona e vëzhgimit të fundit nuk ekziston ende sepse një migrim nuk ka kaluar, dritarja shpërfillet në vend që të publikohet «asnjë gjurmues» për një faqe që ka të tillë — nën-zbulimi është drejtimi i vetëm ku një dokument ligjor nuk duhet të dështojë kurrë.
- Kuti paralajmërimi në krye të tabelës, e nxjerrë nga paneli i mbulimit të skanerit: shfletim asnjëherë i nisur, asnjë faqe e lexuar, shfletim i ndërprerë, N URL të dështuara, asnjë vëzhgim me JavaScript aktiv, dritare prej N ditësh. Një shfletim i paplotë deklarohet, nuk publikohet si inventar i përfunduar.
- Gjurmuesit e paklasifikuar nuk fshihen: ata kanë seksionin e vet. Janë ata që askush nuk i ka shqyrtuar.
- Një cookie e vëzhguar në një header
Set-Cookieshënohet me shenjë dalluese, bashkë me një shënim që shpjegon se ajo vendoset nga serveri dhe se asnjë bllokim nga ana e klientit nuk mund ta ndalë. Prandaj ajo nuk duhet paraqitur si e kushtëzuar nga pëlqimi, dhe klauzola që pohon se gjurmuesit e paklasifikuar vendosen vetëm pas pëlqimit mbart përjashtimin përkatës. - Emri i kontrolluesit dhe lidhja drejt politikës së tij vijnë nga katalogu, vetëm për rregullat që synojnë një URL. Modelet me emër cookie-je përjashtohen: në një dokument ligjor nuk pohohet pa provë se kush i përpunon të dhënat.
Cookie-t e faqes dhe kohëzgjatjet e publikuara
Seksioni «cookie-t e vendosura nga kjo faqe» rendit cookie-t e vetë shtojcës: owc_consent
(kohëzgjatja nxirret nga cilësimi i rinovimit), euconsent-v2 nëse TCF-ja është aktive,
owc_geo nëse zbulimi rajonal është aktiv, owc_gpc (kohëzgjatje sesioni),
owc_gpc_notice (5 minuta), plus cookie-t e kyçjes dhe të cilësimeve të WordPress-it.
Tabela e afateve të ruajtjes i merr shifrat nga cilësimet reale —
ledger_retention_days, retention_form_data_days, retention_dsar_days dhe kohëzgjatja e
rinovimit të pëlqimit. Nuk publikohet asnjë vlerë dekorative. Kohëzgjatja e cookie-s së
pëlqimit nxirret nga i njëjti llogaritje si vetë cookie-ja, çka garanton se një cilësim
prej 0 muajsh publikon vërtet «13 muaj» dhe jo «kurrë».
Zbulimi i llojit të veprimtarisë (kushtet e përgjithshme)
Kushtet e përgjithshme kanë 21 seksione, me kalim shitës/ofrues shërbimi, produkte/shërbime, ofertë/porosi, dhe klauzola specifike sipas llojit të veprimtarisë.
legal_business_type (auto, vitrine, rental, ecommerce, services, saas,
content) është burimi i së vërtetës. Kur ka vlerën auto, një heuristikë e shqyrton
faqen — prania e WooCommerce-it, regjistrimi i hapur, shtojcat e abonimeve, faqja e çmimeve,
faqet e shërbimeve, e pastaj dendësia e fjalëve kyçe mbi pesëdhjetë përmbajtjet e fundit të
publikuara — por verdikti i saj nuk shtypet kurrë në një dokument të publikuar: ai
shërben vetëm për të zgjedhur klauzolat opsionale.
Citimet e neneve franceze futen vetëm nëse legal_country është FR. Belgjika ka citimet e
veta (CDE neni VI.45 §1, neni VI.47, Shërbimi i ndërmjetësimit për konsumatorin); Luksemburgu
dhe Kebeku marrin një formulim neutral. Të citoje një tekst të paverifikuar do të ishte
defekti, jo zgjidhja.
Sjellje të tjera
- Data e dokumentit formatohet sipas lokales së dokumentit. Nëse paketa përkatëse e
përkthimit nuk është e instaluar, formati kalon në
dd/mm/vvvv: një dokument frëngjisht nuk mund të hapet me «4 September 2026». - Redaktim manual i zbuluar: nëse përmbajtja e ruajtur nuk i përgjigjet më hash-it të vet, regjistrohet një revizion para mbishkrimit dhe ekrani shfaq shenjën «modifikimet manuale u zëvendësuan», me një lidhje drejt revizioneve.
- Gjeneruesi nuk zbret kurrë në gradë: një faqe e publikuar mbetet e publikuar edhe nëse kutiza «publiko» çshënohet, dhe një titull apo permalink që keni riemërtuar i mbijeton një rigjenerimi.
- Injektim në menynë e fundfaqes:
auto_footer_menu_inject, i çaktivizuar si parazgjedhje. Shtojca nuk e ndryshon faqen tuaj publike pa kërkesë të shprehur. Vendet e njohura kur e aktivizoni:footer,footer-menu,footer_menu,footer-1,footer_1,secondary,legal.
Pikat e zgjerimit
// Trupi i papërpunuar i shabllonit, me {{variablat}} ende në vend.
add_filter( 'owc_policy_template', function ( $html, $type, $profile ) {
return $html;
}, 10, 3 );
// Variablat e injektuara në shabllon.
add_filter( 'owc_policy_vars', function ( array $vars, $type, $profile ) {
return $vars;
}, 10, 3 );
// HTML-ja përfundimtare, me variablat e zëvendësuara.
add_filter( 'owc_policy_html', function ( $html, array $vars ) {
return $html;
}, 10, 2 );
Dhënia e trupit tuaj përmes owc_policy_template e çaktivizon kyçin e gjuhës: një faqe
që jep tekstin e vet e merr përsipër gjuhën e tij. Kjo është rruga zyrtare për të publikuar
një njoftim ligjor jofrëngjisht.
Katër blloqe të paragjeneruara janë të disponueshme si variabla të rezervuara:
{{__trackers_table__}}, {{__categories_list__}}, {{__retention_table__}},
{{__jurisdictional_rights__}}. Të gjitha variablat janë tashmë të shpëtuara në
kontekstin e përdorimit të tyre. Tri metoda publike janë të ripërdorshme nga një shabllon i
palës së tretë: OWC_Policies::build_cookie_table(), build_data_retention_table() dhe
render_first_party_cookies().
Rrugët REST
| Metoda | Shtegu | Parametrat | Qasja |
|---|---|---|---|
POST | /owc/v1/policies/generate | type (i detyrueshëm), publish (boolean, parazgjedhja false) | manage_options |
GET | /owc/v1/policies/preview | type (i detyrueshëm) | manage_options |
HTML-ja e parapamjes kalon nga wp_kses_post() para se të kthehet.
Kufijtë e gjeneruesit
- Këto janë modele, jo këshillë juridike. Jepini për rishikim.
- Njoftimi ligjor dhe kushtet e përgjithshme ekzistojnë vetëm në frëngjisht. Çdo juridiksion tjetër përplaset me kyçin e gjuhës, veç nëse jepni trupin tuaj.
- Vetëm tri gjuhë: frëngjisht, anglisht, portugalisht.
- Katër shtete të ZEE-së kanë autoritet të emërtuar; gjetkë, një formulim i përgjithshëm.
- Tabela e gjurmuesve vlen aq sa vlen shfletimi juaj — dhe dokumenti e thotë këtë.
- Klasa e gjeneruesit peshon rreth 440 KB shabllonesh juridike: ajo ngarkohet me përtaci, vetëm kur kërkohet vërtet njëra nga tri pikat e hyrjes.
Regjistri i pëlqimeve
Regjistri është përgjigjja ndaj nenit 7.1 të GDPR-së: mundësia për të demonstruar se personi ka dhënë pëlqimin. Ai është i aktivizuar si parazgjedhje.
Tabela
{prefix}owc_ledger, të gjitha datat në UTC:
| Kolona | Tipi | Përmbajtja |
|---|---|---|
id | bigint | Çelësi primar |
created_at | datetime | Vula kohore UTC |
visitor_token | char(32) | Token pseudonim i shfletuesit, 32 karaktere heksadecimale |
event | varchar(20) | accept_all, reject_all, save_preferences, withdraw, auto, gpc_opt_out |
categories | varchar(255) | Lista e kategorive të dhëna |
profile | varchar(20) | Profili i përputhshmërisë në fuqi në çastin e veprimit |
source | varchar(60) | banner, preferences, footer_link, api, auto |
ip_pseudonymous | varchar(45) | IP e cunguar |
ua_hash | char(64) | Hash i kripëzuar i user-agent-it |
page_url | varchar(500) | Faqja ku ndodhi veprimi |
prev_hash | varchar(128) | Hash-i i rreshtit të mëparshëm |
row_hash | varchar(128) | Hash-i i këtij rreshti |
policies_hash | char(64) | Hash-i i dokumenteve në fuqi |
banner_revision | varchar(40) | Hash-i i bannerit që u shfaq vërtet |
plugin_version | varchar(20) | Versioni i shtojcës në çastin e shkrimit |
Tri kolonat e fundit lejojnë të rindërtohet çfarë pa vizitori, jo vetëm çfarë shënoi.
Zinxhiri
Çdo rresht nënshkruhet me HMAC mbi një serializim kanonik me prefiks gjatësie të përmbajtjes së vet dhe të hash-it të rreshtit të mëparshëm. Gjeneza është një varg prej 64 zerosh. Shkrimi bëhet brenda një transaksioni, me një kyç rreshti mbi zërin e fundit: është ky kyç ai që i serializon vërtet shkrimet e njëkohshme dhe e pengon zinxhirin të degëzohet. Një kyç me emër i MySQL-së merret si mbrojtje e dytë, sa të mundet: nëse refuzohet, shtimi vazhdon dhe niset një veprim që ju të mund ta gjurmoni.
Vlerat cungohen para nënshkrimit, që vlera e nënshkruar të jetë saktësisht vlera e ruajtur.
Ndershmëria mbi pafalsifikueshmërinë
Shtojca e përcakton vetë prejardhjen e çelësit të vet të nënshkrimit:
| Prejardhja | Kushti | Verdikti |
|---|---|---|
constant | OWC_LEDGER_KEY është e përcaktuar | E pafalsifikueshme |
wp-config | AUTH_KEY dhe AUTH_SALT janë të përcaktuara, jo bosh, të ndryshme nga njëra-tjetra dhe pa frazën e parazgjedhur | E pafalsifikueshme |
database | Përndryshe | Jo e pafalsifikueshme |
Në rastin e tretë, WordPress-i i ruan salt-et në bazë: kushdo që ka qasje në bazë mund ta rinënshkruajë zinxhirin. Shtojca e raporton këtë në rezultatin e verifikimit dhe shfaq një njoftim administrimi që e thotë me fjalë të plota. Ruhet një hash i pakthyeshëm i çelësit, çka lejon të dallohet një rotacion salt-esh nga një rishkrim.
Kjo është arsyeja pse seksioni Instalimi rekomandon përcaktimin e
OWC_LEDGER_KEY.
Verifikimi
Butoni «Verify the chain now» i skedës Audit ledger — ose rruga
GET /owc/v1/ledger/verify — e përshkon gjithë zinxhirin në grupe nga 500 rreshta.
Njihen tri skema nënshkrimi: skema kanonike aktuale, një skemë historike e mëparshme, dhe një skemë pa çelës që vjen nga versionet e para të para. Kjo e fundit prodhon një hash që mund ta rillogarisë kushdo që ka bazën: ajo nuk konsiderohet kurrë e vlefshme, numërohet veçmas dhe sinjalizohet si këputje. Një hash pa çelës nuk është provë.
Këputjet e raportuara: hash_mismatch, chain_break, bad_genesis, unkeyed_rows,
table_emptied, tail_truncated, head_mismatch, count_mismatch.
Rezultati mbart ndër të tjera: ok, total, checked, table_total, broken_at,
breaks, break_count, partial, legacy_rows, unverifiable_rows, anchor,
anchor_ok, key_source, tamper_evident, key_rotated.
Spiranca e kokës
Një spirancë ruhet jashtë tabelës: identifikues, hash, numër rreshtash, vulë kohore. Pa të, fshirja e rreshtave më të fundit ose zbrazja e tabelës nuk do të linte asnjë gjurmë. Një veprim niset në çdo zhvendosje të spirancës, dhe kodi ju fton shprehimisht ta replikoni atë jashtë bazës — skedar, syslog, endpoint i jashtëm — që një rishkrim global të jetë i zbulueshëm.
Shtojca refuzon të mbishkruajë një spirancë ekzistuese dhe sinjalizon ndershmërisht se një spirancë e nxjerrë nga vetë tabela i bën të zbulueshme vetëm cungimet e mëpasme.
Ruajtja
ledger_retention_days, parazgjedhja 1825 ditë (5 vjet), kufijtë 0 deri 3650. Vlera 0
do të thotë ruajtje e pakufizuar.
Pastrimi punon mbi cron-in e vet ditor dhe heq vetëm një prefiks të vijueshëm: kurrë një vrimë në mes të zinxhirit. Hash-i i rreshtit të fundit të fshirë mbahet mend që pjesa tjetër të mbetet e verifikueshme. Tavani për ekzekutim: 20 000 rreshta (40 grupe nga 500). Prandaj një vonesë shumë e madhe pastrimi zgjidhet gjatë disa ditësh.
Minimizimi i të dhënave
- Adresa IP: IPv4 me oktetin e fundit të vënë në zero (ruhet /24-shi), IPv6 e cunguar në /48 me 80 bitët e mbetur në zero. Maskimi bëhet mbi formën binare; një adresë IPv6 që hartëzon një IPv4 trajtohet si IPv4.
- User-agent: ruhet vetëm një hash i kripëzuar, kurrë vargu.
page_url: validohet kundrejt hosteve të faqes. Thirrësi ka fjalën e fundit — nëse ai e jep vlerën, qoftë edhe bosh, ajo është përgjigjja;Referer-i konsultohet vetëm nëse ai nuk ka thënë asgjë fare, dhe validohet në të njëjtën mënyrë.- Tokeni i vizitorit: 32 karaktere heksadecimale nga një gjenerues kriptografik, pa asnjë lidhje me një identitet.
Algoritmi
ledger_hash_algo pranon sha256 (parazgjedhje) dhe sha3-256, të prera me algoritmet që
PHP-ja juaj mbështet vërtet. Cilësimi shfaqet por nuk modifikohet në administrim:
ndryshimi i algoritmit do të bënte që të dështonte verifikimi i të gjithë rreshtave
ekzistues. Kolonat janë dimensionuar më gjerë, por zgjedhja reale kufizohet te këto dy
algoritme.
Skeda Audit ledger
Listë e faqosur nga 25: identifikues, datë lokale dhe vulë kohore UTC e papërpunuar, token vizitori, ngjarje, kategori, profil, IP e pseudonimizuar, dhe hallka e zinxhirit (hash-i i mëparshëm → hash-i aktual, të cunguar në shfaqje, vlera e plotë në këshillën ndihmëse).
Filtrat: token vizitori (32 heksadecimale), ngjarje, profil, interval datash — të shkruara në zonën kohore të faqes dhe të krahasuara me vulat kohore UTC që ruhen vërtet.
Eksporte CSV dhe JSON. JSON-i mbart një zarf (formati, algoritmi, prejardhja e çelësit) që një autoritet të mund ta riverifikojë fragmentin pa e pasur pjesën tjetër të zinxhirit. Të gjitha qelizat CSV neutralizohen kundër injektimit të formulave të fletëllogaritësve.
Konsultimi i regjistrit përmes API-së
GET /owc/v1/ledger pranon page, per_page (1 deri 200, parazgjedhja 50),
visitor_token, from dhe to. Tre të fundit lejojnë t'i përgjigjeni një kërkese qasjeje
(neni 15) pa përshkuar gjithë zinxhirin. Kufijtë lexohen në UTC, dhe një datë në formatin
VVVV-MM-DD zgjerohet në gjithë ditën. Filtrat e zbatuar vërtet kthehen brenda
përgjigjes: një filtër i refuzuar nga kontrollet nuk duhet lexuar si «ja gjithë regjistri».
Çfarë ndodh kur regjistri refuzon një shkrim
Kjo është sjellja më e rëndësishme e gjithë shtojcës. Nëse regjistri është aktiv dhe shkrimi i rreshtit dështon, cookie-ja e pëlqimit anulohet dhe përgjigjja është një 503. Nuk ruhet asgjë, nuk lirohet asnjë gjurmues.
Arsyetimi është i drejtpërdrejtë: një pëlqim që nuk mund të provohet nuk duhet pretenduar. Shihni Zgjidhja e problemeve për hapat që duhen ndjekur.
Pikat e zgjerimit
add_action( 'owc_consent_updated', function ( $categories, $event, $source ) {}, 10, 3 );
add_action( 'owc_consent_cookie_not_sent', function ( $cookie, $event ) {}, 10, 2 );
add_action( 'owc_ledger_lock_failed', function ( $event, $token ) {}, 10, 2 );
add_action( 'owc_ledger_write_failed', function ( $error, $event, $token ) {}, 10, 3 );
add_action( 'owc_ledger_anchor', function ( array $anchor ) {} );
add_action( 'owc_ledger_pruned', function ( $deleted, $days ) {}, 10, 2 );
owc_ledger_anchor është hook-u që duhet përdorur për ta replikuar spirancën jashtë bazës.
Kufijtë e regjistrit
- Pafalsifikueshmëria është e kushtëzuar, dhe shtojca e thotë vetë këtë.
- Rreshtat para 1.2.0-shit mbartin një hash pa çelës: ata nuk rinënshkruhen kurrë — rinënshkrimi do t'i lejonte një sulmuesi të bënte të rinënshkruhej një histori e falsifikuar — dhe e pengojnë verdiktin «zinxhir i paprekur» për sa kohë ekzistojnë.
- Ruajtja ka tavan 20 000 rreshta për ekzekutim ditor.
- Regjistri nuk fshihet nga fshirësi i të dhënave personale i WordPress-it: është një zinxhir hash-esh, heqja e tij do të shkatërronte provën për të cilën ai ekziston, dhe ai përmban vetëm një token pseudonim dhe një IP të cunguar. Një mesazh ia shpjegon këtë zgjedhje subjektit të të dhënave.
Portali i të drejtave (DSAR)
Portali i lejon një personi t'i ushtrojë të drejtat e veta nga një faqe e sajtit tuaj. Ai është i aktivizuar si parazgjedhje, por shfaqet vetëm aty ku e vendosni shortcode-in.
Formulari
[owc_dsar_form]
Atributet:
| Atributi | Parazgjedhja | Roli |
|---|---|---|
types | access,rectification,erasure,portability,restrict,object,optout | Llojet e propozuara, të ndara me presje |
title | «Ushtro të drejtat e mia mbi të dhënat e mia personale» | Titulli i bllokut |
submit_label | «Dërgo kërkesën time» | Etiketa e butonit |
Nëse dsar_enabled është i çaktivizuar, shortcode-i shfaq «portali është i çaktivizuar»
dhe rruga REST përgjigjet me 404: çaktivizimi është vërtet nga ana e serverit.
Lista që kërkoni pritet me listën që pranon serveri: një opsion i refuzuar nga endpoint-i nuk i propozohet kurrë vizitorit.
Tetë llojet e kërkesave
access, rectification, erasure, portability, restrict, object, optout,
withdraw.
withdraw është hequr me qëllim nga ajo që propozon formulari. Tërheqja e pëlqimit për
cookie-t është e menjëhershme brenda panelit të preferencave; kalimi i saj nëpër një
procedurë të shkruar prej 30 ditësh do ta bënte tërheqjen më të vështirë se pëlqimin
(neni 7.3 GDPR). Një lidhje nën formular e hap drejtpërdrejt panelin e preferencave për këtë
rast.
Filtri owc_dsar_types është burimi i vetëm i së vërtetës: prej tij rrjedh lista e lejimeve
e endpoint-it.
Cikli i plotë
1. Dërgimi. POST /owc/v1/dsar. Tri mbrojtje serveri, sipas kësaj radhe:
- Kurth për robotë: një fushë e fshehur e mbushur sjell një refuzim 400 me mesazhin e përgjithshëm të një dërgimi të keqformuar — një robot nuk mëson asgjë për arsyen e refuzimit të vet. Nga ana e shfletuesit, formulari madje e shfaq mesazhin e suksesit pa dërguar asgjë.
- Vetëdeklarim (neni 12.6): kutiza «konfirmoj se po ushtroj një të drejtë mbi TË DHËNAT E MIA personale» duhet të jetë e shënuar, dhe kjo kontrollohet nga ana e serverit, jo vetëm në shfletues. Ajo regjistrohet bashkë me kërkesën.
- Afat minimal prej 3 sekondash mes shfaqjes së formularit dhe dërgimit, nga ana e klientit.
Kufijtë e shpeshtësisë: 3 në orë për çdo adresë IP, 3 në ditë për çdo adresë e-maili të synuar — adresën e zgjedh sulmuesi, prandaj është ajo që duhet kufizuar — dhe 30 në orë për gjithë faqen.
Rreshti futet me statusin pending, me një token prej 64 karakteresh nga i cili ruhet
vetëm hash-i SHA-256, me një datë skadimi të tokenit dhe një afat përgjigjeje.
Identifikuesi nuk kthehet: pa numërim, pa rrjedhje volumetrie. Përgjigjja është
{ok, mail_sent, message}, dhe mail_sent pasqyron dështimin real të dërgimit.
DPO-ja nuk njoftohet në këtë fazë. Përndryshe një thirrës anonim do të bënte të niseshin dy e-maile për çdo dërgim nga domeni juaj.
2. E-maili i verifikimit. Lidhja tregon drejt ballinës suaj me tokenin të hapur si
parametër. Vlefshmëria: dsar_token_ttl_days, parazgjedhja 7 ditë, kufijtë 1 deri 90.
E-maili mbart një header Reply-To por kurrë një From të rishkruar — rishkrimi i
zarfit është ajo që e thyen SPF-në. Adresa e përgjigjes është dsar_email, përndryshe
legal_dpo_email; kurrë adresa e administrimit të faqes, e cila nuk duhet publikuar.
3. Konfirmimi i identitetit. Lidhja hap një faqe që nuk ekzekuton asgjë: konfirmimi bëhet me një POST të mbrojtur nga një nonce. Kjo është ajo që e pengon një skaner lidhjesh poste (Safe Links, URL Defense, parapamje inbox-i) të konfirmojë një identitet në vend të personit.
Faqja është një dokument HTML i pavarur, i shërbyer jashtë temës, me noindex, nofollow dhe
me header të pacache-ueshëm. Përpjekjet kufizohen në 30 në orë për çdo IP. Përgjigjet janë të
dalluara: 404 për një lidhje të panjohur, 200 për një lidhje tashmë të konfirmuar, 410 për
një lidhje të skaduar, 403 për një nonce të vjetruar, 500 për një dështim shkrimi, 200 për
një konfirmim.
4. Çfarë nis konfirmimi.
- Statusi kalon në
verified. - Afati rillogaritet duke nisur nga verifikimi. Neni 12.3: afati rrjedh që kur kërkesa është e plotë, jo që nga një dërgim që s'u konfirmua kurrë.
- Tokeni digjet. Hash-i i tij ruhet me qëllim, që një person që e rihap lidhjen e vet të lexojë «tashmë i konfirmuar» në vend të një 404-e që i kërkon të nisë gjithçka nga fillimi. Përdorimi një herë e vetme garantohet nga kontrolli i statusit.
- Regjistrohen: data e konfirmimit, IP-ja e cunguar, tokeni pseudonim i shfletuesit — ura e vetme e mundshme mes regjistrit të pëlqimeve dhe kërkesës — dhe identifikuesi i kërkesës WordPress të lidhur me të.
- Hapet një kërkesë vendase e WordPress-it me identitetin tashmë të provuar, pra
drejtpërdrejt brenda radhës suaj Mjetet → Eksporto / Fshi të dhënat personale. Kjo bën
që ekzekutimi të mbulojë të gjitha shtojcat e faqes, jo vetëm OW Consent. Përputhja:
accessdheportability→ eksport;erasure→ fshirje; llojet e tjera nuk hapin kërkesë vendase. - Kontrolluesi njoftohet te
dsar_emaildhedsar_notify_email, me rezervë te adresa e administrimit nëse asnjëra nuk është e vlefshme.
5. Ekzekutimi. Një panel mbi skedën DSAR requests rendit 20 kërkesat e verifikuara, të renditura sipas afatit, me numrin e ditëve të mbetura ose të vonesës.
| Veprimi | Sjellja |
|---|---|
| Shkarko të dhënat (JSON) | Refuzim 409 nëse identiteti nuk është konfirmuar kurrë. Skedari emërtohet dsar-<id>-<VVVVMMDD>.json |
| Fshi të dhënat | Ofrohet vetëm për një kërkesë të tipit erasure, dhe vetëm pas konfirmimit të identitetit. Kërkesa mbyllet përpara fshirjes, përndryshe teksti i lirë i vetë kërkesës do t'i mbijetonte ekzekutimit të saj |
| +2 muaj | Zgjatja e nenit 12.3, vetëm një herë, me një arsye deri në 500 karaktere. Afati shtyhet me 60 ditë, kujtesat riarmatosen, dhe subjekti i të dhënave merr një e-mail me afatin e ri dhe arsyet |
| Mbyll | Statusi resolved ose rejected, shënim i detyrueshëm. Nuk mund të rishkruhet një kërkesë tashmë e mbyllur, dhe nuk mund të shënohet «e përmbushur» mbi një identitet që s'u konfirmua kurrë |
| Ridërgo lidhjen | Lëshon një token të ri, çka e zhvlerëson të mëparshmin |
Pesë statuse: pending, verified, resolved, rejected, expired.
Ekrani nuk e ngarkon kurrë tokenin as hash-in e tij, dhe nuk e shfaq emrin e kërkuesit.
6. Mbikëqyrja e afatit. Mbi cron-in ditor: deri në 200 kërkesa të verifikuara përshkohen sipas afatit, një kujtesë shtatë ditë përpara, një kujtesë në kalimin e afatit, vetëm një herë secila. Një shirit administrimi sinjalizon kërkesat jashtë afatit dhe ato me më pak se shtatë ditë.
7. Pastrimi. Dërgimet që nuk u verifikuan kurrë fshihen pas skadimit të tokenit të tyre,
ndërsa kërkesat e mbyllura fshihen pas retention_dsar_days. Matja niset nga mbyllja, jo
nga dërgimi.
Pakoja e transportueshmërisë
Eksporti prodhon një dokument në formatin ow-consent/dsar-export, me vulën kohore, faqen,
subjektin, kërkesën dhe grupet e të dhënave. Ai i thërret të gjithë eksportuesit e
regjistruar të faqes, faqos deri në 50 faqe për çdo eksportues dhe ndalon në 20 sekonda.
Fshirja bën të njëjtën gjë nga ana e fshirësve, me të njëjtët kufij.
Filtri: owc_dsar_export_bundle( $bundle, $email, $id ).
Prandaj ajo që mbulojnë eksporti dhe fshirja varet nga shtojcat e instaluara në faqen tuaj: një shtojcë që nuk regjistron asnjërin prej këtyre hook-eve duhet trajtuar me dorë.
Integrimi me mjetet vendase të WordPress-it
- Eksportues i regjistruar nën çelësin
ow-consent, me dy grupe: kërkesat e të drejtave dhe regjistri i pëlqimeve. - Fshirës:
- dërgimet që s'u konfirmuan kurrë fshihen — asnjë vlerë provuese, vetëm të dhëna personale;
- kërkesave të mbyllura u fshihet teksti i lirë dhe emri, ndërsa rreshti minimal (data,
lloji, statusi) ruhet si provë (neni 5.2) deri te
retention_dsar_days; - një kërkesë ende e hapur ruhet, me një mesazh që shpjegon se asaj duhet t'i përgjigjeni para se të fshihet;
- regjistri i pëlqimeve nuk fshihet, për arsyen e shpjeguar më lart.
- Shtojca ushqen gjithashtu draftin e politikës së privatësisë të WordPress-it.
Njoftimi informues nën formular
Nën formular, një bllok i shpalosshëm mbart njoftimin e nenit 13: identiteti dhe adresa e
kontrolluesit, kontakti për privatësinë, qëllimi dhe baza ligjore (neni 6.1.c), të dhënat e
mbledhura, marrësit dhe afati i ruajtjes, afati i përgjigjes dhe mundësia e zgjatjes,
autoriteti mbikëqyrës kompetent, lidhja drejt politikës. Filtri:
owc_dsar_form_notice( $html, $context ).
Autoriteti i shfaqur vjen nga nxjerrja e përshkruar në Njëmbëdhjetë profilet e përputhshmërisë, dhe pranohet vetëm nëse nis me shkronjë të madhe: leximi i cilësimit të papërpunuar do të emërtonte autoritetin francez në një faqe sudafrikane, indiane, australiane ose kaliforniane.
Pa JavaScript, butoni i dërgimit fshihet dhe një mesazh propozon adresën e kontaktit — që shfletuesi të mos bëjë kurrë një dërgim vendas që do ta vinte adresën e kërkuesit brenda URL-së, e pra brenda regjistrave të të gjithë serverëve dhe proxy-ve nëpër të cilët kalon.
Cilësimet DSAR
| Cilësimi | Parazgjedhja | Kufijtë |
|---|---|---|
dsar_enabled | true | boolean |
dsar_email | '' | kontakt publik dhe marrës i njoftimeve |
dsar_notify_email | '' | marrës shtesë |
dsar_response_days | 30 | 1 deri 30 — kurrë më shumë se një muaj |
dsar_token_ttl_days | 7 | 1 deri 90 |
retention_dsar_days | 1095 (3 vjet) | 1 deri 3650 |
Pikat e zgjerimit
add_action( 'owc_dsar_submitted', function ( $type, $email, $message ) {}, 10, 3 );
add_action( 'owc_dsar_verified', function ( $id, array $row ) {}, 10, 2 );
add_action( 'owc_dsar_fulfilled', function ( $id, $what, $trace ) {}, 10, 3 );
add_action( 'owc_dsar_mail_failed', function ( $id, $email, $kind ) {}, 10, 3 );
Kufijtë e portalit
- Identiteti mbështetet mbi një faktor të vetëm: shkëmbimin me e-mail. Çdo provë shtesë sipas nenit 12.6 shkruhet me dorë në shënimet e kërkesës.
- Një dërgim i dështuar e-maili e bllokon ciklin: përgjigjja e ekspozon
mail_sent: falsedhe formulari shfaq një mesazh që dërgon te adresa e kontaktit, por kërkesa mbetetpendingdhe afati ligjor nuk niset. - Kujtesat e afatit dhe pastrimi varen nga WP-Cron.
- Tabela e kërkesave fshihet gjithnjë në çinstalimin e shtojcës, pavarësisht cilësimit tuaj. Eksportoni para se të fshini.
Opt-out-i CCPA «Do Not Sell or Share»
Nën profilet amerikane, ligji kërkon një kontroll me emër, të dukshëm, dhe që e kryen vërtet opt-out-in.
Dy mënyra për ta vendosur
Shortcode, aty ku doni:
[owc_dnsmpi]
[owc_dnsmpi label="Mos i shitni dhe mos i ndani të dhënat e mia personale" class="lidhja-ime"]
| Atributi | Parazgjedhja |
|---|---|
label | «Do Not Sell or Share My Personal Information» |
class | owc-dnsmpi |
Injektim automatik në fundfaqe: cilësimi ccpa_inject_footer, i aktivizuar si
parazgjedhje, i renderuar mbi wp_footer me prioritet 20.
Çfarë bën një klikim
Një klikim e kryen opt-out-in. Ai nuk hap ndonjë panel. Runtime-i merr një nonce të
freskët e pastaj dërgon një reject_all me burimin footer_link dhe të gjitha kategoritë
opsionale në false. Lidhja kalon në aria-busy="true" dhe një zonë role="status" shfaq
gjendjen: «po regjistrohet», pastaj «opt-out-i juaj u regjistrua mbi këtë shfletues», ose
mesazhin e gabimit.
Kodi e citon arsyen: sipas rregulloreve zbatuese të CCPA-së (§7026(a)(1)), një lidhje që mjaftohet me hapjen e një paneli nuk është mekanizëm në përputhshmëri.
Rezervë pa fetch e pa Promise (WebView i vjetër, shfletues i integruar): klikimi hap
panelin e preferencave me kategoritë reklamuese tashmë të vendosura në off.
Kufizimi i cache-it
HTML-ja e shërbyer është e njëjtë për të gjithë. Prandaj lidhja renderohet e dukshme nëse
profili i konfiguruar i faqes është ccpa ose us_generic; përndryshe renderohet e
fshehur dhe zbulohet nga ana e klientit për vizitorët juridiksioni i të cilëve e kërkon,
sipas cookie-s së zbulimit rajonal.
Nëse zbulimi rajonal është i çaktivizuar dhe profili juaj i konfiguruar nuk është amerikan, blloku nuk shtypet fare: pa kod të vdekur.
Asnjë e dhënë vizitori nuk udhëton brenda konfigurimit JavaScript të këtij moduli — vetëm listat e profileve, kurrë vlera boolean e zgjidhur.
Burimet e këtij moduli shtypen në <head>, jo në fundfaqe, që refuzimi i Consent Mode të
arrijë te gtag para se të niset një menaxher etiketash. JavaScript-i është vetëm në ES5.
Kufijtë
- Kontrolli me një klikim kërkon
fetchdhePromise. - Lidhja është e detyrueshme vetëm nën profilet
ccpadheus_generic; nën çdo profil tjetër ajo as nuk shfaqet, as nuk zbulohet. - Zbulimi nga ana e klientit varet nga cookie-ja e zbulimit rajonal, pra nga JavaScript-i.
Google Consent Mode v2
Moduli është i aktivizuar si parazgjedhje (gcm_enabled).
Të shtatë sinjalet
Lëshohen të shtatë sinjalet e Consent Mode v2: ad_storage, ad_user_data,
ad_personalization, analytics_storage, functionality_storage,
personalization_storage dhe security_storage. Gjashtë kategoritë e shtojcës u lidhen
atyre nga një burim i vetëm i së vërtetës, çka garanton se banneri, bllokimi dhe
bootstrap-i nuk mund të divergojnë. Tabela jepet te
Kategoritë e cookie-ve.
Vlerat e parazgjedhura, para çdo pëlqimi
Thirrja default shtypet si kod statik, ndërsa update-i llogaritet brenda shfletuesit:
kjo është ajo që e mban faqen të cache-ueshme.
| Sinjali | Regjim opt-in | Regjim opt-out |
|---|---|---|
ad_storage | denied | granted |
analytics_storage | denied | granted |
ad_user_data | denied | granted |
ad_personalization | denied | granted |
personalization_storage | denied | granted |
functionality_storage | denied nëse faqja e shfaq kategorinë functional, përndryshe granted | granted |
security_storage | granted gjithnjë | granted |
Të dy grupet shtypen brenda së njëjtës faqe. Runtime-i zgjedh cilin të zbatojë sipas cookie-s së zbulimit rajonal. Pa këtë, një faqe e ruajtur në cache do ta ngulte juridiksionin e një vizitori amerikan mbi një vizitor evropian.
Dy cilësimet shoqëruese
| Cilësimi | Parazgjedhja | Efekti |
|---|---|---|
gcm_ads_data_redaction | true | I maskon identifikuesit reklamues për sa kohë ad_storage është i refuzuar |
gcm_url_passthrough | true | I kalon gclid / dclid përmes URL-ve për sa kohë cookie-t janë të refuzuara |
Për dijeni
security_storage nuk preket kurrë nga një përditësim: ai mbetet i dhënë, siç e parashikon
specifikimi. Paneli i kontrollit shfaq një kartë që tregon nëse Consent Mode është aktiv.
IAB TCF v2.2
Moduli TCF është i çaktivizuar si parazgjedhje, dhe ai kërkon një identifikues që shtojca nuk mund ta japë. Lexoni seksionin e kufijve para se ta aktivizoni.
Aktivizimi
| Cilësimi | Parazgjedhja | Kufijtë |
|---|---|---|
tcf_enabled | false | boolean |
tcf_cmp_id | 0 | 0 deri 4095 |
tcf_publisher_country | FR | kod ISO me 2 shkronja |
tcf_publisher_purposes_li | [] | listë qëllimesh |
tcf_special_features | [] | listë veçorish speciale |
Tavani 4095 nuk është arbitrar: fusha CmpId zë 12 bit brenda vargut TCF.
Tri rastet ku moduli refuzon të lëshojë çfarëdo qoftë
- Asnjë CMP ID (
tcf_cmp_id < 1): pa__tcfapi, pa varg TC, pa cookieeuconsent-v2, pa rrugë REST. Një njoftim administrimi e shpjegon. CMP ID-ja duhet t'ju caktohet nga IAB Europe; shtojca nuk jep asnjë. Të lëshoje një varg që mbart CmpId 0 do të ishte më keq se të mos lëshoje asgjë. - CMP ID mbi 4095: i njëjti refuzim, me një njoftim të dedikuar. Një vlerë e cunguar në 12 bit do të tregonte një CMP tjetër — një uzurpim identiteti.
- Asnjë Global Vendor List në cache: stub-i shtypet, por API-ja përgjigjet me
cmpStatus: 'error'dhe me varg bosh, në vend që të shpikë një numër versioni liste.
Një diagnostikim shkruhet në një opsion (disabled, missing_cmp_id, no_gvl, active),
dhe vetëm në kontekst administrimi ose cron-i, kurrë mbi një faqe publike.
Global Vendor List
- Burimi:
https://vendor-list.consensu.org/v3/vendor-list.json. - Kurrë e shkarkuar gjatë renderimit të një faqeje. Këtë e bën një cron ditor, me një ekzekutim të parë pesë minuta pas aktivizimit; në administrim me cache të ftohtë, vihet në radhë një marrje e vetme.
- Kërkesa: afat maksimal 5 sekonda, 2 ridrejtime, përgjigje me tavan 4 MB. Një trup që e arrin tavanin konsiderohet i cunguar dhe refuzohet.
- Për çdo ofrues ruhen vetëm fushat e dobishme; stack-et zbrazen. Nëse serializimi mbetet shumë i madh, zbatohen dy shkallë cungimi: fillimisht etiketat dhe URL-të, pastaj reduktimi vetëm te qëllimet.
- Ruajtja: një javë brenda një transient-i, me stale-if-error — në rast dështimi, ruhet kopja e fundit e vlefshme.
- Rrugë publike:
GET /owc/v1/tcf/gvl, e kufizuar në 10 kërkesa në orë. Ajo shërben kopjen në cache me njëETagdhe njëCache-Control: public, max-age=86400, dhe i trajton kërkesat me kusht. Nëse nuk ka asgjë në cache, ajo përgjigjet me 503 dhe njëRetry-After: 300— kurrë me një listë të sajuar. Kjo rrugë nuk nis kurrë ndonjë kërkesë dalëse.
Ku llogaritet vargu TC
Brenda shfletuesit, jo në PHP. Një stub krejtësisht statik shtypet në <head> me
prioritet 0: iframe lokalizues, zbatim i window.__tcfapi, rele postMessage, dhe një
kodues i segmentit Core në JavaScript. Konfigurimi i publikuar nuk përmban asnjë të dhënë
vizitori — kjo është ajo që lejon të mbetet i pajtueshëm me një cache faqesh. Filtri:
owc_tcf_stub_config.
Ekziston edhe një pasqyrë PHP e koduesit, por ajo nuk ka asnjë thirrës brenda shtojcës: i rezervohet integrimeve dhe testeve, me paralajmërimin që të mos shtypet kurrë brenda HTML-je të cache-ueshme.
Çfarë kodohet
Vetëm segmenti Core, në base64url pa mbushje. Seksioni i ofruesve kodohet ose si fushë bitesh, ose si intervale: maten të dyja madhësitë dhe fiton më e vogla. Indeksi i ofruesve që i përcillet shfletuesit përdor një format kompakt të vetë shtojcës, me një tavan të fortë përtej të cilit indeksi zbrazet (pëlqimet për ofruesit humbasin atëherë, ndërsa versioni i listës ruhet).
Përputhja kategori → qëllime TCF
| Kategoria | Qëllimet |
|---|---|
necessary | asnjë — jashtë perimetrit TCF, çka garanton që «Refuzoji të gjitha» nuk mund të prodhojë pëlqim për qëllimin 1 |
functional | 1 |
analytics | 1, 8, 9, 10 |
marketing | 1, 2, 3, 4, 7 |
preferences | 1, 5, 6, 11 |
social | 1 |
Filtri: owc_tcf_purpose_map.
Interesi legjitim i botuesit: pranohen vetëm qëllimet 2, 7, 8, 9, 10 dhe 11, sepse
TCF v2.2 e ndalon interesin legjitim për qëllimet 1, 3, 4, 5 dhe 6. Çdo vlerë tjetër e
tcf_publisher_purposes_li shpërfillet në heshtje.
Një ofrues konsiderohet i pëlqyer sapo të jetë dhënë të paktën një nga qëllimet që ai deklaron nën bazën «pëlqim».
Veçoritë speciale
Mbështeten vetëm dy zëra: 1 — përdorimi i të dhënave të sakta të gjeolokalizimit dhe
2 — skanimi aktiv i karakteristikave të pajisjes. Deklaroni ato që përdorni brenda
tcf_special_features; lista sillet te ky katalog.
Ato shfaqen si kutiza të vërteta brenda panelit të preferencave. «Pranoji të gjitha» nuk i shënon: ato kërkojnë një opt-in të shprehur më vete. «Refuzoji të gjitha» dhe «Do Not Sell» i çshënojnë. Ato jetojnë brenda vetë vargut TC, dhe rihidratohen nga API-ja TCF kur rihapet paneli.
Shtresa TCF brenda panelit
Ajo renderohet vetëm nëse moduli është aktiv, domethënë tcf_enabled dhe një CMP ID i
përdorshëm. Dy blloqe:
- Qëllimet: vetëm ato që arrihen përmes një kategorie jo të detyruar dhe që emërtohen brenda katalogut të listës së ofruesve. Një çelës që do të kthehej vetë prapa do të ishte më keq se mungesa e çelësit. Ndryshimi i një qëllimi shkruan në të gjitha kategoritë që e deklarojnë, dhe pastaj shfaqja rillogaritet.
- Veçoritë speciale të deklaruara.
Asgjë nuk kodohet brenda vargut pa qenë shfaqur më parë.
API-ja JavaScript
window.__tcfapi( command, version, callback, parameter );
// komandat: ping, getTCData, getInAppTCData,
// addEventListener, removeEventListener, getVendorList
window.__owcTcfUpdateState( tcData ); // zëvendëson të dhënat dhe njofton dëgjuesit
window.__owcTcfRefresh(); // rillogarit dhe lëshon 'useractioncomplete'
window.__owcTcfUiShown(); window.__owcTcfUiHidden();
window.__owcTcfSetSpecialFeatures( [ 1, 2 ] );
Versionet e pranuara: e munguar, null, 2, '2', 2.2, '2.2'. Çdo vlerë tjetër jep
callback(null, false).
gdprApplies
Vendoset nga ana e klientit. Nëse zbulimi rajonal është i çaktivizuar, vlera është
true. Përndryshe, shteti i vizitorit krahasohet me listën e 31 kodeve ku zbatohet GDPR-ja
sipas kuptimit të TCF-së (27 shtete të BE-së, plus IS, LI, NO, GB dhe CH). Dështim i
mbyllur: një shtet i panjohur jep true.
Cookie-ja euconsent-v2
Shkruhet vetëm nga ana e klientit, dhe vetëm kur moduli është gati dhe vizitori ka
vepruar. Përndryshe cookie-ja fshihet. Kohëzgjatja e saj është ajo e pëlqimit, me tavan
13 muaj (rekomandim IAB / CNIL). SameSite=Lax, Secure në HTTPS.
Kufijtë e modulit TCF — lexojini patjetër
- Ky nuk është një CMP i regjistruar pranë IAB Europe. Ai kërkon CMP ID-në tuaj, dhe edhe me të, politika e TCF-së i imponon një CMP-je të regjistruar t'i paraqesë zgjedhjet në nivel qëllimi dhe në nivel ofruesi. Këtu, çelësat e qëllimeve ndjekin kategoritë dhe nuk ka asnjë zgjedhje në nivel ofruesi: ofruesit kanë të drejtë ta refuzojnë këtë sinjal. Ekrani i administrimit e thotë këtë dhe flet për «modalitet i pajtueshëm me CMP (jozyrtar)», i pranuar nga shumica e SSP-ve në zhvillim, por i refuzuar në prodhim real brenda ZEE-së. Nëse të ardhurat reklamuese nën TCF kanë peshë për ju, përdorni një CMP të certifikuar.
- Vetëm segmenti Core: pa segmentet
disclosedVendors,allowedVendorsapopublisherTC. - Nuk lëshohet asnjë kufizim botuesi: numëruesi përkatës është gjithnjë 0 dhe objekti i kufizimeve është bosh.
purposeOneTreatmentdheuseNonStandardTextsjanë gjithnjëfalse,isServiceSpecificështë gjithnjëtrue— nuk ka shtrirje globale — dhe ekrani i pëlqimit është gjithnjë 0.getVendorListe shpërfill parametrin e versionit dhe kthen gjithnjë listën në cache.- Pëlqimet e botuesit kopjojnë qëllimet e përgjithshme: pa qëllime të personalizuara.
- Vetëm dy veçori speciale.
- Moduli kërkon një cron funksional dhe HTTPS dalës. Pa listë në cache, API-ja
përgjigjet me
cmpStatus: 'error'dhe rruga publike kthen 503.
Global Privacy Control
GPC-ja është një sinjal që e dërgon shfletuesi — header-i Sec-GPC: 1 dhe vetia
navigator.globalPrivacyControl. Shtojca e nderon si parazgjedhje (gpc_honor), por
trajtimi i tij varet nga regjimi juridik, dhe kjo është pika e rëndësishme.
Nën profilet amerikane: detyrues
Sinjali trajtohet si opt-out universal detyrues nën profilet ccpa dhe us_generic.
Australia përjashtohet shprehimisht: regjim opt-out, por që nuk e njeh GPC-në.
Shkrimi në server ndodh vetëm pas një zinxhiri të plotë verifikimesh, sipas kësaj radhe:
gpc_honorështë aktiv;- sinjali është i pranishëm — header-i
Sec-GPC, me rezervë teX-Sec-GPCsepse disa proxy dhe CDN e riemërtojnë header-in; vlen vetëm vlera e saktë1; - profili efektiv është
ccpaoseus_generic— përndryshe nuk shkruhet asgjë; - është një konsultim i thjeshtë faqeje: pa administrim, pa cron, pa AJAX, pa REST, pa
XML-RPC, pa WP-CLI, dhe metoda është
GET; - header-at nuk janë dërguar ende — një cookie që nuk mund të vendoset është një vendim që do të riregjistrohej në çdo kërkesë;
- shënuesi i sesionit
owc_gpcmungon: një herë për çdo sesion shfletimi; - vizitori nuk i ngjan një roboti (user-agent bosh, ose që përmban
bot,crawl,spider,slurp,monitor,uptime,pingdom,headless,preview,curl/,wget,python-,java/,go-http,okhttp,httpclient,libwww,facebookexternalhit); - zgjedhja tashmë e ruajtur nuk e plotëson tashmë sinjalin — përndryshe shfletuesi vetëm shënohet;
- respektohet kufiri i përbashkët i shpeshtësisë: 30 në orë për çdo IP;
- shfletuesi shënohet para shkrimit, që një dështim të mos kthehet në cikël përsëritjesh.
Ngjarja regjistrohet si gpc_opt_out me burimin auto. URL-ja e faqes rindërtohet nga URL-ja
e faqes dhe shtegu i kërkuar — kurrë nga header-i Host, kurrë nga Referer-i.
Perimetri: të gjitha kategoritë opsionale kalojnë në false; kategoritë e detyruara
mbeten të dhëna. Ky është një lexim i gjerë i nocionit të shitjes ose ndarjes.
Transparenca: nëse GPC-ja mbishkruan një zgjedhje të regjistruar shprehimisht, një cookie prej pesë minutash nis nga ana e klientit një njoftim në fund të ekranit që e shpjegon këtë, me një buton «menaxho preferencat e mia» që hap panelin, dhe një buton mbylljeje.
Nën profilet GDPR dhe të ngjashme: thjesht një tregues
Jashtë regjimeve amerikane opt-out, sinjali trajtohet si tregues, kurrë si pëlqim:
- atributi
data-owc-gpc="1"vendoset mbi<html>; - Consent Mode i kalon
ad_storage,analytics_storage,ad_user_data,ad_personalizationdhepersonalization_storagenëdenied; - të gjitha kategoritë opsionale vihen në
falsevetëm në memorie; givenmbetet false, banneri mbetet i shfaqur, dhe nuk regjistrohet asgjë.
Një flamur i brendshëm e pengon runtime-in t'i njoftojë vizitorit se ai është «tashmë opt-out» ndërkohë që as cookie-ja as regjistri nuk e thonë këtë. Arsyetimi është shkruar në kod: GPC-ja nuk është sinjal ligjërisht i njohur nën GDPR-në dhe ePrivacy, nën nFADP-në zvicerane, LGPD-në, POPIA-n, PIPL-in, DPDP-në apo Ligjin 25.
Dy cookie-t që vendos ky modul
| Cookie | Kohëzgjatja | Roli |
|---|---|---|
owc_gpc | sesion | Shënon se sinjali është trajtuar tashmë për këtë shfletues |
owc_gpc_notice | 300 s | Nis njoftimin «GPC-ja e zëvendësoi zgjedhjen tuaj» |
Të dyja janë mbi path=/, SameSite=Lax, Secure në HTTPS, dhe të lexueshme nga skriptet.
Pikë zgjerimi
add_action( 'owc_gpc_honored', function ( array $categories ) {} );
Zbulimi rajonal
Zbulimi rajonal i zbaton çdo vizitori profilin e juridiksionit të tij në vend të profilit të konfiguruar të faqes. Ai është i çaktivizuar si parazgjedhje.
| Cilësimi | Parazgjedhja |
|---|---|
geo_enabled | false |
geo_default_profile | gdpr |
geo_mmdb_enabled | false |
Kaskada e zbulimit
Fiton suksesi i parë:
- Cloudflare (
CF-IPCountry) — vetëm nëse faqja ka deklaruar se ndodhet pas Cloudflare-it; - AWS CloudFront (
CloudFront-Viewer-Country) — i njëjti kusht; GEOIP_COUNTRY_CODE, variabla që e shkruan vetë serveri (mod_geoip, ngx_http_geoip), pra e pafalsifikueshme nga klienti; pastaj, nëse është deklaruar një proxy, variantet në header HTTP;- Baza lokale MaxMind, nëse
geo_mmdb_enabledështë aktiv; - Asgjë.
Pa një deklarim të shprehur në wp-config.php, nuk besohet asnjë header HTTP shteti: ata
janë të falsifikueshëm nga klienti. Shihni Instalimi për konstantet.
Kodi i shtetit validohet kundrejt listës së lejimeve ISO-3166-1 alpha-2 të caktuar zyrtarisht
(rreth 249 kode të numëruar drejtpërdrejt në kod). Kodet e përdoruesit ose të rezervuara —
XX, ZZ, T1-shi i daljeve Tor — refuzohen.
Dështimi i mbyllur
Pa shtet të zbuluar, shtojca lexon geo_default_profile por e zbret çdo profil opt-out në
gdpr. Prandaj një geo_default_profile i vendosur në ccpa, us_generic ose au
shpërfillet për vizitorët e pazbuluar — dhe ekrani i administrimit propozon vetëm profile
opt-in brenda këtij përzgjedhësi, në vend që të ofrojë një zgjedhje që shpërfillet në
heshtje.
Arsyeja është e drejtpërdrejtë: pa këtë mbrojtëse, një faqe e konfiguruar në anglishten amerikane do ta vendoste çdo vizitor të ZEE-së në regjim opt-out, me gjurmues të shënuar si «të dhënë» pa asnjë pëlqim.
Asnjë rezervë te lokalja e faqes: gjuha e një faqeje nuk thotë asgjë për vendndodhjen e vizitorit të saj.
Cookie-ja owc_geo
- Kohëzgjatje 24 orë,
path=/,SameSite=Lax,Securenë HTTPS, e lexueshme nga skriptet — bootstrap-i i pjesës publike ka nevojë për të. - Përmbajtja: shteti, profili, një vulë kohore dhe një kod autentikimi. Kurrë adresë IP.
- Në lexim: madhësi e kufizuar, shtet i validuar kundrejt listës ISO, vulë kohore brenda dritares, kod i verifikuar në kohë konstante. Profili rillogaritet gjithnjë nga ana e serverit nisur nga shteti: një vizitor nuk mund ta zgjedhë regjimin e vet juridik.
- Në cache ruhet vetëm një zbulim real. Rezerva «dështim i mbyllur» nuk mbahet mend kurrë.
- Shkruhet vetëm mbi një kërkesë të pjesës publike, dhe vetëm nëse zbulimi është aktiv.
Përputhja shtet → profil
| Shteti | Profili |
|---|---|
| 30 shtetet e ZEE-së | gdpr |
| GB, JE, GG, IM | uk_pecr |
| CH | ch_nfadp |
| BR | lgpd |
| ZA | popia |
| CN, HK | pipl |
| IN | dpdp |
| AU, NZ | au |
| CA | quebec |
| US | ccpa |
| Gjithë pjesa tjetër | Rezerva, e zbritur në opt-in |
Hong Kongu në të vërtetë i nënshtrohet urdhëresës së vet vendore; trajtohet si PIPL për
ashpërsi. Zelanda e Re trajtohet si Australia. Gjithë Kanadaja merr quebec — fiton regjimi
më strikt. Shtetet e Bashkuara marrin ccpa, i cili shërben si profil edhe për shtetet e
tjera.
Kufizimi i cache-it — çfarë nuk bën zbulimi
Profili i gjeolokalizuar nuk e ndryshon HTML-në e renderuar. Rishkrimi i profilit
zbatohet vetëm te dy rrugët REST të vizitorit, /owc/v1/consent dhe /owc/v1/state.
Renderimi i faqeve, rrugët e administrimit, wp-admin, cron-i dhe WP-CLI e ruajnë profilin e
konfiguruar. Çdo përgjigje që ka konsumuar rishkrimin shënohet si e pacache-ueshme.
Është runtime-i i pjesës publike ai që e zgjedh regjimin, nga ana e klientit, nisur nga cookie-ja. Pasojë e pranuar: regjimi që i zbatohet një vizitori varet nga JavaScript-i, dhe një vizitor faqja e parë e të cilit vjen nga cache-i trajtohet nën profilin e konfiguruar sa kohë cookie-ja nuk ekziston.
Lexuesi MaxMind i integruar
Shtojca ka lexuesin e vet MMDB, të shkruar në PHP të pastër, pa varësi nga Composer-i — një shtojcë e publikuar në WordPress.org nuk mund ta përfshijë paketën zyrtare.
- Vetëm lexim, vetëm shtet. Pa qytet, pa ASN.
- Hyrje/dalje të kufizuara: lexim në blloqe të vogla, kurrë ngarkim në memorie i një skedari prej disa megabajtësh.
- Nuk ngre kurrë përjashtim: skedar që mungon, i palexueshëm, i cunguar, i korruptuar ose
armiqësor jep
null, dhe zbulimi bie te profili i vet strikt. - Mbrojtëse të brendshme mbi thellësinë e përshkimit, buxhetin e dekodimit dhe madhësinë e ngarkesës. Metatë dhënat ruhen në një transient çelësi i të cilit përfshin madhësinë dhe datën e skedarit: zëvendësimi i shkarkimit tuaj mujor e zhvlerëson cache-in vetvetiu.
registered_countrydherepresented_countryshpërfillen me qëllim. Kjo është forma e dokumentuar e intervaleve të proxy-ve anonimë, VPN-ve dhe satelitëve, ku shteti i regjistrimit tregon vendin ku ofruesi e ka regjistruar bllokun, jo vizitorin. Përdorimi i tyre do ta vinte një vizitor të ZEE-së pas një VPN-je amerikane në regjim opt-out.- Nëse një shtojcë tjetër ngarkon tashmë një lexues GeoIP2, ai përdoret si rezervë pas lexuesit të vetë shtojcës.
Ku duhet vendosur skedari: wp-content/uploads/ow-geoip/GeoLite2-Country.mmdb. Shtegu
filtrohet me owc_geo_mmdb_path, me validim kundrejt përshkimit të drejtorive.
Kufi i rëndësishëm: shtojca nuk e shkarkon bazën dhe nuk ofron asnjë ekran ngarkimi. Skedarin duhet ta merrni te MaxMind, ta vendosni vetë dhe ta përditësoni vetë. Në këmbim, asgjë nuk i dërgohet MaxMind-it: kërkimi është plotësisht lokal, adresa IP përdoret vetëm si pikë kërkimi dhe shkatërrohet shprehimisht më pas — kurrë e regjistruar, kurrë e ruajtur, kurrë e shkruar brenda cookie-s.
Kufijtë e zbulimit rajonal
- I çaktivizuar si parazgjedhje, dhe varianti MaxMind kërkon një skedar që e jepni ju.
- Header-at e shtetit shpërfillen sa kohë nuk e keni deklaruar proxy-n tuaj.
- Pa ndarje shtet për shtet në SHBA, e as provincë për provincë në Kanada.
- Regjimi i vizitorit varet nga JavaScript-i dhe nga cookie-ja 24-orëshe.
- Profili
us_genericnuk caktohet kurrë automatikisht.
Integrimi me OW Forms
Perimetri i saktë: ky integrim synon shtojcën motër OW Forms, dhe asgjë tjetër. Nuk ka asnjë integrim me Contact Form 7, Gravity Forms apo WPForms.
Cilësimi: forms_integration_enabled, i aktivizuar si parazgjedhje, por integrimi nuk
bën asgjë nëse OW Forms nuk është aktive.
Çfarë sjell
1. Lidhja pëlqim ↔ dërgim. Për çdo dërgim të ruajtur, shkruhet një rresht brenda një tabele të dedikuar të OW Consent — skema e OW Forms nuk preket kurrë — që përmban:
- tokenin pseudonim të vizitorit (32 heksadecimale, kurrë adresën e e-mailit);
- identifikuesin e zërit më të fundit të regjistrit për këtë token;
- kategoritë e dhëna dhe profilin e përputhshmërisë në fuqi;
- hash-in e plotë të dokumenteve të publikuara në atë çast;
- vulën kohore të pëlqimit;
- gjendjen e kutizës GDPR të formularit dhe etiketën e saktë që ajo mbante.
Kjo e fundit është më e dobishmja në praktikë: ju mund të demonstroni jo vetëm se kutiza ishte e shënuar, por edhe çfarë ishte shkruar pranë saj.
2. Kaskada e fshirjes. Një kërkesë fshirjeje e verifikuar ia delegon fshirjen rutinës së OW Forms — e cila fshin edhe skedarët e ngarkuar — dhe pastaj fshin rreshtat e lidhjes. Integrimi e zbulon nëse OW Forms ka lidhur tashmë dëgjuesin e vet mbi të njëjtin veprim, në këtë rast ai mjaftohet me pastrimin e lidhjeve të veta.
3. Mjetet e privatësisë të WordPress-it. Regjistrohen një eksportues dhe një fshirës, kështu që Mjetet → Eksporto / Fshi të dhënat personale i mbulon dërgimet e OW Forms — dhe edhe portali i të drejtave i OW Consent, meqë ai përshkon të njëjtat hook-e. Eksporti merr etiketat reale të fushave dhe u shton fushat e pëlqimit. Çdo vlerë e eksportuar neutralizohet kundër injektimit të formulave të fletëllogaritësve dhe cungohet.
4. Ruajtja. Mbi cron-in ditor, lidhjet më të vjetra se retention_form_data_days
(parazgjedhja 1095 ditë, kufijtë 1 deri 3650) fshihen në grupe nga 500, me një kalim edhe
mbi jetimet. Preken vetëm rreshtat e OW Consent: ruajtja e vetë dërgimeve i takon
OW Forms.
Kufijtë
- Asnjë ngjarje dërgimi nuk shkruhet brenda regjistrit të zinxhirtë. Rreshti i lidhjes i referohet një zëri ekzistues, nuk krijon ndonjë të tillë — zinxhiri nuk duhet shkruar nga jashtë.
- Nuk mund të lidhet një dërgim nëse OW Forms është konfiguruar të mos i ruajë dërgimet: nuk ka asnjë rresht ku të kapesh.
- Asnjë rikuperim retroaktiv: lidhja nis nga dërgimi i parë pas përditësimit.
- Përputhja bëhet mbi hash-in e kripëzuar të adresës që llogarit OW Forms, me rezervë te adresa e hapur që OW Forms e ruan gjithashtu. Kjo nuk është një skemë me zbulim zero: adresa mbetet e hapur te OW Forms, sepse duhet të mund t'i përgjigjeni personit.
- Integrimi nuk e ndryshon kurrë shtojcën OW Forms, tabelat apo opsionet e saj.
- Nëse OW Forms është aktive por shumë e vjetër për ta ekspozuar rutinën e vet të fshirjes, fshirësi përgjigjet shprehimisht se dërgimet nuk janë prekur.
Butoni pluskues
Një buton i vogël i qëndrueshëm lejon rihapjen e panelit të preferencave në çdo çast. Kjo është kërkesa e nenit 7(3) — tërheqja duhet të mbetet po aq e thjeshtë sa pëlqimi — dhe e vendimit CNIL 2020-091, i cili kërkon një mekanizëm të arritshëm nga çdo faqe.
Kushtet e ekzistencës
Ai kërkon të dyja cilësimet: floating_button_enabled dhe banner_enabled. Paneli i
preferencave dhe API-ja JavaScript jetojnë brenda runtime-it të bannerit; pa të, butoni do të
ishte një kontroll që nuk bën asgjë.
Ai del gjithashtu në administrim, mbi një feed, mbi robots.txt, dhe nëse wp_head nuk është
nisur.
Opsionet
| Cilësimi | Vlerat | Parazgjedhja |
|---|---|---|
floating_button_enabled | boolean | true |
floating_button_position | bottom-left, bottom-right, top-left, top-right | bottom-left |
floating_button_style | pill, icon | pill |
floating_button_label | tekst i lirë | Cookies |
Butoni nuk ka cilësim teme të vetin: ai merr banner_style, që të dyja sipërfaqet të
ndjekin të njëjtën paletë.
Sjellja dhe qasshmëria
Është një <button> i vërtetë, pra i qasshëm me tastierë. Ai mbart aria-haspopup="dialog"
dhe një aria-label të përkthyeshëm por jo të konfigurueshëm («Manage my cookie
choices»): rregullohet vetëm etiketa e dukshme. Në modalitetin icon, etiketa fshihet
vizualisht por vazhdon të lexohet nga lexuesit e ekranit.
Ai renderohet me atributin hidden; është JavaScript-i që vendos ta shfaqë. Ai është i
dukshëm në të gjitha gjendjet, veç kur banneri ose paneli ndodhet tashmë në ekran —
përfshirë menjëherë pas një zgjedhjeje mbi faqen aktuale.
Një klikim hap panelin e preferencave. Nëse API-ja e bannerit nuk ekziston, butoni bie te
fragmenti #owc-preferences, duke e rinisur ngjarjen me dorë nëse ky është tashmë fragmenti
aktual.
z-index 99990, i fshehur në shtypje, mbështetje për modalitetin me kontraste të forcuara
dhe për prefers-reduced-motion, zhvendosje nën shiritin e administrimit kur pozicioni është
lart.
Shortcode-et
Shtojca deklaron dy shortcode, dhe vetëm dy. As banneri, as butoni pluskues nuk kanë të tillë: ata shfaqen kudo ose askund, të drejtuar nga cilësimet e tyre.
[owc_dsar_form] — portali i të drejtave
[owc_dsar_form]
[owc_dsar_form types="access,erasure,portability" title="Të drejtat e mia" submit_label="Dërgo"]
| Atributi | Parazgjedhja |
|---|---|
types | access,rectification,erasure,portability,restrict,object,optout |
title | «Ushtro të drejtat e mia mbi të dhënat e mia personale» |
submit_label | «Dërgo kërkesën time» |
Llojet e kërkuara priten me ato që pranon serveri. Lloji withdraw nuk propozohet kurrë nga
formulari; shihni Portali i të drejtave.
[owc_dnsmpi] — opt-out-i CCPA
[owc_dnsmpi]
[owc_dnsmpi label="Mos i shitni dhe mos i ndani të dhënat e mia personale" class="lidhje-fundfaqe"]
| Atributi | Parazgjedhja |
|---|---|
label | «Do Not Sell or Share My Personal Information» |
class | owc-dnsmpi |
Një klikim e kryen opt-out-in; shihni Opt-out-i CCPA. Nëse e lini
ccpa_inject_footer aktiv, lidhja injektohet tashmë në fundfaqe dhe ky shortcode është i
dobishëm vetëm për ta vendosur diku tjetër.
Rihapja e panelit nga një meny ose një lidhje
Për këtë nuk ka shortcode, sepse mjafton një atribut klase:
<a href="#owc-preferences" class="owc-open-preferences">Menaxho cookie-t e mia</a>
<button type="button" data-owc-open>Preferencat e mia</button>
<a href="#owc-dnsmpi" data-owc-dnsmpi="1">Mos i shitni të dhënat e mia</a>
Kjo është metoda e rekomanduar për të shtuar një zë «Cookies» në menynë tuaj të fundfaqes.
API REST
Të gjitha rrugët jetojnë nën namespace-in owc/v1, mbi rrënjën e zakonshme REST
(https://shembull.com/wp-json/owc/v1/…). Trembëdhjetë rrugë në total: dymbëdhjetë të
regjistruara nga moduli REST, plus rruga e listës së ofruesve e regjistruar nga moduli TCF.
Rrugët publike
Pa autentikim. Siguria e tyre mbështetet mbi kontrollin e origjinës, mbi një token të vetë shtojcës dhe mbi kufijtë e shpeshtësisë të përshkruar më poshtë.
| Metoda | Shtegu | Parametrat | Roli |
|---|---|---|---|
GET | /nonce | action (parazgjedhja wp_rest) | Kthen një token të freskët. Përgjigjja: {nonce, action, header: "X-OWC-Nonce", ttl: 43200}, me no-store dhe Vary: Cookie |
POST | /consent | event (parazgjedhja save_preferences), source (parazgjedhja banner), categories (i detyrueshëm), page_url (parazgjedhja ''), cookie_unreadable (boolean, parazgjedhja false) | Regjistron një zgjedhje, vendos cookie-n dhe shkruan rreshtin e regjistrit |
GET | /state | — | Gjendja e vetëm thirrësit: {given, categories, profile, at}. Kurrë tokeni i vizitorit, kurrë IP-ja, kurrë URL-ja e faqes. no-store + Vary: Cookie |
GET | /tcf/gvl | — | Shërben Global Vendor List-in nga cache-i. ETag, Cache-Control: public, max-age=86400, 304 mbi kërkesë me kusht, 503 + Retry-After: 300 nëse nuk ka asgjë në cache |
POST | /dsar | type (i detyrueshëm), email (i detyrueshëm, format e-maili), message (parazgjedhja '', maksimum 2000 karaktere) | Depoziton një kërkesë për ushtrimin e të drejtave. Përgjigjja {ok, mail_sent, message} — kurrë identifikuesi |
Vlerat e pranuara:
event:accept_all,reject_all,save_preferences,withdraw,auto,gpc_opt_outsource:banner,preferences,footer_link,api,autotype(DSAR):access,rectification,erasure,portability,restrict,object,optout,withdrawcategories: një objekt, maksimum 32 zëra, vetëm vlera skalareaction(nonce): vetëmwp_rest
Rrugët e administrimit
Të gjitha kërkojnë lejen manage_options.
| Metoda | Shtegu | Parametrat | Roli |
|---|---|---|---|
GET | /ledger | page (≥1, parazgjedhja 1), per_page (1–200, parazgjedhja 50), visitor_token (32 hex), from, to | Lexon regjistrin. Filtrat e zbatuar vërtet kthehen brenda përgjigjes |
GET | /ledger/verify | — | Verifikon zinxhirin nga fillimi në fund |
GET | /settings | — | Cilësimet efektive |
POST | /settings | trup JSON i lirë | Shkruan cilësimet. Përgjigjja {ok, updated, rejected, settings} |
POST | /scanner/run | — | Nis një shfletim |
POST | /scanner/ingest | trup JSON {page, findings[]} | Pranimi i vëzhgimeve të sondës |
GET | /scanner/findings | page, per_page (1–200, parazgjedhja 50), filter (slug kategorie ose unknown) | Rendit gjetjet |
POST | /policies/generate | type (i detyrueshëm), publish (boolean, parazgjedhja false) | Gjeneron një dokument |
GET | /policies/preview | type (i detyrueshëm) | Bën parapamjen e një dokumenti |
/scanner/ingest kërkon veç kësaj një nonce wp_rest të vlefshëm, brenda header-it
X-WP-Nonce ose si parametër _wpnonce — sepse sendBeacon nuk mund të vendosë header.
/settings në shkrim pranon vetëm çelësat e deklaruar si cilësime reale: një filtër mund të
injektojë çelësa sintetikë që nuk janë të tillë. Çdo vlerë pastrohet veç e veç. Asnjë çelës i
njohur jep një 400.
/ledger e riteston lejen brenda vetë trajtuesit, si mbrojtje në thellësi kundër një
permission_callback të filtruar diku tjetër.
Modeli i sigurisë së shkrimeve publike
Konstatimi nistor është i thjeshtë: një nonce nuk mund të jetojë brenda HTML-je të
cache-ueshme. Prandaj /consent dhe /dsar kanë një kontroll qasjeje lejues, të mbrojtur
nga katër shtresa në një radhë që ka rëndësi.
- Kontroll origjine mbi të njëjtin host. Falas, deterministik, nuk konsumon asnjë buxhet.
- Token i vetë shtojcës brenda header-it
X-OWC-Nonce— kjo është provë, kurrë veto. Zgjedhja për të mos përdorurX-WP-Nonceështë e qëllimshme: bërthama e WordPress-it e kap këtë header para çdo kontrolli qasjeje rruge dhe e refuzon gjithë kërkesën nëse nuk e validon. Prandaj një token i vjetruar i shërbyer nga një cache do të vriste një shkrim që endpoint-i do ta kishte pranuar edhe fare pa token. - Dështim i mbyllur: as origjinë, as token i verifikuar japin një 403
owc_missing_origin. - Kufiri i shpeshtësisë i fundit. Po të kalonte i pari, një konfigurim i gabuar do të konsumonte dy tokena për çdo klikim dhe do të përfundonte në 429, çka do ta fshihte gabimin e konfigurimit pas një kufiri shpeshtësie.
Hostet e pranuar: ata që deklaron WordPress-i (URL-ja e faqes, URL-ja e WordPress-it,
rrënja REST) bashkë me binjakun e tyre www./apex, plus hosti i header-it Host të
kërkesës aktuale dhe binjaku i tij. «E njëjta origjinë» do të thotë «origjina i përgjigjet
hostit me të cilin u lidh shfletuesi», jo «i përgjigjet asaj që WordPress-i ka në bazë» —
përndryshe çdo faqe e arritur me një domen parapamjeje, një alias, një emër preprodhimi, një
domen të hartëzuar në multisite ose pas një proxy-je që rishkruan Host do të refuzohej në
heshtje, pa asnjë mundësi vetëriparimi. Filtri: owc_allowed_request_hosts.
CORS-i i lihet bërthamës së WordPress-it, me qëllim.
/nonce e refuzon shprehimisht formën JSONP: pa këtë refuzim, një faqe e palës së tretë do
të mund ta korrte tokenin e gjallë të një administratori kalimtar me një <script src> të
thjeshtë, i cili nuk i nënshtrohet kontrollit të origjinës.
Kufijtë e shpeshtësisë
| Kova | Buxheti | Dritarja | Çelësi |
|---|---|---|---|
nonce | 120 | 5 minuta | adresa IP |
consent | 30 | 5 minuta | adresa IP |
dsar | 3 | 1 orë | adresa IP |
dsar_email | 3 | 24 orë | adresa e-mail e synuar |
dsar_global | 30 | 1 orë | gjithë faqja |
gpc | 30 | 1 orë | adresa IP |
tcf_gvl | 10 | 1 orë | adresa IP |
- Dritare fikse, jo rrëshqitëse: një kovë që merr trafik përfundon gjithnjë duke skaduar.
- Çelësi i ruajtur është një hash i kripëzuar: asnjë adresë IP apo adresë e-maili e hapur nuk ndodhet brenda opsioneve apo cache-it të objekteve.
- Normalizimi i IP-së: IPv4 ruhet, IPv6 cungohet në /64 — klienti e kontrollon çdo bit të identifikuesit të ndërfaqes, prandaj një çelës i plotë do të lejonte krijimin e një buxheti të ri për çdo kërkesë.
- Identitet i përbashkët: pas një CDN-je ose një proxy-je të padeklaruar me
OWC_TRUSTED_PROXY, të gjithë vizitorët mbërrijnë me të njëjtën adresë. Atëherë buxheti ndahet për çdo vizitor, me një numërues më të gjerë mbi adresën e përbashkët. Ky është një kufi më i trashë: deklarojeni proxy-n tuaj. - Filtri
owc_throttle_max( $max, $bucket, $window )— kthimi i0e çaktivizon kufirin. - Kufizuesi dështon i hapur nëse cache-i i objekteve nuk është i disponueshëm: më mirë të mos kufizohet sesa të pengohet dikush t'i ushtrojë të drejtat e veta.
Rruga /consent në hollësi
headers_sent()lexohet e para nga të gjitha. Nëse dalja ka nisur tashmë, cookie-ja e serverit nuk mund të vendoset: rreshti shkruhet prapëseprapë dhe përgjigjja mbetet 200, mecookie_set: falsedhe një përshkruescookie(name,value,ttl,path,samesite,secure) që klienti e vendos vetë.- Kategoritë që faqja nuk i ofron kthehen brenda
dropped_categories, jo shpërfillen në heshtje. page_urlvalidohet kundrejt hosteve të faqes, me rezervë te njëRefereri validuar në të njëjtën mënyrë, përndryshe vargu bosh. Çelësi është gjithnjë i pranishëm, që regjistri të mos shkojë të kërkojëReferer-in e papërpunuar.- Nëse regjistri është aktiv dhe shkrimi refuzohet, cookie-ja anulohet dhe përgjigjja është
një 503
owc_ledger_write_refused. Nuk ruhet asgjë, nuk lirohet asnjë gjurmues. cookie_unreadableështë telemetri e pastër: mbi të nuk zbatohet asnjë kontroll validimi, pikërisht që një fushë diagnostike të mos mund ta refuzojë kurrë një shkrim pëlqimi. Efekti i vetëm i saj është një shënim brenda regjistrit të refuzimeve.
Përgjigje tipike: {ok, state, dropped_categories, logged, cookie_set[, cookie]}. Fusha
logged është null kur regjistri është i çaktivizuar.
Kodet e gabimit
| Kodi | HTTP | Kuptimi |
|---|---|---|
owc_bad_param | 400 | Parametër i pavlefshëm |
owc_bad_categories | 400 | Objekt categories i keqformuar, shumë i madh ose joskalar |
owc_bad_email | 400 | Adresë e-maili e pavlefshme |
owc_bad_dsar | 400 | Dërgim DSAR i keqformuar (përfshirë kurthin për robotë) |
owc_dsar_not_attested | 400 | Mungon vetëdeklarimi i nenit 12.6 |
owc_no_settings | 400 | Asnjë çelës cilësimi i njohur brenda trupit |
owc_missing_origin | 403 | As origjinë, as token: dështim i mbyllur |
owc_bad_origin | 403 | Origjina e deklaruar nuk është host i kësaj faqeje — përgjigjja rendit deri në dhjetë hoste të pranuar |
owc_bad_nonce | 403 | Nonce i pavlefshëm mbi /scanner/ingest |
owc_jsonp_forbidden | 403 | Formë JSONP e refuzuar mbi /nonce |
owc_forbidden | 401/403 | Leje e pamjaftueshme |
owc_dsar_disabled | 404 | Portali i të drejtave është i çaktivizuar nga ana e serverit |
owc_no_template | 404 | Asnjë shabllon për këtë lloj dhe këtë profil |
owc_rate_limited | 429 | U arrit kufiri i shpeshtësisë |
owc_consent_failed | 500 | Dështim në zbatimin e pëlqimit |
owc_dsar_store_failed | 500 | Dështim në shkrimin e kërkesës |
owc_gen_failed | i ndryshueshëm | Gjenerimi i dokumentit u refuzua (fusha që mungojnë, barrierë gjuhe) |
owc_ledger_write_refused | 503 | Regjistri refuzoi të shkruajë — nuk regjistrohet asgjë, nuk zhbllokohet asgjë |
Regjistri i refuzimeve
Njëzet refuzimet e fundit të shkrimit ruhen dhe shfaqen mbi panelin e kontrollit — vetëm nëse regjistri nuk është bosh. Aty dallohen dy natyra:
- një zë me status HTTP është refuzim i vërtetë: nuk u ruajt asgjë dhe vizitori pa një gabim;
- një zë me status 0 është paralajmërim: zgjedhja u regjistrua vërtet.
Paneli shfaq krah për krah hostin e deklaruar nga origjina dhe header-in Host të kërkesës.
Është pikërisht kjo ajo që ndryshon kur vizitorët tuaj lëvizin mbi një host ndërsa
WordPress-i është konfiguruar me një tjetër — shkaku më i shpeshtë i një pëlqimi që «nuk
regjistrohet».
Kufijtë e API-së
/consentdhe/dsarpranojnë shkrime anonime nga vetë ndërtimi; mbrojtja është origjina plus kufiri i shpeshtësisë, jo një nonce.- Kufizuesi i shpeshtësisë dështon i hapur pa cache objektesh.
- Cookie-ja e pëlqimit është host-only: një cookie e vendosur për apex-in është e
palexueshme nga një faqe
www., dhe asnjë header CORS nuk mund ta ndreqë këtë. Zgjidhja është një URL shkrimi me të njëjtën origjinë. /scanner/ingestpranon vetëmmanage_options: sonda nuk mund të vijë nga një vizitor./settingsnuk ka nonce të vetin: ështëmanage_optionsplus kontrolli i nonce-it me cookie i bërthamës.
Referenca e cilësimeve
Të gjitha cilësimet rrinë brenda një opsioni të vetëm, owc_settings, të ngarkuar
automatikisht meqë lexohet në çdo faqe publike.
Leximi dhe shkrimi në PHP
$cilesimet = OWC_Core::settings(); // cilësimet efektive (parazgjedhjet + të ruajturat + filtrat)
$profili = OWC_Core::setting( 'compliance_profile' );
$i_papertypunuar = OWC_Core::stored_setting( 'compliance_profile' ); // shpërfill rishkrimin sipas vizitorit
OWC_Core::update_settings( array(
'consent_renewal_months' => 6,
'compliance_strict' => true,
) );
update_settings() bashkon vetëm çelësat e dërguar mbi ata ekzistues, kurrë tërësinë e
parazgjedhjeve. Kjo është ajo që i lejon rreshtit të opsionit të mbetet bosh sa kohë nuk keni
personalizuar asgjë, dhe pra teksteve t'i ndjekin gjuhën e faqes.
Rezultati i settings() memoizohet, me një çelës të bazuar mbi tërësinë e callback-eve të
filtrit owc_settings: një modul që e regjistron filtrin e vet pas leximit të parë e
zhvlerëson memon në vend që të shpërfillet. Memoja zbrazet me çdo shkrim të opsionit.
Vlerat e parazgjedhura
[
// Banneri
'banner_enabled' => true,
'banner_position' => 'bottom-bar', // bottom-bar | bottom-card | center-modal | top-bar
'banner_style' => 'auto', // auto | light | dark
'banner_accept_all' => true,
'banner_reject_all' => true,
'banner_preferences' => true,
'banner_close_x' => false, // kryqi = refuzim i nënkuptuar
'banner_show_logo' => true,
'text_title' => 'We use cookies',
'text_message' => 'We use cookies to personalise content, measure audience, '
. 'and provide social media features. You can accept or reject, '
. 'and change your choice at any time.',
'text_accept_all' => 'Accept all',
'text_reject_all' => 'Reject all',
'text_preferences' => 'Customize',
'text_save' => 'Save my choices',
// Butoni pluskues
'floating_button_enabled' => true,
'floating_button_position' => 'bottom-left',
'floating_button_style' => 'pill',
'floating_button_label' => 'Cookies',
// Pëlqimi
'consent_renewal_months' => 12, // 0 kthehet në 13, jo në «kurrë»
'consent_policy_hash_check' => true,
// Përputhshmëria
'compliance_profile' => 'gdpr',
'compliance_strict' => true,
'geo_enabled' => false,
'geo_default_profile' => 'gdpr',
'geo_mmdb_enabled' => false,
// IAB TCF v2.2
'tcf_enabled' => false,
'tcf_cmp_id' => 0,
'tcf_publisher_country' => 'FR',
'tcf_publisher_purposes_li' => [],
'tcf_special_features' => [],
// CCPA / GPC
'ccpa_inject_footer' => true,
'gpc_honor' => true,
// Google Consent Mode v2
'gcm_enabled' => true,
'gcm_ads_data_redaction' => true,
'gcm_url_passthrough' => true,
// Kategoritë
'cat_necessary_available' => true,
'cat_functional_available' => true,
'cat_analytics_available' => true,
'cat_marketing_available' => true,
'cat_preferences_available' => true,
'cat_social_available' => true,
'cat_necessary_label' => 'Necessary',
'cat_necessary_desc' => 'Strictly required for the site to function …',
'cat_functional_label' => 'Functional',
'cat_functional_desc' => 'Enhance the experience (chat, embedded videos, maps) …',
'cat_analytics_label' => 'Statistics',
'cat_analytics_desc' => 'Help us understand how you use the site (anonymously) …',
'cat_marketing_label' => 'Marketing',
'cat_marketing_desc' => 'Enable us to show you ads and content tailored …',
'cat_preferences_label' => 'Preferences',
'cat_preferences_desc' => 'Remember your interface choices (layout, saved filters).',
'cat_social_label' => 'Social & embeds',
'cat_social_desc' => 'Allow embedded social content (YouTube, Instagram, X) to load.',
// Regjistri
'ledger_enabled' => true,
'ledger_retention_days' => 1825, // 5 vjet; 0 = e pakufizuar
'ledger_hash_algo' => 'sha256',
// Skaneri
'scanner_enabled' => false,
'scanner_frequency' => 'weekly',
'scanner_alert_email' => '',
'scanner_max_urls' => 25,
'scanner_timeout' => 8,
'scanner_probe_mode' => 'admins',
// Portali i të drejtave
'dsar_enabled' => true,
'dsar_email' => '',
'dsar_response_days' => 30,
'dsar_notify_email' => '',
'dsar_token_ttl_days' => 7,
// Bllokimi
'blocker_unknown_script_policy' => 'allow',
'blocker_unknown_iframe_policy' => 'block',
'blocker_allowlist' => '', // një host për rresht
'blocker_block_resource_hints' => true,
// Integrimi dhe cikli i jetës
'forms_integration_enabled' => true,
'auto_footer_menu_inject' => false,
'delete_data_on_uninstall' => false,
// Identiteti ligjor
'legal_company_name' => '',
'legal_company_legal_form' => '',
'legal_company_capital' => '',
'legal_company_address' => '',
'legal_company_email' => '',
'legal_company_phone' => '',
'legal_country' => 'FR',
'legal_company_reg_number' => '',
'legal_company_reg_place' => '',
'legal_company_vat' => '',
'legal_publication_director' => '',
'legal_eu_representative' => '',
'legal_host_name' => '',
'legal_host_address' => '',
'legal_host_phone' => '',
'legal_host_url' => '',
'legal_profession_body' => '',
'legal_profession_title' => '',
'legal_profession_state' => '',
'legal_profession_rules' => '',
'legal_mediator_name' => '',
'legal_mediator_address' => '',
'legal_mediator_url' => '',
'legal_dpo_name' => '',
'legal_dpo_email' => '',
'legal_dpa_authority' => '', // bosh me qëllim: nxirret nga shteti + profili
'legal_transfer_countries' => '',
'legal_third_parties_note' => '',
'legal_automated_decisions' => false,
'legal_automated_decisions_desc' => '',
'legal_minor_age' => 15,
'legal_data_provision_note' => '',
'legal_currency' => 'EUR',
'legal_tax_label' => 'TTC',
'legal_business_type' => 'auto',
'retention_form_data_days' => 1095,
'retention_dsar_days' => 1095,
'policy_disclaimer' => true,
// Lidhjet
'link_privacy_policy' => '',
'link_cookie_policy' => '',
'link_terms' => '',
'link_legal_notice' => '',
]
Listat e mbyllura
Një vlerë jashtë listës sillet te parazgjedhja.
| Cilësimi | Vlerat e pranuara |
|---|---|
banner_position | bottom-bar, bottom-card, center-modal, top-bar |
banner_style | auto, light, dark |
floating_button_position | bottom-left, bottom-right, top-left, top-right |
floating_button_style | icon, pill |
compliance_profile, geo_default_profile | gdpr, ccpa, lgpd, popia, pipl, dpdp, quebec, uk_pecr, ch_nfadp, au, us_generic |
ledger_hash_algo | sha256, sha3-256 (të prera me atë që mbështet PHP-ja) |
scanner_frequency | hourly, twicedaily, daily, weekly |
scanner_probe_mode | admins, off |
legal_business_type | auto, vitrine, rental, ecommerce, services, saas, content |
blocker_unknown_script_policy, blocker_unknown_iframe_policy | allow, block |
Kufijtë e numrave të plotë
| Cilësimi | Kufijtë |
|---|---|
consent_renewal_months | 0 deri 13 (0 trajtohet si 13) |
dsar_response_days | 1 deri 30 |
dsar_token_ttl_days | 1 deri 90 |
ledger_retention_days | 0 deri 3650 (0 = e pakufizuar) |
scanner_max_urls | 1 deri 500 |
scanner_timeout | 1 deri 60 |
legal_minor_age | 13 deri 18 |
retention_form_data_days | 1 deri 3650 |
retention_dsar_days | 1 deri 3650 |
tcf_cmp_id | 0 deri 4095 |
Pastrimi i vlerave
text_messageështë e vetmja fushë me HTML të pasur; ajo pranon HTML-në e lejuar brenda një artikulli WordPress, dhe banneri renderon në fund vetëm<a href target rel>.- Fusha me shumë rreshta:
legal_company_address,legal_eu_representative,legal_host_address,legal_mediator_address,legal_third_parties_note,legal_automated_decisions_desc,legal_data_provision_note,blocker_allowlist, dhe çdo çelës që mbaron me_desc. - URL: çdo çelës me prefiksin
link_ose me prapashtesën_url, pluslegal_profession_rules. - Adresa e-maili: çdo çelës që përmban
email. - Gjithçka tjetër: tekst i thjeshtë.
- Një vlerë joskalare e dërguar mbi një cilësim skalar shpërfillet, çelësi nuk shkruhet.
Ku rregullohet çfarë
| Skeda | Cilësimet |
|---|---|
| Banner | banner_*, text_*, floating_button_*, consent_renewal_months, consent_policy_hash_check |
| Compliance | compliance_profile, compliance_strict, gcm_*, blocker_*, ccpa_inject_footer, gpc_honor, tcf_*, geo_*, auto_footer_menu_inject, forms_integration_enabled, delete_data_on_uninstall, link_* |
| Legal identity | legal_*, retention_form_data_days, retention_dsar_days, policy_disclaimer |
| Categories | cat_*_available, cat_*_label, cat_*_desc |
| Audit ledger | ledger_enabled, ledger_retention_days (algoritmi shfaqet, nuk modifikohet) |
| Scanner | scanner_* |
| DSAR requests | dsar_* |
Tabelat
| Tabela | Përmbajtja |
|---|---|
{prefix}owc_ledger | Regjistri i pëlqimeve, i lidhur në zinxhir |
{prefix}owc_dsar | Kërkesat për ushtrimin e të drejtave |
{prefix}owc_scanner | Gjetjet e skanerit |
{prefix}owc_scripts | Katalogu i firmave të bllokimit |
{prefix}owc_form_links | Lidhjet pëlqim ↔ dërgim OW Forms |
Një ndihmës PHP owc_table( 'ledger' | 'dsar' | 'scanner' | 'scripts' ) e rillogarit emrin
nga prefiksi aktual: përdoreni brenda një switch_to_blog(), meqë konstantet janë të
ngurtësuara për gjithë kohëzgjatjen e kërkesës.
Opsione dhe transient-e të tjera
Opsionet: owc_settings, owc_version, owc_pending_upgrade, owc_upgrade_lock,
owc_ledger_head, owc_ledger_trim, owc_ledger_key_source, owc_scanner_secret,
owc_scanner_lock, owc_scanner_queue, owc_scanner_status, owc_scanner_alerted,
owc_scanner_probe_status, owc_scanner_manual, owc_refusal_log, owc_tcf_status,
owc_tcf_gvl_version, owc_forms_db_version, plus flamujt e migrimit
(owc_catalog_sanitized_v2, owc_match_target_migrated_v1, owc_ledger_hmac_migrated_v1,
owc_inline_sig_labels_cleaned_v1, owc_scanner_secret_rotated_v1).
Transient-et: owc_catalog_<version>, owc_invalid_patterns, owc_gvl_cache,
owc_gvl_stub, owc_gvl_etag, owc_gvl_retry, owc_mmdb_<hash>,
owc_policies_hash, owc_site_analysis, owc_scanner_last_run,
owc_scanner_run_result, owc_scanner_pruned, owc_scanner_fail_alerted,
owc_ledger_verify_result, owc_ledger_write_error, owc_policy_gen_result,
owc_dsar_sla_alert, owc_dsar_admin_result, dhe numëruesit e kufizimit të shpeshtësisë.
Konstantet e njohura në wp-config.php
| Konstantja | Efekti |
|---|---|
OWC_LEDGER_KEY | Çelësi HMAC i regjistrit, si dhe çelësi i nxjerrë për cookie-n e zbulimit rajonal |
OWC_TRUSTED_PROXY / OWC_TRUSTED_PROXIES | Intervalet CIDR të proxy-ve të besuar; pa to, header-at e IP-së së klientit shpërfillen |
OWC_GEO_TRUSTED_HEADERS | cloudflare, cloudfront, proxy ose all |
OWC_BEHIND_CLOUDFLARE | Shkurtore për header-in e shtetit të Cloudflare-it |
OWC_BEHIND_CLOUDFRONT | Shkurtore për header-in e shtetit të CloudFront-it |
Hook-et për zhvilluesit
Filtrat
| Filtri | Roli |
|---|---|
owc_settings | Cilësimet efektive. Përgjigjja duhet të varet nga diçka e qëndrueshme për gjithë kërkesën |
owc_banner_texts | Tekstet e bannerit |
owc_bootstrap_config | Konfigurimi statik i shtypur në <head> — kurrë të dhëna sipas vizitorit |
owc_scripts_catalog | Rreshtat e katalogut para validimit |
owc_blocker_allowlist | Hoste që nuk bllokohen kurrë |
owc_scanner_urls | URL që duhen shfletuar (rikufizohen pastaj te hosti i faqes) |
owc_throttle_max | Buxheti i një kufiri shpeshtësie; 0 e çaktivizon |
owc_allowed_request_hosts | Hostet e pranuar për një shkrim publik |
owc_allow_headerless_write | Ngre dështimin e mbyllur mbi shkrimet pa origjinë (parazgjedhja false) |
owc_geo_mmdb_path | Shtegu i bazës MaxMind |
owc_tcf_purpose_map | Përputhja kategori → qëllime TCF |
owc_tcf_stub_config | Konfigurimi statik i stub-it TCF |
owc_policy_template | Trupi i papërpunuar i një shablloni — e çaktivizon kyçin e gjuhës |
owc_policy_vars | Variablat e një dokumenti |
owc_policy_html | HTML-ja përfundimtare e një dokumenti |
owc_dsar_types | Llojet e kërkesave të propozuara dhe të pranuara |
owc_dsar_form_notice | Njoftimi informues nën formular |
owc_dsar_export_bundle | Përmbajtja e pakos së transportueshmërisë |
owc_dsar_show_fulfilment_panel | Shfaqja e panelit të ekzekutimit |
Veprimet
| Veprimi | Nënshkrimi |
|---|---|
owc_consent_updated | ( array $categories, string $event, string $source ) |
owc_consent_cookie_not_sent | ( array $cookie, string $event ) |
owc_ledger_lock_failed | ( string $event, string $token ) |
owc_ledger_write_failed | ( $error, string $event, string $token ) |
owc_ledger_anchor | ( array $anchor ) |
owc_ledger_pruned | ( int $deleted, int $days ) |
owc_catalog_updated | — |
owc_gpc_honored | ( array $categories ) |
owc_tcf_inactive | ( string $reason ) |
owc_dsar_submitted | ( string $type, string $email, string $message ) |
owc_dsar_verified | ( int $id, array $row ) |
owc_dsar_fulfilled | ( int $id, string $what, $trace ) |
owc_dsar_mail_failed | ( int $id, string $email, string $kind ) |
Cron-et: owc_daily_maintenance, owc_ledger_retention, owc_scanner_run,
owc_scanner_run_batch, owc_tcf_refresh_gvl, owc_run_upgrade.
Ndërkombëtarizimi
Domeni i përkthimit është ow-consent, shtegu /languages. Gjuha burimore është
anglishtja. Paketa përfshin shabllonin ow-consent.pot dhe një përkthim të plotë frëngjisht.
Kujtesë e mekanizmit të përshkruar më lart: për sa kohë një etiketë ose një tekst banneri nuk personalizohet brenda cilësimeve, ai ndjek gjuhën e faqes. Sapo të shkruani vlerën tuaj, ajo shërbehet ashtu siç është, pavarësisht gjuhës së vizitorit.
Trupat e dokumenteve ligjore nuk kalojnë nga ky mekanizëm: gjuha e tyre ndjek juridiksionin, kurrë lokalen e administratorit.
Zgjidhja e problemeve
Banneri nuk shfaqet
Kalojeni listën me radhë:
- A është
banner_enabledi aktivizuar? Distinktivi në krye të ekranit të administrimit e thotë. - A i thërret tema juaj
wp_head()dhewp_footer()? Pa to, banneri refuzon të shtypet, në vend që të prodhojë kod inert. - A ka bërë tashmë ndonjë zgjedhje vizitori? Banneri shfaqet vetëm mbi
<html data-owc="none">. Provojeni në shfletim privat ose mewindow.OWCBanner.reset(). - A e ka vizitori JavaScript-in? Pa të, banneri mbetet i fshehur — me qëllim — dhe
blloku
<noscript>e merr rolin. - A po shërben një cache faqesh një version para aktivizimit? Zbrazeni.
Banneri kthehet në çdo faqe ndonëse zgjedhja u regjistrua
Tri shkaqe, sipas radhës së shpeshtësisë.
- Hosti ku ndodhet vizitori ndryshon nga hosti i konfiguruar në WordPress (
www.kundrejt apex-it, alias, domen preprodhimi). Atëherë shfletuesi refuzon ta ruajë cookie-n ndërsa WordPress-i përgjigjet me 200. Hapni panelin e kontrollit: regjistri i refuzimeve shfaq krah për krah origjinën dhe header-inHost. Zgjidhja është ta shërbeni faqen mbi një host të vetëm kanonik. consent_policy_hash_checkështë aktiv dhe dokumentet tuaja kanë ndryshuar — kjo është sjellja e dëshiruar, vizitori ripyetet pas një ndryshimi politike.- Jeni në një version para 1.4.3-shit. Atëherë cookie-ja kodohej dy herë dhe shfletuesi nuk arrinte ta rilexonte, ndërsa serveri e lexonte fare mirë. Përditësoni: cookie-t e shkruara para korrigjimit mbeten të lexueshme.
«Zgjedhja juaj nuk u regjistrua dot» — gabimi refused ose 403
Shikoni data-owc-code mbi elementin e mesazhit, ose regjistrin e refuzimeve të panelit të
kontrollit.
owc_bad_origin: origjina e deklaruar nuk është host i njohur. Përgjigjja i rendit hostet e pranuar. Nëse faqja juaj arrihet legjitimisht me disa emra, shtojini me filtrinowc_allowed_request_hosts.owc_missing_origin: as origjinë, as token. Zakonisht është një shtesë privatësie që i heq header-at, ose një proxy që i rishkruan.owc_bad_nonce: ka të bëjë vetëm me sondën e skanerit, jo me shkrimin e pëlqimit — nonce-i nuk është kurrë veto mbi/consent.
Gabimi ratelimit — 429
Kufijtë janë qëllimisht të ulët mbi shkrimet publike. Dy shkaqe:
- Një CDN ose një proxy i padeklaruar: të gjithë vizitorët tuaj mbërrijnë me të njëjtën
adresë dhe ndajnë të njëjtin buxhet. Deklarojeni me
OWC_TRUSTED_PROXYnëwp-config.php. - Një test i automatizuar që dërgon më shumë se 30 shkrime në 5 minuta nga e njëjta adresë.
Një 503 owc_ledger_write_refused
Regjistri refuzoi të shkruajë, prandaj nuk u regjistrua asgjë dhe nuk u lirua asnjë gjurmues. Kjo është sjellja e dëshiruar: një pëlqim që nuk mund të provohet nuk duhet pretenduar.
- Kontrolloni që tabela
{prefix}owc_ledgerekziston. Skeda Audit ledger shfaq një mesazh të lexueshëm «ende i painstaluar» në vend të një ekrani të bardhë. - Kontrolloni të drejtat e shkrimit të përdoruesit MySQL.
- Si zgjidhje e fundit, çaktivizoni përkohësisht
ledger_enabledpër ta rikthyer shërbimin — duke ditur se gjatë kësaj kohe e humbni provën.
Ka ende gjurmues që ngarkohen para pëlqimit
- A është
compliance_stricti aktivizuar? Pa të, trajtohen vetëm skriptet e vendosura në radhë nga WordPress-i. - A ndodhet gjurmuesi në katalog? Një skript i panjohur i palës së tretë lejohet si parazgjedhje. Nisni një shfletim, klasifikoni gjetjen: kjo e shkruan rregullin e bllokimit.
- A injektohet nga JavaScript first-party? Mbrojtja dinamike mbulon vetëm njëzet hoste. Shtoni një rregull katalogu mbi domenin e gjurmuesit.
- A është një cookie e vendosur me header-in
Set-Cookie? Asnjë bllokim nga ana e klientit nuk mund ta ndalë. Duhet trajtuar në burim, nga ana e serverit. - Kalojeni
blocker_unknown_script_policynëblock— e pastaj testojeni faqen me kujdes, sepse ky cilësim bllokon çdo palë të tretë të panjohur.
Një integrim legjitim është i bllokuar
Shtoni hostin e tij në blocker_allowlist, një për rresht, ose me filtrin
owc_blocker_allowlist. Kontrolloni edhe blocker_unknown_iframe_policy: iframe-t e
panjohura bllokohen si parazgjedhje, është rasti më i shpeshtë.
Nëse integrimi duhet të mbetet i kushtëzuar nga pëlqimi, klasifikojeni më mirë në kategorinë e duhur: zëvendësuesi vizual mbart një buton «Prano …» që e zhbllokon me një klikim.
Skaneri nuk gjen asgjë
- A është i aktivizuar? Ai është i çaktivizuar si parazgjedhje.
- A punon WP-Cron? Me
DISABLE_WP_CRONdhe pa cron sistemi, shfletimi i planifikuar nuk niset kurrë. Nisni një me dorë për të kontrolluar. - A është i mundur loopback-u HTTP? Një autentikim HTTP preprodhimi ose një mur zjarri e bllokon shfletimin. Paneli i mbulimit shfaq gabimin e parë.
- Shfletimi nga serveri nuk ekzekuton asnjë JavaScript. Vizitoni një faqe të sajtit si administrator i kyçur që sonda të raportojë atë që injekton një menaxher etiketash.
Në çdo rast, lexoni panelin «çfarë mbulon vërtet ky shfletim» para se të nxirrni përfundime: ai e dallon «nuk u gjet asgjë» nga «nuk u lexua asgjë».
Gjenerimi i një dokumenti refuzohet
Dy shkaqe të mundshme, dhe mesazhi e thotë:
- Ka fusha të detyrueshme bosh — shfaqet lista e çelësave që mungojnë. Plotësoni skedën Legal identity.
- Barrierë gjuhe — po kërkoni një njoftim ligjor ose kushte të përgjithshme për një
juridiksion jofrëngjishtfolës. Në këtë rast butoni fshihet. Rruga e vetme është të jepni
trupin tuaj përmes filtrit
owc_policy_template.
E-maili i verifikimit DSAR nuk mbërrin
Është pothuajse gjithnjë çështje dërgueshmërie, jo e shtojcës.
- Përgjigjja e API-së mbart
mail_sent: falsekur dërgimi ka dështuar, dhe formulari shfaq atëherë një mesazh të dedikuar që dërgon te adresa e kontaktit. - Instaloni një shtojcë SMTP. Funksioni
mail()i PHP-së refuzohet nga shumica e serverëve marrës. - Kontrolloni SPF-në, DKIM-in dhe DMARC-un e domenit tuaj. Shtojca nuk e rishkruan kurrë
adresën e dërguesit — kjo është ajo që do ta thyente SPF-në — ajo vendos vetëm një
Reply-To. - Kontrolloni që
dsar_emailtë jetë adresë e vlefshme.
Për sa kohë e-maili nuk merret e nuk konfirmohet, kërkesa mbetet pending dhe afati ligjor
nuk niset.
Moduli TCF nuk aktivizohet
Hapni skedën Compliance: një njoftim administrimi e emërton shkakun.
missing_cmp_id:tcf_cmp_idështë 0. Duhet të merrni një CMP ID pranë IAB Europe; shtojca nuk jep asnjë dhe refuzon të lëshojë një varg me identifikuesin 0.- CMP ID mbi 4095: vlera nuk hyn brenda fushës 12-bitëshe të vargut dhe do të tregonte një CMP tjetër.
no_gvl: Global Vendor List-i nuk është shkarkuar ende. Ai vjen me një cron ditor; kontrolloni që WP-Cron-i të punojë dhe që serveri juaj të mund të arrijëvendor-list.consensu.orgme HTTPS dalës.
Të gjithë vizitorët marrin profilin e konfiguruar, pavarësisht zbulimit rajonal
- A është
geo_enabledi aktivizuar? Ai është i çaktivizuar si parazgjedhje. - A e keni deklaruar proxy-n tuaj? Pa
OWC_BEHIND_CLOUDFLARE,OWC_BEHIND_CLOUDFRONToseOWC_GEO_TRUSTED_HEADERSnëwp-config.php, header-at e shtetit shpërfillen, sepse janë të falsifikueshëm. - A ndodhet skedari MaxMind në vend? Shtojca nuk e shkarkon dhe nuk ofron ekran ngarkimi.
- Ndoshta është normale: shfaqja e parë e një vizitori të shërbyer nga cache-i përdor profilin e konfiguruar sa kohë cookie-ja 24-orëshe nuk ekziston. Paneli i kontrollit shfaq një bllok diagnostikimi me shtetin e zbuluar, profilin e zbatuar dhe burimin.
Administrimi sinjalizon se çelësi i regjistrit jeton në bazë
Ky është njoftimi notice_ledger_key. Ai do të thotë se AUTH_KEY dhe AUTH_SALT nuk janë
në wp-config.php — atëherë WordPress-i i ruan në bazë — dhe se as OWC_LEDGER_KEY nuk
është e përcaktuar. Zinxhiri vazhdon të ndërtohet, por kushdo që ka qasje në bazë mund ta
rinënshkruajë: pretendimi i pafalsifikueshmërisë nuk qëndron më.
Zgjidhja është të shtoni OWC_LEDGER_KEY (dhe, meqë jeni aty, AUTH_KEY e AUTH_SALT) në
wp-config.php. Verifikimi pastaj e dallon një rotacion çelësi nga një rishkrim, prandaj ky
ndryshim nuk ua zhvlerëson historikun.
Shtojca nuk bën asgjë fare, me një njoftim të kuq
WordPress-i juaj është më i vjetër se 6.2. Shtojca refuzon të niset, dhe njoftimi thotë shprehimisht se asgjë nuk bllokohet dhe se asnjë pëlqim nuk regjistrohet. Përditësoni WordPress-in, ose çaktivizoni shtojcën dhe hiqni bannerin nga faqet tuaja ndërkohë.
Ka rregulla katalogu që «nuk mund të aktivizohen»
Një njoftim administrimi i sinjalizon, dhe skeda Tracker catalogue ka një filtër të dedikuar. Katër arsye të mundshme: model bosh ose i përbërë vetëm nga karaktere të padukshme, shprehje e rregullt që nuk kompilohet ose që bën backtracking katastrofik, model shumë i shkurtër dhe pa pikë për të synuar një URL, ose kategori që nuk ekziston më në faqe. Korrigjojini ose fshijini këta rreshta: ata japin një përshtypje të rreme mbulimi.
FAQ
A punon shtojca pas një cache faqesh? Po, dhe gjithë arkitektura e saj është ndërtuar rreth këtij kushti. HTML-ja e prodhuar është e njëjtë për të gjithë vizitorët; pëlqimi lexohet brenda shfletuesit dhe zbatohet para renderimit të parë. Asnjë nonce nuk shtypet brenda HTML-je të cache-ueshme. Vetëm përgjigjet vërtet personale shënohen si të pacache-ueshme.
A zëvendëson një CMP me pagesë? Në shumicën e faqeve, ai mbulon të njëjtin terren: banner, bllokim, ditar auditimi, kërkesa të drejtash, drejtim gjeografik dhe dokumente të gjeneruara. Dy gjëra që nuk i bën: nuk është një CMP i regjistruar pranë IAB Europe, dhe nuk jep as këshillë juridike, as dokumente të rishikuara — gjeneruesi prodhon drafte që duhet t'i çoni për miratim.
A është regjistri i pafalsifikueshëm?
Ai e nxjerr në pah çdo ndërhyrje, me një kusht. Çdo rresht nënshkruhet me HMAC mbi hash-in
e të mëparshmit: një rresht i modifikuar ose i fshirë e këput zinxhirin dhe verifikimi thotë
se ku. Garancia mbështetet mbi faktin që çelësi i nënshkrimit jeton jashtë bazës. Kështu
ndodh nëse AUTH_KEY dhe AUTH_SALT janë në wp-config.php, ose nëse përcaktoni
OWC_LEDGER_KEY. Përndryshe, WordPress-i i ruan salt-et në bazë dhe një sulmues që hyn atje
do të mund ta rinënshkruante zinxhirin — shtojca e zbulon këtë situatë dhe ju paralajmëron.
A e ngadalëson skaneri faqen? Jo. Ai është i çaktivizuar si parazgjedhje, dhe pasi aktivizohet punon mbi WP-Cron me shpeshtësinë që zgjidhni ju, duke marrë një mostër të faqeve tuaja nga ana e serverit. Ai nuk ekzekutohet kurrë gjatë vizitës së një vizitori.
A i gjen skaneri cookie-t?
Pjesërisht, dhe kjo është e rëndësishme të kuptohet. Shfletimi nga serveri lexon header-at
Set-Cookie të faqeve tuaja: pra i gjen cookie-t e vendosura nga serveri, përfshirë ato
HttpOnly. Ai nuk ekzekuton asnjë JavaScript, prandaj cookie-t e shkruara nga skriptet
brenda shfletuesit nuk i janë të dukshme; ato mblidhen nga një sondë që punon vetëm për një
administrator të kyçur. Trajtojeni rezultatin si inventar të asaj që u pa, jo si listë
shteruese — të dy ekranet e thonë këtë, në vend që t'ju lënë të supozoni të kundërtën.
Si ekzekutohet një kërkesë të drejtash? Personi e dërgon formularin dhe merr një e-mail verifikimi. Konfirmimi i kërkesës mbi faqen e lidhur e nis afatin e nenit 12.3 dhe hap një kërkesë vendase të WordPress-it. Nga ekrani DSAR ju shkarkoni një eksport JSON të prodhuar nga të gjithë eksportuesit e regjistruar në faqe, nisni të gjithë fshirësit, dhe e mbyllni me një përgjigje me shkrim që mbetet e bashkangjitur me kërkesën. Prandaj ajo që mbulon eksporti varet nga shtojcat e instaluara; ato që nuk regjistrojnë asnjërin prej këtyre hook-eve duhen trajtuar me dorë.
A mund ta përdor modulin TCF për AdSense ose Ad Manager? Vetëm me CMP ID-në tuaj të lëshuar nga IAB Europe, dhe edhe atëherë me një rezervë. Pa CMP ID, moduli nuk ngarkohet fare. Me një CMP ID, ai lëshon një varg TC të koduar si duhet dhe paneli shfaq çdo qëllim e çdo veçori speciale që ky varg mund të pretendojë — por politika e TCF-së i kërkon një CMP-je të regjistruar zgjedhje në nivel qëllimi dhe në nivel ofruesi. Këtu çelësat e qëllimeve ndjekin kategoritë dhe nuk ka asnjë zgjedhje ofruesi: ky nuk është një CMP i regjistruar, dhe ofruesit kanë të drejtë ta refuzojnë sinjalin e tij. Nëse të ardhurat reklamuese nën TCF kanë peshë për faqen tuaj, përdorni një CMP të certifikuar.
Në cilën gjuhë gjenerohen dokumentet? Politika e privatësisë dhe politika e cookie-ve ekzistojnë për të njëmbëdhjetë profilet, në gjuhën e juridiksionit: anglisht, frëngjisht për Francën, Belgjikën, Luksemburgun dhe Kebekun, portugalisht për Brazilin. Njoftimi ligjor dhe kushtet e përgjithshme ekzistojnë vetëm në frëngjisht; për çdo juridiksion tjetër, gjeneruesi refuzon t'i prodhojë në vend që të publikojë një dokument të papërshtatshëm.
Çfarë mund të ndryshoj te banneri?
Katër pozicione, një temë e çelët, e errët ose automatike, një logo opsionale, etiketat, dhe
një buton pluskues rihapjeje. Çdo element që mbart klasën owc-open-preferences e rihap
panelin. «Refuzoji të gjitha» renderohet me të njëjtën spikatje si «Pranoji të gjitha». Kryqi
i mbylljes është i çaktivizuar si parazgjedhje; i aktivizuar, ai regjistron një refuzim të
plotë, kurrë një mbyllje në heshtje. Paneli përdoret me tastierë, çelësat e tij mbartin një
gjendje të dukshme, dhe modalja e kap e pastaj e kthen fokusin. Tekstet janë të përkthyeshme
dhe të zëvendësueshme me filtrin owc_banner_texts.
Çfarë bllokon saktësisht bllokimi automatik? Skriptet e palëve të treta, fragmentet inline të gjurmimit, iframe-t, pikselat matës, fletët e stileve analytics dhe marketing, si dhe burimet e mediave të palëve të treta rishkruhen para pëlqimit dhe lirohen më pas, sipas radhës së dokumentit. Sugjerimet e burimeve drejt një pale të tretë të katalogueshme fshihen në vend që të shtyhen, meqë një sugjerim hap një lidhje dhe nuk ka asgjë për t'u rikthyer. Fletët dhe fontet e shërbyera nga një host i klasifikuar funksional lihen të paprekura. Atributet e ngarkimit me përtaci të shtojcave të cache-it neutralizohen që një ngarkues të mos rikthejë një URL të bllokuar. Shtojca sjell 175 firma, të redaktueshme nga ekrani Tracker catalogue dhe të zgjerueshme me filtër.
Çfarë regjistrohet në regjistër? Çdo veprim pëlqimi — pranim, refuzim, ruajtje e pjesshme, opt-out GPC, rinovim, tërheqje — i shtohet tabelës së zinxhirtë. Një rresht përmban një IP të pseudonimizuar, një hash të user-agent-it, URL-në e faqes, profilin e përputhshmërisë, një hash të dokumenteve në fuqi, një hash të bannerit që u shfaq vërtet dhe versionin e shtojcës — elementet që lejojnë të rindërtohet çfarë pa vizitori.
Çfarë mbrojtjesh ka formulari i të drejtave? Një kurth për robotë, një afat minimal plotësimi, një vetëdeklarim i detyrueshëm i kontrolluar nga ana e serverit, tre kufij të veçantë shpeshtësie, një token për një përdorim të vetëm i ruajtur vetëm si hash, dhe një konfirmim që kërkon një veprim të shprehur mbi faqen — në mënyrë që një skaner lidhjesh poste të mos konfirmojë dot një identitet në vend të personit. Një kërkesë autori i së cilës nuk e ka konfirmuar kurrë identitetin nuk mund as të eksportohet, as të fshihet, as të shënohet si e përmbushur, dhe ky kontroll zbatohet nga ana e serverit, jo thjesht duke fshehur butona.
Cilat sinjale të Google Consent Mode v2 lëshohen?
Të shtatë: ad_storage, ad_user_data, ad_personalization, analytics_storage,
functionality_storage, personalization_storage dhe security_storage. Gjashtë kategoritë
u lidhen atyre nga një burim i vetëm i së vërtetës, kështu që banneri, bllokimi dhe
bootstrap-i nuk mund të divergojnë.
Si trajtohen opt-out-i CCPA dhe GPC-ja? Një kontroll «Do Not Sell or Share» injektohet në fundfaqe ose vendoset me shortcode. Klikimi i parë e regjistron opt-out-in, siç e kërkojnë rregulloret kaliforniane, në vend që të hapë një panel. Sinjali Global Privacy Control trajtohet si opt-out detyrues nën profilet amerikane, një herë për çdo sesion shfletimi, dhe vizitori njoftohet nëse ai ka zëvendësuar një zgjedhje që ai e kishte regjistruar. Nën profilet e familjes GDPR, GPC-ja trajtohet si tregues: kategoritë opsionale para-refuzohen brenda ndërfaqes, banneri mbetet i shfaqur, dhe nuk regjistrohet asgjë — sepse aty pëlqimi duhet të jetë veprim pozitiv.
Cilat cookie vendos vetë shtojca?
Të gjitha janë cookie të brendshme, asnjëra nuk shërben për gjurmim, dhe të gjitha
deklarohen brenda politikës së gjeneruar të cookie-ve: owc_consent (zgjedhjet, tokeni
pseudonim i shfletuesit dhe profili; kohëzgjatja sipas cilësimit të rinovimit, 12 muaj si
parazgjedhje, me tavan 13), owc_geo (shteti dhe profili i zbuluar, 24 orë, pa asnjë adresë
IP), owc_gpc (shënues sesioni), owc_gpc_notice (5 minuta), dhe euconsent-v2 (vargu TCF,
vetëm nëse moduli është aktiv dhe pas një veprimi të vizitorit).
A punon në multisite? Po. Çdo faqe e rrjetit ka tabelat e veta dhe cilësimet e veta. Një aktivizim rrjeti i shfleton të gjitha faqet vetëm nëse rrjeti ka jo më shumë se 200; përtej kësaj, çdo faqe furnizohet në kërkesën e saj të parë.
Po nëse e fshij shtojcën? Regjistri, gjetjet e skanerit, katalogu, lidhjet me OW Forms, opsionet dhe cilësimet mbijetojnë si parazgjedhje. Dy gjëra ikin gjithnjë, pavarësisht cilësimit tuaj: gjashtë detyrat e planifikuara, dhe tabela e kërkesave të të drejtave — është e vetmja që përmban të dhëna personale drejtpërdrejt identifikuese për palë të treta, dhe sapo shtojca të ketë ikur, asgjë nuk ia kufizon më ruajtjen dhe asnjë ekran nuk lejon t'u përgjigjeni. Eksportoni kërkesat tuaja para se ta fshini shtojcën. Për një pastrim të plotë të pjesës tjetër, aktivizoni «Delete all data on uninstall» para fshirjes.
Ku gjendet mbështetja?
- Portali i mbështetjes: https://optionweb.dev/sq/addons/support/
- E-mail: support@optionweb.dev
- Dokumentacioni: https://optionweb.dev/sq/addons/ow-consent/