Rettelser af tilgængelighed i koden til dit tema på WooCommerce
Validiscan retter tilgængelighedsfejl i dit WordPress-tema eller child-tema: i dets PHP-skabeloner, herunder de WooCommerce-skabeloner, det overstyrer, og i dets stilark og scripts. Intet når din live webshop, før du eller din udvikler merger eller anvender ændringerne og sætter temaet live.
Senest opdateret:
På denne side: 7 svar
Hvad ændrer Validiscan i et WooCommerce-tema?
Validiscan ændrer dit temas egne filer og intet andet: PHP-skabeloner, herunder de WooCommerce-skabeloner, det overstyrer, functions.php, stilark og scripts. En ændring af andre filtyper end PHP, CSS, SCSS, JavaScript, HTML og JSON består ikke Validiscans kontroller, og ingen rettelse tilføjer et plugin eller et overlay.
Opskrifterne er skrevet til klassiske WordPress-temaer, der er bygget af PHP-skabeloner, ikke til bloktemaer, hvis skabeloner er HTML-filer. På et bloktema overlades en fejl, som ingen opskrift retter, til et menneske, og en skabelon, der er ændret i Site Editor, gemmes i webstedets database, så en ændring af temaets filer når den ikke (WordPress Theme Handbook om skabeloner). Opskrifterne ændrer kun opmærkning, hvor de temafiler, Validiscan modtager, udskriver den. Opmærkning, der udskrives fra andre filer, for eksempel fra WordPress, WooCommerce, et andet plugin eller et parent-tema, der ikke er en del af den kilde, overlades til et menneske; et cookiebanner, der er tilføjet af et samtykkeplugin, er et eksempel. Én undtagelse er WooCommerces egne felter til fakturering og levering: Et filter i dit temas functions.php sætter deres autocomplete-værdier (se opskriften nedenfor).
Detaljer: hvilke filer en ændring må berøre, kontrollen af hver ændring, og hvad en rettelse må tilføje
Validiscan ændrer dit temas egne filer og intet andet: PHP-skabelonerne, herunder de WooCommerce-skabeloner, som dit tema overstyrer i sin mappe woocommerce (WooCommerces dokumentation om overstyring af skabeloner), functions.php og temaets stilark og scripts. En ændring må kun berøre PHP-, CSS-, SCSS-, JavaScript-, HTML- og JSON-filer og aldrig en fil i en vendor-, node_modules-, wp-admin- eller wp-includes-mappe på øverste niveau. En ændring af enhver anden fil består ikke Validiscans kontroller og kan ikke godkendes. Hver ændret PHP-fil gennemgår desuden PHP’s egen syntakskontrol (php -l), som læser filen uden at køre den. Opskrifterne redigerer aldrig en minificeret .min.css- eller .min.js-fil; sådanne filer er build-output.
Hver ændring er en almindelig redigering af en temafil, som din udvikler kan læse linje for linje. Nogle få rettelser tilføjer et par linjer til temaets eget script, for eksempel for at forbinde en pauseknap med et slideshow eller for at få en ændring i kurven læst op. Ingen rettelse tilføjer et plugin eller et overlay, og der indsættes intet, som retter dine sider i den besøgendes browser. Indlejret tredjepartsindhold som betalings- eller chatwidgets indgår ikke i et projekt.
Hvordan får Validiscan adgang til dit WooCommerce-tema?
Validiscan når dit WooCommerce-tema på en af to måder: gennem det GitHub-repository, der rummer det, eller ud fra en ZIP-fil med temamappen, som du uploader. Hvilken der passer, afhænger af, hvor dit temas kode ligger, og den afgør også, hvordan ændringerne kommer tilbage til dig.
| Vej ind | Det giver du | Ændringerne kommer tilbage som |
|---|---|---|
| Gennem dit GitHub-repository | Adgang til det repository, der rummer dit tema eller child-tema, gennem Validiscans GitHub-app eller et adgangstoken | En pull request |
| Ud fra en ZIP-fil med din temamappe | Din temamappe under wp-content/, inklusive child-temaet, hvis du bruger et, som én ZIP-fil på op til 100 MB, uploadet i kundeportalen af en administrator i din organisation | En patchpakke |
Gennem dit GitHub-repository
Hvis dit tema eller child-tema ligger i et GitHub-repository, giver du Validiscan adgang til det repository. Du installerer Validiscans GitHub-app på det eller giver Validiscan et adgangstoken, som Validiscan opbevarer krypteret. Appen beder om læse- og skriveadgang til repositoriets indhold og pull requests og om læseadgang til dets metadata. Opskrifterne forventer temaets style.css og functions.php i roden af repositoriet, så repositoriet bør rumme selve temamappen, ikke en hel WordPress-installation. Ændringerne kommer så som en pull request.
Ud fra en ZIP-fil med din temamappe
Hvis dit tema ikke ligger i et repository, beder kundeportalen dig om at lade din udvikler lave en ZIP-fil med din temamappe under wp-content/themes, inklusive child-temaet, hvis du bruger et. En administrator i din organisation uploader den derefter i kundeportalen som én ZIP-fil på op til 100 MB. Validiscan udarbejder ændringerne ud fra den kopi af dit tema og sender resultatet til din udvikler som en patchpakke. Hvor rettelser hører hjemme i et WooCommerce-tema, og hvad en temaopdatering kan fortryde
Hvordan når ændringerne frem til din webshop?
Validiscan leverer kun ændringer, som Validiscan har gennemgået og godkendt, som en pull request eller som en patchpakke, og ingen af delene berører din live WooCommerce-webshop. Det er fortsat dig eller din udvikler, der anvender ændringerne og sætter dem live; levering som en upubliceret kopi af temaet findes kun på Shopify.
- Validiscan leverer de ændringer, som Validiscan har gennemgået og godkendt: en pull request på en ny branch eller en patchpakke til din udvikler.
- Din udvikler eller dit bureau gennemgår ændringerne. Ved en pull request beder tjeklisten om et staging- eller forhåndsvisningsmiljø, ikke den live webshop, og om at betjene de ændrede elementer med tastaturet alene.
- Du eller din udvikler merger pull requesten eller anvender patchpakken og tester ændringerne.
- Du eller din udvikler sætter temaet live.
- Når ændringerne er live, kontrollerer en verifikationsscanning de berørte sider igen.
En pull request
Med adgang til dit repository opretter Validiscan en ny branch med navnet validiscan/, committer hver rettelse for sig og åbner én pull request med en oversigtstabel, en forklaring af hver ændring og en tjekliste til gennemgangen. Der pushes intet til din standardbranch. Tjeklisten beder din udvikler om at rulle branchen ud i et staging- eller forhåndsvisningsmiljø, ikke i den live webshop, og om at betjene de ændrede elementer med tastaturet alene. Det er fortsat dig, der merger og ruller ud.
En patchpakke
Ud fra en uploadet temamappe udarbejder Validiscan et zip-arkiv til din udvikler. Det indeholder PATCH.md med hver ændring og en vejledning i at anvende den, alle ændringer i én patchfil, som kan anvendes med git apply, én patchfil pr. rettelse, de komplette ændrede filer og en README.md. Din udvikler anvender ændringerne, tester dem og sætter temaet live. Hvad en pull request og en patchpakke indeholder
Tilføjes der ny tekst på din webshops sprog?
Kun på engelsk. Validiscans WooCommerce-opskrifter tilføjer ny tekst som en oversættelig streng i dit temas tekstdomæne og tilføjer ingen oversættelser. Hvis din webshop er på tysk eller et andet sprog, er det din udviklers opgave at oversætte den nye tekst.
- Generér temaets
.pot-fil igen. - Tilføj oversættelserne til dets
.po-filer. - Kompilér de
.mo-filer, som WordPress læser.
Detaljer: hvilken tekst opskrifterne tilføjer, og hvordan WordPress læser oversættelser
Validiscans WooCommerce-opskrifter tilføjer kun ny tekst på engelsk. Når en opskrift tilføjer tekst til de besøgende, for eksempel ordene i et spring over-link, teksten på en pauseknap eller navnet på en ikonknap, tilføjer den teksten som en oversættelig streng i dit temas tekstdomæne og tilføjer ingen oversættelser. På Shopify, Shopware og Magento kan opskrifterne også tilføje tysk tekst; på WooCommerce gør de ikke.
Hvis din webshop er på tysk eller et andet sprog, er det din udviklers opgave at oversætte den nye tekst: Generér temaets .pot-fil igen, tilføj oversættelserne til dets .po-filer, og kompilér de .mo-filer, som WordPress læser. Fremgangsmåden er beskrevet i WordPress’ dokumentation om lokalisering. Opskrifterne nedenfor angiver, hvor de tilføjer tekst.
Hvad ændrer opskrifterne i et WooCommerce-tema?
Hver af Validiscans 20 opskrifter til WooCommerce-temaer er en deterministisk ændring for én slags fejl: Den samme kode får altid den samme ændring. En opskrift foretager kun en ændring, hvor temaets kode viser, hvad den rigtige ændring er; ellers overlades fundet til et menneske.
Sidestruktur og navigation
-
Sidens sprog ud fra dine WordPress-indstillinger html-lang En header-skabelon, hvis
<html>-element udelader sproget eller har en fastlang-værdi, der ikke er gyldig, får WordPress’language_attributes(), som udskriver webstedets sprog.Opskriften får
<html>-elementet i dine header-skabeloner til at hente sit sprog fra WordPress’language_attributes(), som udskriver webstedets sprog eller det sprog, et flersproget plugin angiver, så skærmlæsere udtaler siden rigtigt. En header-skabelon, der udelader sproget, får kaldet tilføjet, og en fastlang-værdi, der ikke er gyldig, erstattes af det. Hvis den forkerte værdi kommer fra indstillingen for webstedets sprog i din WordPress-administration, ændrer opskriften intet, fordi det er en indstilling og ikke temakode. Hvor temaet allerede læser et sprogfelt for hver side, for eksempel til tyske juridiske sider i en engelsksproget webshop, angiver et filter ifunctions.phpden sides sprog, og sidehovedet og sidefoden på webstedet beholder webshoppens sprog. Uden et sådant felt gætter opskriften ikke på sproget.- Regler, den dækker
-
-
html-has-langAUTO kontrolleres via vs-lang -
html-lang-validAUTO kontrolleres via vs-lang -
vs-langAUTO
-
- Filtyper, den ændrer
-
.php
adds language_attributes() to the checkout header of the fixture theme Eksempeldata header-checkout.php Ændringer i header-checkout.php: 1 tilføjet, 1 fjernet
Ændringer i header-checkout.php: 1 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 8 8 9 9 ?><!doctype html> 10 10 <?php // VALIDISCAN-SEED vs-lang: copied from a landing-page plugin, language_attributes() is missing, so <html> has no lang. ?> 11 Fjernet <html> 11 Tilføjet <html <?php language_attributes(); ?>> 12 12 <head> 13 13 <meta charset="<?php bloginfo( 'charset' ); ?>"> 14 14 <?php // VALIDISCAN-SEED meta-viewport: zooming is disabled. ?> -
Spring over-link, hovedområde og navngivne menuer skip-link-main Et spring over-link, hvor en header-skabelon ikke har et, et
<main>-område ud fra sidens indholdscontainer, hvor der ikke findes et, og navne til navigationsområder, hvis formål fremgår, alt sammen på engelsk.Hver header-skabelon uden et spring over-link får et link med teksten »Skip to content« lige efter det åbnende
<body>-tag eller efter kaldet tilwp_body_open(), der følger efter det. Det er skjult, indtil det får fokus, og det fører til sidens indhold. Hvis dit tema er et child-tema af Storefront og har slået Storefronts spring over-links fra, slås de i stedet til igen. Hvor skabelonerne endnu ikke har noget hovedområde, bliver sideskabelonernes indholdscontainer, en<div>med id’etmaineller klassensite-main, til et<main>-element, som markerer den som sidens hovedområde; hvor temaets stilregler eller scripts udpeger den container som endiv, forbliver den, som den er. Navigationsområder, hvis formål fremgår af deres id eller klasse, får et navn, for eksempel Primary navigation, Breadcrumb, Footer navigation eller Pagination. Et eksisterende spring over-link, der ikke peger på noget, får indholdet som mål. Linkteksten og navnene tilføjes på engelsk.- Regler, den dækker
-
-
bypassAUTO kontrolleres via vs-headings-landmarks -
landmark-one-mainAUTO kontrolleres via vs-headings-landmarks -
regionAUTO -
skip-linkAUTO -
vs-headings-landmarksAUTO -
landmark-uniqueASSISTED
-
- Filtyper, den ændrer
-
.php
restores the skip links, adds <main> and labels the navigation of the fixture theme Eksempeldata 404.php Ændringer i 404.php: 2 tilføjet, 2 fjernet
Ændringer i 404.php: 2 tilføjet, 2 fjernet Linje før Linje efter Ændring Kode 9 9 ?> 10 10 11 11 <div id="primary" class="content-area"> 12 Fjernet <div id="main" class="site-main"> 12 Tilføjet <main id="main" class="site-main"> 13 13 <div class="error-404 not-found"> 14 14 <div class="page-content"> 15 15 <header class="page-header"> 22 22 </section> 23 23 </div> 24 24 </div> 25 Fjernet </div><!-- #main --> 25 Tilføjet </main><!-- #main --> 26 26 </div><!-- #primary --> 27 27 28 28 <?php archive-product.php Ændringer i archive-product.php: 2 tilføjet, 2 fjernet
Ændringer i archive-product.php: 2 tilføjet, 2 fjernet Linje før Linje efter Ændring Kode 22 22 23 23 <div id="primary" class="content-area"> 24 24 <?php // VALIDISCAN-SEED vs-headings-landmarks + region: <div> instead of <main>. ?> 25 Fjernet <div id="main" class="site-main"> 25 Tilføjet <main id="main" class="site-main"> 26 26 27 27 <header class="woocommerce-products-header"> 28 28 <h1 class="woocommerce-products-header__title page-title"><?php woocommerce_page_title(); ?></h1> 46 46 <?php do_action( 'woocommerce_no_products_found' ); ?> 47 47 <?php endif; ?> 48 48 49 Fjernet </div><!-- #main --> 49 Tilføjet </main><!-- #main --> 50 50 </div><!-- #primary --> 51 51 52 52 <?php // The sidebar div gets role="complementary" but no label (VALIDISCAN-SEED landmark-unique on pages with two). ?> front-page.php Ændringer i front-page.php: 2 tilføjet, 2 fjernet
Ændringer i front-page.php: 2 tilføjet, 2 fjernet Linje før Linje efter Ændring Kode 18 18 19 19 <div id="primary" class="content-area"> 20 20 <?php // VALIDISCAN-SEED vs-headings-landmarks + region: the content wrapper is a <div>, not <main>. ?> 21 Fjernet <div id="main" class="site-main"> 21 Tilføjet <main id="main" class="site-main"> 22 22 23 23 <?php get_template_part( 'template-parts/hero-slider' ); ?> 24 24 62 62 ?> 63 63 </section> 64 64 65 Fjernet </div><!-- #main --> 65 Tilføjet </main><!-- #main --> 66 66 </div><!-- #primary --> 67 67 68 68 <?php functions.php Ændringer i functions.php: 1 tilføjet, 4 fjernet
Ændringer i functions.php: 1 tilføjet, 4 fjernet Linje før Linje efter Ændring Kode 32 32 * Storefront pieces the child theme does not use. 33 33 */ 34 34 function kb_remove_storefront_parts() { 35 Fjernet // VALIDISCAN-SEED vs-headings-landmarks: Storefront's "Skip to navigation / Skip to content" 36 Fjernet // links are removed because "they flash on the first Tab"; nothing replaces them. 37 Fjernet remove_action( 'storefront_before_header', 'storefront_skip_links', 0 ); 38 35 remove_action( 'storefront_footer', 'storefront_handheld_footer_bar', 999 ); 39 36 remove_action( 'storefront_header', 'storefront_product_search', 40 ); 40 37 } 212 209 $defaults['delimiter'] = '<span class="breadcrumb-separator"> / </span>'; 213 210 // VALIDISCAN-SEED landmark-unique + vs-headings-landmarks: the breadcrumb <nav> has no aria-label, 214 211 // like the primary and the footer navigation. 215 Fjernet $defaults['wrap_before'] = '<div class="storefront-breadcrumb"><div class="col-full"><nav class="woocommerce-breadcrumb">'; 212 Tilføjet $defaults['wrap_before'] = '<div class="storefront-breadcrumb"><div class="col-full"><nav class="woocommerce-breadcrumb" aria-label="' . esc_attr__( 'Breadcrumb', 'kestrel-birch' ) . '">'; 216 213 $defaults['wrap_after'] = '</nav></div></div>'; 217 214 return $defaults; 218 215 } header-checkout.php Ændringer i header-checkout.php: 1 tilføjet, 0 fjernet
Ændringer i header-checkout.php: 1 tilføjet, 0 fjernet Linje før Linje efter Ændring Kode 18 18 19 19 <body <?php body_class(); ?>> 20 20 <?php wp_body_open(); ?> 21 Tilføjet <a class="skip-link screen-reader-text" href="#content"><?php esc_html_e( 'Skip to content', 'kestrel-birch' ); ?></a> 21 22 22 23 <div id="page" class="hfeed site"> 23 24 <header id="masthead" class="site-header kb-checkout-header" role="banner"> header.php Ændringer i header.php: 1 tilføjet, 1 fjernet
Ændringer i header.php: 1 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 74 74 <div class="storefront-primary-navigation"> 75 75 <div class="col-full"> 76 76 <?php // VALIDISCAN-SEED landmark-unique + vs-headings-landmarks: the primary <nav> has no aria-label. ?> 77 Fjernet <nav id="site-navigation" class="main-navigation"> 77 Tilføjet <nav id="site-navigation" class="main-navigation" aria-label="<?php esc_attr_e( 'Primary navigation', 'kestrel-birch' ); ?>"> 78 78 <?php 79 79 wp_nav_menu( 80 80 array( page-contact.php Ændringer i page-contact.php: 2 tilføjet, 2 fjernet
Ændringer i page-contact.php: 2 tilføjet, 2 fjernet Linje før Linje efter Ændring Kode 24 24 25 25 <div id="primary" class="content-area"> 26 26 <?php // VALIDISCAN-SEED vs-headings-landmarks + region: <div> instead of <main>. ?> 27 Fjernet <div id="main" class="site-main"> 27 Tilføjet <main id="main" class="site-main"> 28 28 <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>> 29 29 <header class="entry-header"><?php the_title( '<h1 class="entry-title">', '</h1>' ); ?></header> 30 30 <div class="entry-content"> 85 85 </div> 86 86 </div> 87 87 </article> 88 Fjernet </div><!-- #main --> 88 Tilføjet </main><!-- #main --> 89 89 </div><!-- #primary --> 90 90 91 91 <?php page.php Ændringer i page.php: 2 tilføjet, 2 fjernet
Ændringer i page.php: 2 tilføjet, 2 fjernet Linje før Linje efter Ændring Kode 13 13 14 14 <div id="primary" class="content-area"> 15 15 <?php // VALIDISCAN-SEED vs-headings-landmarks + region: <div> instead of <main>. ?> 16 Fjernet <div id="main" class="site-main"> 16 Tilføjet <main id="main" class="site-main"> 17 17 18 18 <?php 19 19 while ( have_posts() ) : 35 35 endwhile; 36 36 ?> 37 37 38 Fjernet </div><!-- #main --> 38 Tilføjet </main><!-- #main --> 39 39 </div><!-- #primary --> 40 40 41 41 <?php search.php Ændringer i search.php: 2 tilføjet, 2 fjernet
Ændringer i search.php: 2 tilføjet, 2 fjernet Linje før Linje efter Ændring Kode 11 11 12 12 <div id="primary" class="content-area"> 13 13 <?php // VALIDISCAN-SEED vs-headings-landmarks + region: <div> instead of <main>. ?> 14 Fjernet <div id="main" class="site-main"> 14 Tilføjet <main id="main" class="site-main"> 15 15 <header class="woocommerce-products-header"> 16 16 <h1 class="woocommerce-products-header__title page-title"> 17 17 <?php 36 36 <?php else : ?> 37 37 <?php wc_no_products_found(); ?> 38 38 <?php endif; ?> 39 Fjernet </div><!-- #main --> 39 Tilføjet </main><!-- #main --> 40 40 </div><!-- #primary --> 41 41 42 42 <?php single-product.php Ændringer i single-product.php: 2 tilføjet, 2 fjernet
Ændringer i single-product.php: 2 tilføjet, 2 fjernet Linje før Linje efter Ændring Kode 13 13 14 14 <div id="primary" class="content-area"> 15 15 <?php // VALIDISCAN-SEED vs-headings-landmarks + region: <div> instead of <main>. ?> 16 Fjernet <div id="main" class="site-main"> 16 Tilføjet <main id="main" class="site-main"> 17 17 <?php 18 18 while ( have_posts() ) : 19 19 the_post(); 20 20 wc_get_template_part( 'content', 'single-product' ); 21 21 endwhile; 22 22 ?> 23 Fjernet </div><!-- #main --> 23 Tilføjet </main><!-- #main --> 24 24 </div><!-- #primary --> 25 25 26 26 <?php -
En titel på hver side document-title-template Det, der i temaet forhindrer WordPress’ genererede sidetitel i at blive vist, repareres; en titel fra et SEO-plugin eller fra en sides egne indstillinger bliver, som den er.
WordPress bygger selv en sidetitel ud fra navnet på siden eller produktet, sidetallet på en liste med sideinddeling og webshoppens navn. Opskriften reparerer det, der i temaet forhindrer den titel i at blive vist. Et titelfilter, der returnerer en tilpasset titel, for eksempel fra et SEO-felt, bruger i stedet den genererede titel, når feltet er tomt. En fast
<title>-tekst i en header-skabelon erstattes af den titel, WordPress genererer. Et tema, der ikke er et child-tema og slet ikke udskriver nogen titel, får WordPress’ titelunderstøttelse slået til ifunctions.php. Når titlen kommer fra et SEO-plugin eller fra en sides egne indstillinger, ændrer opskriften intet.- Regler, den dækker
-
-
document-titleAUTO
-
- Filtyper, den ændrer
-
.php
lets the empty custom SEO title fall back to the generated title Eksempeldata functions.php Ændringer i functions.php: 2 tilføjet, 1 fjernet
Ændringer i functions.php: 2 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 87 87 if ( is_singular() && metadata_exists( 'post', get_the_ID(), '_kb_seo_title' ) ) { 88 88 // VALIDISCAN-SEED document-title: the Contact page has the field saved empty, and an empty 89 89 // string wins over the generated title, so <title> is empty there. 90 Fjernet return (string) get_post_meta( get_the_ID(), '_kb_seo_title', true ); 90 Tilføjet $custom_title = trim( (string) get_post_meta( get_the_ID(), '_kb_seo_title', true ) ); 91 Tilføjet return '' !== $custom_title ? $custom_title : $title; 91 92 } 92 93 return $title; 93 94 } -
Overskrifter uden oversprungne niveauer heading-levels En overskrift, der springer et niveau over, får niveauet lige under overskriften før den og beholder sine klasser, medmindre temaets stilregler eller scripts udpeger den via dens niveau.
En overskrift, der springer et niveau over, for eksempel en h4 lige efter en h2, får det niveau, der ligger lige under overskriften før den, i skabelonen eller i den PHP-streng, der udskriver den. Widget-titler og overskrifter i sidefoden eller en sidebjælke bliver h2. Når springet kommer fra en WooCommerce-skabelon, der vises lige efter sidens titel, for eksempel Billing details og Shipping details i kassen, flytter overskrifterne på samme niveau i de nærliggende skabeloner med. Kun niveauet ændres: Hver overskrift beholder sine klasser, og en overskrift, som temaets stilregler eller scripts udpeger via dens niveau, bliver, som den er. En overskrift uden klasse får temaets udseende for sit nye niveau. På en side uden hovedoverskrift bliver det element, der allerede ligner sidens titel, til h1: et element med en titelklasse, der er sat til mindst 24 pixels. Har en side intet sådant element, tilføjer opskriften ingen overskrift og overlader det til et menneske.
- Regler, den dækker
-
-
heading-orderAUTO kontrolleres via vs-headings-landmarks -
page-has-heading-oneAUTO kontrolleres via vs-headings-landmarks -
vs-headings-landmarksAUTO
-
- Filtyper, den ændrer
-
.php
gives the home page its <h1> and fixes the teaser and widget title levels Eksempeldata front-page.php Ændringer i front-page.php: 2 tilføjet, 2 fjernet
Ændringer i front-page.php: 2 tilføjet, 2 fjernet Linje før Linje efter Ændring Kode 24 24 25 25 <div class="kb-intro"> 26 26 <?php // VALIDISCAN-SEED vs-headings-landmarks: the page title is a styled <p>, the page has no <h1>. ?> 27 Fjernet <p class="kb-intro__title"><?php esc_html_e( 'Woollen outdoor clothing, made to last', 'kestrel-birch' ); ?></p> 27 Tilføjet <h1 class="kb-intro__title"><?php esc_html_e( 'Woollen outdoor clothing, made to last', 'kestrel-birch' ); ?></h1> 28 28 <p><?php echo esc_html( get_the_excerpt() ); ?></p> 29 29 <p class="kb-popular"> 30 30 <?php esc_html_e( 'Looking for something warm?', 'kestrel-birch' ); ?> 44 44 <article class="kb-teaser"> 45 45 <?php echo get_the_post_thumbnail( $kb_post, 'woocommerce_single', array( 'loading' => 'lazy' ) ); ?> 46 46 <?php // VALIDISCAN-SEED vs-headings-landmarks: teaser titles jump from h2 to h4. ?> 47 Fjernet <h4 class="kb-teaser__title"><?php echo esc_html( get_the_title( $kb_post ) ); ?></h4> 47 Tilføjet <h3 class="kb-teaser__title"><?php echo esc_html( get_the_title( $kb_post ) ); ?></h3> 48 48 <p><?php echo esc_html( get_the_excerpt( $kb_post ) ); ?></p> 49 49 <?php // VALIDISCAN-SEED vs-link-purpose: three identical "Read more" links to different targets. ?> 50 50 <a class="kb-teaser__more" href="<?php echo esc_url( get_post_meta( $kb_post->ID, '_kb_teaser_url', true ) ); ?>"><?php esc_html_e( 'Read more', 'kestrel-birch' ); ?></a> functions.php Ændringer i functions.php: 2 tilføjet, 2 fjernet
Ændringer i functions.php: 2 tilføjet, 2 fjernet Linje før Linje efter Ændring Kode 53 53 'after_widget' => '</div>', 54 54 // VALIDISCAN-SEED vs-headings-landmarks: footer widget titles are h4, directly after 55 55 // the h2 sections of the page (skipped heading level). 56 Fjernet 'before_title' => '<h4 class="widget-title">', 57 Fjernet 'after_title' => '</h4>', 56 Tilføjet 'before_title' => '<h2 class="widget-title">', 57 Tilføjet 'after_title' => '</h2>', 58 58 ) 59 59 ); 60 60 } moves the checkout section headings from h3 to h2, as in the fixed checkout Eksempeldata woocommerce/checkout/form-billing.php Ændringer i woocommerce/checkout/form-billing.php: 1 tilføjet, 1 fjernet
Ændringer i woocommerce/checkout/form-billing.php: 1 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 15 15 defined( 'ABSPATH' ) || exit; 16 16 ?> 17 17 <div class="woocommerce-billing-fields"> 18 Fjernet <h3><?php esc_html_e( 'Billing details', 'woocommerce' ); ?></h3> 18 Tilføjet <h2><?php esc_html_e( 'Billing details', 'woocommerce' ); ?></h2> 19 19 20 20 <div class="woocommerce-billing-fields__field-wrapper"> 21 21 <?php woocommerce/checkout/form-checkout.php Ændringer i woocommerce/checkout/form-checkout.php: 1 tilføjet, 1 fjernet
Ændringer i woocommerce/checkout/form-checkout.php: 1 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 26 26 </div> 27 27 </div> 28 28 29 Fjernet <h3 id="order_review_heading"><?php esc_html_e( 'Your order', 'woocommerce' ); ?></h3> 29 Tilføjet <h2 id="order_review_heading"><?php esc_html_e( 'Your order', 'woocommerce' ); ?></h2> 30 30 31 31 <div id="order_review" class="woocommerce-checkout-review-order"> 32 32 <?php do_action( 'woocommerce_checkout_order_review' ); ?> woocommerce/checkout/form-shipping.php Ændringer i woocommerce/checkout/form-shipping.php: 2 tilføjet, 2 fjernet
Ændringer i woocommerce/checkout/form-shipping.php: 2 tilføjet, 2 fjernet Linje før Linje efter Ændring Kode 16 16 defined( 'ABSPATH' ) || exit; 17 17 ?> 18 18 <div class="woocommerce-shipping-fields"> 19 Fjernet <h3><?php esc_html_e( 'Shipping details', 'kestrel-birch' ); ?></h3> 19 Tilføjet <h2><?php esc_html_e( 'Shipping details', 'kestrel-birch' ); ?></h2> 20 20 <div class="shipping_address"> 21 21 <div class="woocommerce-shipping-fields__field-wrapper"> 22 22 <?php 29 29 </div> 30 30 31 31 <div class="woocommerce-additional-fields"> 32 Fjernet <h3><?php esc_html_e( 'Additional information', 'woocommerce' ); ?></h3> 32 Tilføjet <h2><?php esc_html_e( 'Additional information', 'woocommerce' ); ?></h2> 33 33 <div class="woocommerce-additional-fields__field-wrapper"> 34 34 <?php 35 35 foreach ( $checkout->get_checkout_fields( 'order' ) as $kb_key => $kb_field ) {
Tastaturbrug og fokus
-
En synlig fokusmarkering focus-visible-styles Én markering af tastaturfokus i en farve fra temaet eller en nuance af den med en kontrast på mindst 3:1 mod sidens baggrund.
Temaets hovedstilark får én markering af tastaturfokus: en ubrudt streg på 2 pixels, 2 pixels fra elementet, i en farve, som temaet allerede bruger. Det er en farvevariabel, hvis navn nævner
focus,accent,brand,primaryellerlink, ellers farven på links eller på brødteksten. Den første af dem med en kontrast på mindst 3:1 mod sidens baggrund bruges; hvis ingen af dem har det, gøres den første lysere eller mørkere i samme farvetone, indtil den når det. På mørke områder med lys tekst, for eksempel en mørk topbjælke, får markeringen den lyse tekstfarve. Enoutline: noneved fokus, der ikke efterlader noget i stedet, fjernes fra temaets regler; regler, der kun skjuler markeringen ved museklik, bevares. Et tema, der allerede har en synlig fokusmarkering og ingen regel, der skjuler den, bliver, som det er.- Regler, den dækker
-
-
vs-focus-visibleAUTO
-
- Filtyper, den ændrer
-
.css
replaces the outline reset of the fixture theme with a brand-coloured outline Eksempeldata assets/css/main.css Ændringer i assets/css/main.css: 9 tilføjet, 3 fjernet
Ændringer i assets/css/main.css: 9 tilføjet, 3 fjernet Linje før Linje efter Ændring Kode 137 137 box-shadow: 0 0 0 2px var(--kb-ink); 138 138 } 139 139 140 Fjernet /* VALIDISCAN-SEED vs-focus-visible: "remove the ugly focus ring" - nothing replaces it. */ 141 Fjernet :focus { 142 Fjernet outline: none !important; 140 Tilføjet /* validiscan:focus-visible-styles */ 141 Tilføjet :focus-visible { 142 Tilføjet outline: 2px solid var(--kb-focus); 143 Tilføjet outline-offset: 2px; 143 144 } 144 145 146 Tilføjet .kb-topbar :focus-visible { 147 Tilføjet outline-color: #fff; 148 Tilføjet } 149 Tilføjet /* /validiscan:focus-visible-styles */ 150 Tilføjet 145 151 /* Buttons ------------------------------------------------------------------ */ 146 152 147 153 .button, -
En tab-rækkefølge, der følger siden remove-positive-tabindex Et
tabindexover 0 på det skabelontag, der udskriver det rapporterede element, fjernes eller sættes til 0; et, som PHP-kode udskriver, eller som et script sætter, overlades til et menneske.Et
tabindexover 0 trækker et element forrest i tastaturrækkefølgen. Opskriften fjerner det fra links, knapper og formularfelter, som alligevel kan få fokus, og sætter det til 0 på andre elementer, så de stadig kan nås, mens Tab-tasten følger sidens rækkefølge. Kun det tag i skabelonen, der udskriver det rapporterede element, ændres. Ettabindex, som PHP-kode udskriver, eller som et script sætter, overlades til et menneske.- Regler, den dækker
-
-
tabindexAUTO -
vs-focus-orderMANUAL
-
- Filtyper, den ændrer
-
.php
removes tabindex="1" from the header search field of the fixture theme Eksempeldata header.php Ændringer i header.php: 1 tilføjet, 1 fjernet
Ændringer i header.php: 1 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 49 49 <form role="search" method="get" class="woocommerce-product-search" action="<?php echo esc_url( home_url( '/search' ) ); ?>"> 50 50 <label class="screen-reader-text" for="woocommerce-product-search-field-0"><?php esc_html_e( 'Search for:', 'woocommerce' ); ?></label> 51 51 <?php // VALIDISCAN-SEED vs-focus-order + tabindex: tabindex="1" "so the search is always the first stop". ?> 52 Fjernet <input type="search" id="woocommerce-product-search-field-0" class="search-field" placeholder="<?php echo esc_attr__( 'Search products…', 'woocommerce' ); ?>" value="<?php echo get_search_query(); ?>" name="s" tabindex="1"> 52 Tilføjet <input type="search" id="woocommerce-product-search-field-0" class="search-field" placeholder="<?php echo esc_attr__( 'Search products…', 'woocommerce' ); ?>" value="<?php echo get_search_query(); ?>" name="s"> 53 53 <?php // VALIDISCAN-SEED button-name: icon-only submit button without text. ?> 54 54 <button type="submit" value="<?php echo esc_attr_x( 'Search', 'submit button', 'woocommerce' ); ?>" class="kb-search-submit"><?php kb_icon( 'search' ); ?></button> 55 55 <input type="hidden" name="post_type" value="product">
Zoom, klikflader og kontrast
-
Zoom tilladt på mobilen meta-viewport-zoom Viewport-tagget mister
user-scalable=noog enmaximum-scaleunder 2, så besøgende igen kan zoome ind på din webshop med to fingre, medmindre PHP beregner taggets indhold, eller et plugin udskriver det.Opskriften fjerner
user-scalable=noog enmaximum-scaleunder 2 fra viewport-tagget, i header-skabelonerne eller i den PHP-kode, der udskriver tagget, så besøgende igen kan zoome ind på din webshop med to fingre. For axe-cores strengere regelmeta-viewport-largefjernes enhvermaximum-scaleunder 5. De øvrige viewport-indstillinger forbliver nøjagtig, som de var. Et viewport-tag, hvis indhold PHP beregner, eller som et plugin udskriver, overlades til et menneske.- Regler, den dækker
-
-
meta-viewportAUTO -
meta-viewport-largeAUTO
-
- Filtyper, den ændrer
-
.php
re-enables zoom in every header template of the fixture theme Eksempeldata header-checkout.php Ændringer i header-checkout.php: 1 tilføjet, 1 fjernet
Ændringer i header-checkout.php: 1 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 12 12 <head> 13 13 <meta charset="<?php bloginfo( 'charset' ); ?>"> 14 14 <?php // VALIDISCAN-SEED meta-viewport: zooming is disabled. ?> 15 Fjernet <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> 15 Tilføjet <meta name="viewport" content="width=device-width, initial-scale=1"> 16 16 <?php wp_head(); ?> 17 17 </head> 18 18 header.php Ændringer i header.php: 1 tilføjet, 1 fjernet
Ændringer i header.php: 1 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 14 14 <head> 15 15 <meta charset="<?php bloginfo( 'charset' ); ?>"> 16 16 <?php // VALIDISCAN-SEED meta-viewport: zooming is disabled ("stops iOS zooming into inputs"). ?> 17 Fjernet <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> 17 Tilføjet <meta name="viewport" content="width=device-width, initial-scale=1"> 18 18 <?php wp_head(); ?> 19 19 </head> 20 20 -
Større klikflader target-size-padding Faste bredder eller højder under 24 pixels på betjeningselementer, som scanningen fandt for små, hæves til 24 pixels.
Betjeningselementer, som scanningen fandt mindre end 24 × 24 pixels, for eksempel ikoner til sociale medier, farveprøver eller knapper til antal, får den minimumsstørrelse. Opskriften finder de stilregler i stilarkene, der giver netop de elementer en fast bredde eller højde under 24 pixels, og hæver den til 24 pixels; hvor elementet placerer sit ikon med flexbox eller grid, centreres ikonet, så det ikke sidder i et hjørne. Et betjeningselement, hvis størrelse kommer fra padding eller fra dets indhold, kan ikke måles ud fra stilarkene og overlades til et menneske.
- Regler, den dækker
-
-
vs-target-sizeAUTO
-
- Filtyper, den ændrer
-
.css
raises the social icons, quantity steppers and swatches of the fixture theme to 24 × 24 px Eksempeldata assets/css/main.css Ændringer i assets/css/main.css: 4 tilføjet, 2 fjernet
Ændringer i assets/css/main.css: 4 tilføjet, 2 fjernet Linje før Linje efter Ændring Kode 710 710 /* VALIDISCAN-SEED vs-target-size: 18 x 18 px icon links, 4 px apart. */ 711 711 .kb-social__link { 712 712 display: inline-flex; 713 Fjernet width: 18px; 714 Fjernet height: 18px; 713 Tilføjet width: 24px; 714 Tilføjet height: 24px; 715 715 color: var(--kb-ink); 716 Tilføjet align-items: center; 717 Tilføjet justify-content: center; 716 718 } 717 719 718 720 .site-info { assets/css/woocommerce.css Ændringer i assets/css/woocommerce.css: 4 tilføjet, 4 fjernet
Ændringer i assets/css/woocommerce.css: 4 tilføjet, 4 fjernet Linje før Linje efter Ændring Kode 421 421 422 422 /* VALIDISCAN-SEED vs-target-size: 18 x 18 px colour swatches, 4 px apart. */ 423 423 .kb-swatch { 424 Fjernet width: 18px; 425 Fjernet height: 18px; 424 Tilføjet width: 24px; 425 Tilføjet height: 24px; 426 426 padding: 0; 427 427 border: 1px solid rgba(0, 0, 0, 0.2); 428 428 border-radius: 50%; 489 489 /* VALIDISCAN-SEED vs-target-size: 18 x 18 px quantity steppers glued to the input. */ 490 490 .kb-qty-minus, 491 491 .kb-qty-plus { 492 Fjernet width: 18px; 493 Fjernet height: 18px; 492 Tilføjet width: 24px; 493 Tilføjet height: 24px; 494 494 padding: 0; 495 495 border: 1px solid #b9b3aa; 496 496 border-radius: 2px; -
Tekstfarver med tilstrækkelig kontrast contrast-tokens En tekstfarve, der ikke består kontrastkontrollen, er defineret ét sted og ikke også bruges til baggrunde, kanter eller elementer, scanningen ikke målte, flyttes til den nærmeste nuance i samme farvetone, der opnår den krævede kontrast.
Når en tekst ikke består kontrastkontrollen, og dens farve er defineret ét sted i temaets stilark, som en CSS-variabel eller som farven i den regel, der styler teksten, flyttes den farve til den nærmeste lysere eller mørkere nuance i samme farvetone, som opnår den kontrast, scanningen målte som krævet, på hver baggrund, den målte. En farve, der er defineret flere steder, der også ville ændre elementer, hvis kontrast scanningen ikke har målt, eller som temaet også bruger til baggrunde eller kanter, overlades til et menneske.
- Regler, den dækker
-
-
color-contrastASSISTED
-
- Filtyper, den ændrer
-
.css
darkens the footer text colour when every element it styles was measured Eksempeldata assets/css/main.css Ændringer i assets/css/main.css: 1 tilføjet, 1 fjernet
Ændringer i assets/css/main.css: 1 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 676 676 .kb-footer-about, 677 677 .kb-footer-newsletter-intro, 678 678 .site-info { 679 Fjernet color: #888; 679 Tilføjet color: #6e6e6e; 680 680 } 681 681 682 682 .site-footer ul.menu {
Bevægelse, slideshows og lyd
-
Mindre bevægelse, når en besøgende beder om det reduced-motion-guard For besøgende, hvis enhed beder om reduceret bevægelse, stopper animationer i deres slutstilling, og et slideshows automatiske afspilning, som temaets egne scripts starter, forbliver slået fra; bevægelse fra et plugin eller et inline-script ændres ikke.
Når en besøgendes enhed er indstillet til at reducere bevægelse, lader en blok sidst i temaets hovedstilark hver animation køre én gang, for kort til at kunne ses, så den stopper i sin slutstilling; overgange bliver øjeblikkelige, og blød scrolling slås fra. Hvor temaets egne scripts starter et slideshows automatiske afspilning med Slick, Swiper, Splide, Owl eller Flickity, starter den automatiske afspilning kun for besøgende, der ikke har bedt om reduceret bevægelse. Bevægelse, der kommer fra et plugin eller et inline-script, ændres ikke.
- Regler, den dækker
-
-
vs-motionAUTO
-
- Filtyper, den ændrer
-
.css
guards the looping hero slide and sale badge animations of the fixture theme Eksempeldata assets/css/main.css Ændringer i assets/css/main.css: 13 tilføjet, 0 fjernet
Ændringer i assets/css/main.css: 13 tilføjet, 0 fjernet Linje før Linje efter Ændring Kode 794 794 color: #999; 795 795 cursor: pointer; 796 796 } 797 Tilføjet 798 Tilføjet /* validiscan:reduced-motion-guard */ 799 Tilføjet @media (prefers-reduced-motion: reduce) { 800 Tilføjet *, 801 Tilføjet *::before, 802 Tilføjet *::after { 803 Tilføjet animation-duration: 0.01ms !important; 804 Tilføjet animation-iteration-count: 1 !important; 805 Tilføjet transition-duration: 0.01ms !important; 806 Tilføjet scroll-behavior: auto !important; 807 Tilføjet } 808 Tilføjet } 809 Tilføjet /* /validiscan:reduced-motion-guard */ -
En pauseknap til slideshows i bevægelse slider-pause-control Et slideshow i dit temas skabeloner, der bevæger sig af sig selv, får en synlig knap til pause og afspilning med tekst på engelsk, medmindre et plugin eller et inline-script styrer det.
Et slideshow i dit temas skabeloner, der bevæger sig af sig selv, får en synlig knap til at sætte det på pause og afspille det igen, med teksterne »Pause slideshow« og »Play slideshow« på engelsk. Knappen bliver slideshowets første element, så tastaturbrugere når den før de enkelte slides. Et kort script i temaets hovedscriptfil forbinder knappen med sliderens egen automatiske afspilning: en CSS-animation i temaet, Slick, Swiper eller Flickity. For besøgende, hvis enhed beder om reduceret bevægelse, starter slideshowet på pause. En slider, som et plugin eller et inline-script styrer, overlades til et menneske.
- Regler, den dækker
-
-
vs-carouselAUTO
-
- Filtyper, den ændrer
-
.css.js.php
adds a pause button to the CSS-animated hero slider of the fixture theme Eksempeldata assets/css/main.css Ændringer i assets/css/main.css: 28 tilføjet, 0 fjernet
Ændringer i assets/css/main.css: 28 tilføjet, 0 fjernet Linje før Linje efter Ændring Kode 508 508 background: var(--kb-navy); 509 509 } 510 510 511 Tilføjet /* validiscan:slider-pause-control */ 512 Tilføjet .hero-slider.is-paused .hero-slider__track { 513 Tilføjet animation-play-state: paused; 514 Tilføjet } 515 Tilføjet 516 Tilføjet @media (prefers-reduced-motion: reduce) { 517 Tilføjet .hero-slider__track { 518 Tilføjet animation-play-state: paused; 519 Tilføjet } 520 Tilføjet } 521 Tilføjet 522 Tilføjet .hero-slider__pause { 523 Tilføjet position: absolute; 524 Tilføjet top: 1rem; 525 Tilføjet right: 1rem; 526 Tilføjet z-index: 2; 527 Tilføjet min-height: 24px; 528 Tilføjet padding: 0.4em 0.9em; 529 Tilføjet border: 2px solid currentColor; 530 Tilføjet border-radius: 4px; 531 Tilføjet background: #ffffff; 532 Tilføjet color: var(--kb-ink); 533 Tilføjet font: inherit; 534 Tilføjet font-weight: 600; 535 Tilføjet cursor: pointer; 536 Tilføjet } 537 Tilføjet /* /validiscan:slider-pause-control */ 538 Tilføjet 511 539 .hero-slide img { 512 540 width: 100%; 513 541 aspect-ratio: 5 / 2; assets/js/theme.js Ændringer i assets/js/theme.js: 20 tilføjet, 0 fjernet
Ændringer i assets/js/theme.js: 20 tilføjet, 0 fjernet Linje før Linje efter Ændring Kode 255 255 initCheckout(); 256 256 initShowPassword(); 257 257 })(); 258 Tilføjet 259 Tilføjet /* validiscan:slider-pause-control */ 260 Tilføjet (function () { 261 Tilføjet const reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches; 262 Tilføjet for (const slider of document.querySelectorAll('.hero-slider')) { 263 Tilføjet const button = slider.querySelector('.hero-slider__pause'); 264 Tilføjet if (!button) continue; 265 Tilføjet const pauseLabel = button.textContent; 266 Tilføjet const playLabel = button.getAttribute('data-play-label') || pauseLabel; 267 Tilføjet const set = (paused) => { 268 Tilføjet slider.classList.toggle('is-paused', paused); 269 Tilføjet button.textContent = paused ? playLabel : pauseLabel; 270 Tilføjet }; 271 Tilføjet button.addEventListener('click', () => { 272 Tilføjet set(!slider.classList.contains('is-paused')); 273 Tilføjet }); 274 Tilføjet if (reduce) set(true); 275 Tilføjet } 276 Tilføjet })(); 277 Tilføjet /* /validiscan:slider-pause-control */ template-parts/hero-slider.php Ændringer i template-parts/hero-slider.php: 1 tilføjet, 0 fjernet
Ændringer i template-parts/hero-slider.php: 1 tilføjet, 0 fjernet Linje før Linje efter Ændring Kode 37 37 }; 38 38 ?> 39 39 <div class="hero-slider" data-autoplay="true" data-interval="6000"> 40 Tilføjet <button type="button" class="hero-slider__pause" data-play-label="<?php esc_attr_e( 'Play slideshow', 'kestrel-birch' ); ?>"><?php esc_html_e( 'Pause slideshow', 'kestrel-birch' ); ?></button> 40 41 <div class="hero-slider__viewport"> 41 42 <div class="hero-slider__track"> 42 43 <?php -
Ingen blinkende eller rullende tekst remove-blink-marquee
<blink>- og<marquee>-elementer i temaets skabeloner bliver til statiske elementer med samme indhold, klasser og id’er, så ingen tekst bevæger sig af sig selv.<blink>- og<marquee>-elementer i temaets skabeloner og i PHP-strenge, der udskriver dem, bliver til statiske elementer med samme indhold, klasser og id’er: en<span>for blink, en<div>for marquee eller en<span>, hvor marqueen sidder inde i et afsnit. Marqueens rulleindstillinger fjernes, så ingen tekst bevæger sig af sig selv. Et element, som koden åbner og lukker forskellige steder, overlades til et menneske.- Regler, den dækker
-
-
blinkAUTO -
marqueeAUTO
-
- Filtyper, den ændrer
-
.php
makes a marquee and a blink added to the fixture theme static Eksempeldata footer.php Ændringer i footer.php: 1 tilføjet, 1 fjernet
Ændringer i footer.php: 1 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 31 31 <?php endfor; ?> 32 32 </div> 33 33 34 Fjernet <marquee class="kb-ticker" behavior="scroll" scrollamount="3"><?php esc_html_e( 'Free returns within 30 days', 'kestrel-birch' ); ?></marquee> 34 Tilføjet <div class="kb-ticker"><?php esc_html_e( 'Free returns within 30 days', 'kestrel-birch' ); ?></div> 35 35 <div class="site-info"> 36 36 <?php // VALIDISCAN-SEED color-contrast: .site-info and the footer copy are #888 on #f4f1ec (3.1:1), see main.css. ?> 37 37 <p> functions.php Ændringer i functions.php: 1 tilføjet, 1 fjernet
Ændringer i functions.php: 1 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 223 223 */ 224 224 function kb_single_product_usp() { 225 225 // VALIDISCAN-SEED vs-reflow: .kb-usp is white-space: nowrap in assets/css/woocommerce.css. 226 Fjernet echo '<p class="kb-usp"><blink class="kb-new">' . esc_html__( 'New', 'kestrel-birch' ) . '</blink> ' . esc_html__( 'Same-day dispatch · Free returns · Climate-neutral delivery', 'kestrel-birch' ) . '</p>'; 226 Tilføjet echo '<p class="kb-usp"><span class="kb-new">' . esc_html__( 'New', 'kestrel-birch' ) . '</span> ' . esc_html__( 'Same-day dispatch · Free returns · Climate-neutral delivery', 'kestrel-birch' ) . '</p>'; 227 227 } 228 228 add_action( 'woocommerce_single_product_summary', 'kb_single_product_usp', 31 ); 229 229 turns blink and marquee into static elements in templates and PHP strings Eksempeldata functions.php Ændringer i functions.php: 1 tilføjet, 1 fjernet
Ændringer i functions.php: 1 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 11 11 add_action( 'after_setup_theme', 'minimal_setup' ); 12 12 13 13 function minimal_sale() { 14 Fjernet echo '<p><blink class="sale">' . esc_html__( 'Sale', 'minimal' ) . '</blink></p>'; 14 Tilføjet echo '<p><span class="sale">' . esc_html__( 'Sale', 'minimal' ) . '</span></p>'; 15 15 } template-parts/notice.php Ændringer i template-parts/notice.php: 3 tilføjet, 3 fjernet
Ændringer i template-parts/notice.php: 3 tilføjet, 3 fjernet Linje før Linje efter Ændring Kode 1 1 <div class="notice"> 2 Fjernet <marquee class="notice__ticker" behavior="scroll" direction="left" scrollamount="4"> 2 Tilføjet <div class="notice__ticker"> 3 3 <?php esc_html_e( 'Free shipping this week', 'minimal' ); ?> 4 Fjernet </marquee> 5 Fjernet <blink><?php esc_html_e( 'New!', 'minimal' ); ?></blink> 4 Tilføjet </div> 5 Tilføjet <span><?php esc_html_e( 'New!', 'minimal' ); ?></span> 6 6 </div> -
Ingen lyd, der starter af sig selv mute-autoplay En video i temaets skabeloner, der afspilles af sig selv, gøres lydløs, og lyd starter ikke længere af sig selv, medmindre et script starter den; på WooCommerce bruges opskriften ikke til fund fra
vs-media.En video i temaets skabeloner, der afspilles af sig selv, får
mutedogplaysinline, så den fortsætter med at spille lydløst og afspilles inde på siden på iPhones i stedet for i fuld skærm; hvor videoen har betjeningsknapper, kan de besøgende stadig slå lyden til. Lyd starter ikke længere af sig selv. Medier, som et script starter, overlades til et menneske. I en Validiscan-scanning rapporteres lyd, der starter af sig selv, af Validiscans mediekontrolvs-media, som erstatter den axe-core-regel, denne opskrift dækker;vs-mediahar niveau MANUAL (se listen længere nede), så et sådant fund på WooCommerce kommer med vejledning i stedet for denne ændring.- Regler, den dækker
-
-
no-autoplay-audioAUTO kontrolleres via vs-media
-
- Filtyper, den ændrer
-
.php
mutes an autoplaying product video of the fixture theme Eksempeldata woocommerce/single-product/tabs/description.php Ændringer i woocommerce/single-product/tabs/description.php: 1 tilføjet, 1 fjernet
Ændringer i woocommerce/single-product/tabs/description.php: 1 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 48 48 <?php if ( $kb_video ) : ?> 49 49 <h3><?php esc_html_e( 'The weekender, packed', 'kestrel-birch' ); ?></h3> 50 50 <figure class="wp-block-video"> 51 Fjernet <video autoplay loop controls preload="none" poster="<?php echo esc_url( get_the_post_thumbnail_url( $kb_video, 'full' ) ); ?>" width="640" height="360"> 51 Tilføjet <video autoplay loop controls preload="none" poster="<?php echo esc_url( get_the_post_thumbnail_url( $kb_video, 'full' ) ); ?>" width="640" height="360" muted playsinline> 52 52 <source src="<?php echo esc_url( wp_get_attachment_url( $kb_video ) ); ?>" type="video/webm"> 53 53 </video> 54 54 <figcaption><?php echo esc_html( wp_get_attachment_caption( $kb_video ) ); ?></figcaption>
Formularer, priser og kurven
-
Etiketter knyttet til deres felter label-association En etiket, der allerede står i skabelonen, men ikke er knyttet til sit felt, bliver knyttet til det via
forelleraria-labelledby.Et formularfelt, hvis etikettekst allerede står i skabelonen, men ikke er knyttet til feltet, bliver knyttet til det: Det
<label>, der står lige før feltet eller lige efter et afkrydsningsfelt eller en radioknap, får enfor, der peger på feltet, eller et tekstelement, der er markeret som etiket, knyttes viaaria-labelledby. Skærmlæsere læser så etiketten op, når feltet får fokus, og et klik på et tilknyttet<label>flytter fokus til feltet. Et felt, der kun har en pladsholdertekst, overlades til et menneske, fordi det er en beslutning om indhold at skrive en etiket.- Regler, den dækker
-
-
labelAUTO kontrolleres via vs-forms-ecommerce -
select-nameASSISTED -
vs-forms-ecommerceAUTO
-
- Filtyper, den ændrer
-
.php
ties an unassociated coupon label to its field, as in the fixed cart Eksempeldata woocommerce/cart/cart.php Ændringer i woocommerce/cart/cart.php: 1 tilføjet, 1 fjernet
Ændringer i woocommerce/cart/cart.php: 1 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 62 62 <tr> 63 63 <td colspan="6" class="actions"> 64 64 <div class="coupon"> 65 Fjernet <label class="screen-reader-text"><?php esc_html_e( 'Coupon:', 'woocommerce' ); ?></label> 65 Tilføjet <label class="screen-reader-text" for="coupon_code"><?php esc_html_e( 'Coupon:', 'woocommerce' ); ?></label> 66 66 <input type="text" name="coupon_code" class="input-text" id="coupon_code" value="" placeholder="<?php esc_attr_e( 'Coupon code', 'woocommerce' ); ?>"> 67 67 <button type="submit" class="button" name="apply_coupon" value="<?php esc_attr_e( 'Apply coupon', 'woocommerce' ); ?>"><?php esc_html_e( 'Apply coupon', 'woocommerce' ); ?></button> 68 68 </div> -
Felter i kassen og på kontoen, som browsere kan udfylde autocomplete-tokens Felter, der spørger efter oplysninger om kunden, får den matchende
autocomplete-værdi, hvor koden viser deres formål; for WooCommerces felter til fakturering og levering sætter et filter ifunctions.phpden.Felter i temaets skabeloner, der spørger efter oplysninger om kunden, for eksempel felter til login, registrering og kassen, får den
autocomplete-værdi, der svarer til det, de spørger efter, for eksempel e-mail, brugernavn, nuværende eller ny adgangskode, for- og efternavn, virksomhed, adresse, postnummer, land eller telefonnummer. Værdien udledes af feltets type, navn, id og etiket. En værdi, der mangler, eller som eroffeller ugyldig, erstattes; en gyldig bliver stående. WooCommerces egne felter til fakturering og levering udskrives af WooCommerce, ikke af temaet, så et filter ifunctions.phpsætter deres værdier. Det kører efter temaets egne filtre for de felter, og de filtre kan fjerne værdierne. Felter, der ikke spørger efter personoplysninger, for eksempel felter til søgning, rabatkode eller antal, bliver, som de er, og det samme gælder et felt, hvis formål koden ikke viser.- Regler, den dækker
-
-
autocomplete-validAUTO kontrolleres via vs-forms-ecommerce -
vs-forms-ecommerceAUTO
-
- Filtyper, den ændrer
-
.php
sets the tokens of the login, registration and checkout fields of the fixture theme Eksempeldata functions.php Ændringer i functions.php: 44 tilføjet, 0 fjernet
Ændringer i functions.php: 44 tilføjet, 0 fjernet Linje før Linje efter Ændring Kode 308 308 * here; the remediation adds one for pages with the _kb_content_language meta and marks the 309 309 * English header and footer with lang="en-GB". 310 310 */ 311 Tilføjet 312 Tilføjet /* validiscan:autocomplete-tokens */ 313 Tilføjet /** 314 Tilføjet * Autocomplete tokens for the WooCommerce address fields, so browsers and assistive 315 Tilføjet * technology know what each field asks for (WCAG 1.3.5). Runs after the theme's own 316 Tilføjet * field filters. 317 Tilføjet * 318 Tilføjet * @param array $fields Checkout fields (grouped by section) or one address section. 319 Tilføjet * @return array 320 Tilføjet */ 321 Tilføjet function kb_address_autocomplete( $fields ) { 322 Tilføjet $tokens = array( 323 Tilføjet 'first_name' => 'given-name', 324 Tilføjet 'last_name' => 'family-name', 325 Tilføjet 'company' => 'organization', 326 Tilføjet 'country' => 'country', 327 Tilføjet 'address_1' => 'address-line1', 328 Tilføjet 'address_2' => 'address-line2', 329 Tilføjet 'city' => 'address-level2', 330 Tilføjet 'state' => 'address-level1', 331 Tilføjet 'postcode' => 'postal-code', 332 Tilføjet 'phone' => 'tel', 333 Tilføjet 'email' => 'email', 334 Tilføjet ); 335 Tilføjet foreach ( $fields as $key => $field ) { 336 Tilføjet if ( ! is_array( $field ) ) { 337 Tilføjet continue; 338 Tilføjet } 339 Tilføjet if ( 'billing' === $key || 'shipping' === $key ) { 340 Tilføjet $fields[ $key ] = kb_address_autocomplete( $field ); 341 Tilføjet continue; 342 Tilføjet } 343 Tilføjet if ( ! preg_match( '/^(billing|shipping)_(.+)$/', (string) $key, $match ) || ! isset( $tokens[ $match[2] ] ) ) { 344 Tilføjet continue; 345 Tilføjet } 346 Tilføjet $fields[ $key ]['autocomplete'] = ( 'shipping' === $match[1] ? 'shipping ' : '' ) . $tokens[ $match[2] ]; 347 Tilføjet unset( $fields[ $key ]['custom_attributes']['autocomplete'] ); 348 Tilføjet } 349 Tilføjet return $fields; 350 Tilføjet } 351 Tilføjet add_filter( 'woocommerce_checkout_fields', 'kb_address_autocomplete', 99 ); 352 Tilføjet add_filter( 'woocommerce_billing_fields', 'kb_address_autocomplete', 99 ); 353 Tilføjet add_filter( 'woocommerce_shipping_fields', 'kb_address_autocomplete', 99 ); 354 Tilføjet /* /validiscan:autocomplete-tokens */ woocommerce/myaccount/form-login.php Ændringer i woocommerce/myaccount/form-login.php: 3 tilføjet, 3 fjernet
Ændringer i woocommerce/myaccount/form-login.php: 3 tilføjet, 3 fjernet Linje før Linje efter Ændring Kode 29 29 30 30 <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide"> 31 31 <label for="username"><?php esc_html_e( 'Username or email address', 'woocommerce' ); ?> <span class="required">*</span></label> 32 Fjernet <input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="username" id="username" autocomplete="off" value="<?php echo ( ! empty( $_POST['username'] ) ) ? esc_attr( wp_unslash( $_POST['username'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Missing,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized ?>"> 32 Tilføjet <input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="username" id="username" autocomplete="username" value="<?php echo ( ! empty( $_POST['username'] ) ) ? esc_attr( wp_unslash( $_POST['username'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Missing,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized ?>"> 33 33 </p> 34 34 <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide"> 35 35 <label for="password"><?php esc_html_e( 'Password', 'woocommerce' ); ?> <span class="required">*</span></label> 36 36 <span class="password-input"> 37 Fjernet <input class="woocommerce-Input woocommerce-Input--text input-text" type="password" name="password" id="password" autocomplete="off" onpaste="return false;"> 37 Tilføjet <input class="woocommerce-Input woocommerce-Input--text input-text" type="password" name="password" id="password" autocomplete="current-password" onpaste="return false;"> 38 38 <button type="button" class="show-password-input"><?php kb_icon( 'eye' ); ?></button> 39 39 </span> 40 40 </p> 63 63 <?php do_action( 'woocommerce_register_form_start' ); ?> 64 64 65 65 <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide"> 66 Fjernet <input type="email" class="woocommerce-Input woocommerce-Input--text input-text" name="email" id="reg_email" autocomplete="off" value="" placeholder="<?php esc_attr_e( 'Email address *', 'kestrel-birch' ); ?>"> 66 Tilføjet <input type="email" class="woocommerce-Input woocommerce-Input--text input-text" name="email" id="reg_email" autocomplete="email" value="" placeholder="<?php esc_attr_e( 'Email address *', 'kestrel-birch' ); ?>"> 67 67 </p> 68 68 <p><?php esc_html_e( 'A link to set a new password will be sent to your email address.', 'woocommerce' ); ?></p> 69 69 -
Ændringer i pris, lagerstatus og kurv bliver oplæst live-region-cart-variant Skærmlæsere læser den nye pris og lagerstatus for en valgt variant op, medmindre temaets script erstatter området i sin helhed, og, på engelsk, et produkt, der er lagt i eller fjernet fra kurven.
Når en kunde vælger en anden størrelse eller farve, omskrives det område, der viser prisen og lagerstatussen for den valgte variant, på stedet. Det område bliver et live-område, så skærmlæsere læser den nye pris og lagerstatus op, uden at kunden behøver at gå derhen. Kurvlinket i sidehovedet erstattes i sin helhed, når et produkt lægges i kurven, så det ikke selv kan bære oplæsningen. Ved siden af tilføjer opskriften en visuelt skjult statusbesked, og en kort blok i temaets script skriver »Product added to your cart.« eller »Product removed from your cart.« ind i den, når WooCommerce melder ændringen. Begge beskeder tilføjes på engelsk. Et område, der allerede er eller ligger inde i et live-område, eller som temaets eget script erstatter i sin helhed, bliver, som det er.
- Regler, den dækker
-
-
vs-live-updatesAUTO
-
- Filtyper, den ændrer
-
.js.php
adds a status region next to the header cart fragment and wires the theme script Eksempeldata assets/js/theme.js Ændringer i assets/js/theme.js: 15 tilføjet, 0 fjernet
Ændringer i assets/js/theme.js: 15 tilføjet, 0 fjernet Linje før Linje efter Ændring Kode 255 255 initCheckout(); 256 256 initShowPassword(); 257 257 })(); 258 Tilføjet 259 Tilføjet /* validiscan:live-region-cart-variant */ 260 Tilføjet // Announces cart changes in the status region next to the header cart (WCAG 4.1.3). 261 Tilføjet (function () { 262 Tilføjet const region = document.querySelector('[data-kb-cart-status]'); 263 Tilføjet if (!region || !window.jQuery) return; 264 Tilføjet window.jQuery(document.body).on('added_to_cart removed_from_cart', (event) => { 265 Tilføjet const message = region.getAttribute(event.type === 'added_to_cart' ? 'data-added' : 'data-removed'); 266 Tilføjet region.textContent = ''; 267 Tilføjet window.setTimeout(() => { 268 Tilføjet region.textContent = message || ''; 269 Tilføjet }, 100); 270 Tilføjet }); 271 Tilføjet })(); 272 Tilføjet /* /validiscan:live-region-cart-variant */ header.php Ændringer i header.php: 1 tilføjet, 0 fjernet
Ændringer i header.php: 1 tilføjet, 0 fjernet Linje før Linje efter Ændring Kode 67 67 <?php kb_icon( 'bag' ); ?><span class="kb-cart-amount"><?php echo wp_kses_post( WC()->cart->get_cart_subtotal() ); ?></span> 68 68 <span class="count"><?php echo esc_html( sprintf( _n( '%d item', '%d items', WC()->cart->get_cart_contents_count(), 'storefront' ), WC()->cart->get_cart_contents_count() ) ); ?></span> 69 69 </a> 70 Tilføjet <span class="screen-reader-text" role="status" data-kb-cart-status data-added="<?php esc_attr_e( 'Product added to your cart.', 'kestrel-birch' ); ?>" data-removed="<?php esc_attr_e( 'Product removed from your cart.', 'kestrel-birch' ); ?>"></span> 70 71 </li> 71 72 </ul> 72 73 </div> makes the variation price and stock of the fixture theme a polite live region Eksempeldata woocommerce/single-product/add-to-cart/variable.php Ændringer i woocommerce/single-product/add-to-cart/variable.php: 1 tilføjet, 1 fjernet
Ændringer i woocommerce/single-product/add-to-cart/variable.php: 1 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 65 65 </table> 66 66 67 67 <div class="single_variation_wrap"> 68 Fjernet <div class="woocommerce-variation single_variation"> 68 Tilføjet <div class="woocommerce-variation single_variation" aria-live="polite" aria-atomic="true"> 69 69 <div class="woocommerce-variation-description"></div> 70 70 <div class="woocommerce-variation-price"><span class="price"><?php echo wp_kses_post( wc_price( $kb_selected['display_price'] ) ); ?></span></div> 71 71 <div class="woocommerce-variation-availability"><?php echo wp_kses_post( $kb_selected['availability_html'] ); ?></div>
Navne til ikoner, billeder og indlejret indhold
-
Navne til knapper og links, der kun består af et ikon icon-accessible-name Knapper og links, der kun viser et ikon, får et navn på engelsk, der siger, hvad de gør, hvor koden viser deres formål.
Knapper og links, der kun viser et ikon, får et navn, der siger, hvad de gør, hvor koden viser deres formål: ud fra ikonets eget navn, ud fra betjeningselementets klasse eller id eller ud fra, hvor et link fører hen, for eksempel kurven, kontosiden eller et socialt netværk. Eksempler er Search, Cart, My account, Show password, Close og Menu. Navnet er visuelt skjult tekst inde i betjeningselementet eller en
aria-label, hvor temaet ikke har nogen klasse til skjult tekst, og det tilføjes på engelsk. Navne på sociale netværk er brandnavne og bliver, som de er. Et betjeningselement, hvis formål koden ikke viser, overlades til et menneske.- Regler, den dækker
-
-
button-nameASSISTED -
link-nameASSISTED
-
- Filtyper, den ændrer
-
.php
names the account link and the social links, and leaves the uncertain gallery link Eksempeldata header.php Ændringer i header.php: 1 tilføjet, 1 fjernet
Ændringer i header.php: 1 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 60 60 <ul id="site-header-cart" class="site-header-cart menu"> 61 61 <li class="kb-account"> 62 62 <?php // VALIDISCAN-SEED link-name: icon-only account link. ?> 63 Fjernet <a class="kb-account-link" href="<?php echo esc_url( wc_get_page_permalink( 'myaccount' ) ); ?>"><?php kb_icon( 'user' ); ?></a> 63 Tilføjet <a class="kb-account-link" href="<?php echo esc_url( wc_get_page_permalink( 'myaccount' ) ); ?>"><?php kb_icon( 'user' ); ?><span class="screen-reader-text"><?php esc_html_e( 'My account', 'kestrel-birch' ); ?></span></a> 64 64 </li> 65 65 <li class="kb-cart<?php echo is_cart() ? ' current-menu-item' : ''; ?>"> 66 66 <a class="cart-contents" href="<?php echo esc_url( wc_get_cart_url() ); ?>" title="<?php esc_attr_e( 'View your shopping cart', 'storefront' ); ?>"> template-parts/social-links.php Ændringer i template-parts/social-links.php: 1 tilføjet, 1 fjernet
Ændringer i template-parts/social-links.php: 1 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 17 17 ?> 18 18 <ul class="kb-social"> 19 19 <?php foreach ( $kb_profiles as $kb_network => $kb_url ) : ?> 20 Fjernet <a class="kb-social__link" href="<?php echo esc_url( $kb_url ); ?>"><?php kb_icon( $kb_network ); ?></a> 20 Tilføjet <a class="kb-social__link" href="<?php echo esc_url( $kb_url ); ?>"><?php kb_icon( $kb_network ); ?><span class="screen-reader-text"><?php echo esc_html( ucfirst( $kb_network ) ); ?></span></a> 21 21 <?php endforeach; ?> 22 22 </ul> names the icon-only search and show-password buttons of the fixture theme Eksempeldata header.php Ændringer i header.php: 1 tilføjet, 1 fjernet
Ændringer i header.php: 1 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 51 51 <?php // VALIDISCAN-SEED vs-focus-order + tabindex: tabindex="1" "so the search is always the first stop". ?> 52 52 <input type="search" id="woocommerce-product-search-field-0" class="search-field" placeholder="<?php echo esc_attr__( 'Search products…', 'woocommerce' ); ?>" value="<?php echo get_search_query(); ?>" name="s" tabindex="1"> 53 53 <?php // VALIDISCAN-SEED button-name: icon-only submit button without text. ?> 54 Fjernet <button type="submit" value="<?php echo esc_attr_x( 'Search', 'submit button', 'woocommerce' ); ?>" class="kb-search-submit"><?php kb_icon( 'search' ); ?></button> 54 Tilføjet <button type="submit" value="<?php echo esc_attr_x( 'Search', 'submit button', 'woocommerce' ); ?>" class="kb-search-submit"><?php kb_icon( 'search' ); ?><span class="screen-reader-text"><?php esc_html_e( 'Search', 'kestrel-birch' ); ?></span></button> 55 55 <input type="hidden" name="post_type" value="product"> 56 56 </form> 57 57 </div> woocommerce/myaccount/form-login.php Ændringer i woocommerce/myaccount/form-login.php: 1 tilføjet, 1 fjernet
Ændringer i woocommerce/myaccount/form-login.php: 1 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 35 35 <label for="password"><?php esc_html_e( 'Password', 'woocommerce' ); ?> <span class="required">*</span></label> 36 36 <span class="password-input"> 37 37 <input class="woocommerce-Input woocommerce-Input--text input-text" type="password" name="password" id="password" autocomplete="off" onpaste="return false;"> 38 Fjernet <button type="button" class="show-password-input"><?php kb_icon( 'eye' ); ?></button> 38 Tilføjet <button type="button" class="show-password-input"><?php kb_icon( 'eye' ); ?><span class="screen-reader-text"><?php esc_html_e( 'Show password', 'kestrel-birch' ); ?></span></button> 39 39 </span> 40 40 </p> 41 41 -
Dekorative billeder skjult for skærmlæsere decorative-image-alt Kun billeder, som koden beviser er dekorative, får et tomt
altelleraria-hidden; tekstalternativet til ethvert andet billede overlades til et menneske.Et billede markeres kun som dekorativt, når koden beviser, at det ikke tilføjer noget: Det sidder i et link eller en knap, der har sin egen tekst, for eksempel et logo ved siden af webshoppens navn, det er et lille ikon ved siden af sin egen tekstetiket, eller det er en afstandsholder eller en skillelinje. Et
<img>får så et tomtalt="", og et SVG-ikon fåraria-hidden="true", så skærmlæsere springer det over i stedet for at læse en grafik uden navn op. Ethvert andet billede er indhold, og dets tekstalternativ overlades til et menneske.- Regler, den dækker
-
-
image-altASSISTED -
role-img-altASSISTED -
svg-img-altASSISTED
-
- Filtyper, den ændrer
-
.php
hides the logo mark inside the home link that has the shop name Eksempeldata header.php Ændringer i header.php: 1 tilføjet, 1 fjernet
Ændringer i header.php: 1 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 39 39 <div class="site-branding"> 40 40 <a href="<?php echo esc_url( home_url( '/' ) ); ?>" class="custom-logo-link" rel="home"> 41 41 <?php // VALIDISCAN-SEED svg-img-alt: the logo mark is role="img" without a title or aria-label. ?> 42 Fjernet <svg class="kb-logo-mark" role="img" width="40" height="40" viewBox="0 0 40 40"><path d="M3 30c6-11 15-17 29-18-7 3-10 8-11 13 6-4 11-5 17-4-9 2-15 8-19 15L3 30Z" fill="#1d3b53"/></svg> 42 Tilføjet <svg class="kb-logo-mark" width="40" height="40" viewBox="0 0 40 40" aria-hidden="true" focusable="false"><path d="M3 30c6-11 15-17 29-18-7 3-10 8-11 13 6-4 11-5 17-4-9 2-15 8-19 15L3 30Z" fill="#1d3b53"/></svg> 43 43 <span class="kb-logo-text"><?php bloginfo( 'name' ); ?></span> 44 44 </a> 45 45 </div> -
Titler til indlejrede kort og videoer iframe-title En indlejret ramme uden titel får en titel på engelsk, der siger, hvad den viser, hvor koden viser det.
En indlejret ramme uden titel, for eksempel et kort eller en YouTube- eller Vimeo-video, får en titel på engelsk, der siger, hvad den viser. Opskriften henter den fra titlen på en indlejret fil i temaet, fra udbyderen i rammens adresse eller fra ord som
mapellervideoi dens klasse eller id. En ramme, hvis indhold koden ikke viser, får ingen generisk titel; den overlades til et menneske.- Regler, den dækker
-
-
frame-titleAUTO
-
- Filtyper, den ændrer
-
.php
titles the store map iframe of the contact page from the embedded document Eksempeldata page-contact.php Ændringer i page-contact.php: 1 tilføjet, 1 fjernet
Ændringer i page-contact.php: 1 tilføjet, 1 fjernet Linje før Linje efter Ændring Kode 81 81 82 82 <div class="kb-store-map"> 83 83 <?php // VALIDISCAN-SEED frame-title: the map iframe has no title. ?> 84 Fjernet <iframe src="<?php echo esc_url( get_stylesheet_directory_uri() . '/assets/embeds/store-map.html' ); ?>" width="600" height="320" loading="lazy"></iframe> 84 Tilføjet <iframe src="<?php echo esc_url( get_stylesheet_directory_uri() . '/assets/embeds/store-map.html' ); ?>" width="600" height="320" loading="lazy" title="<?php esc_attr_e( 'Map: Kestrel & Birch workshop, Hamburg', 'kestrel-birch' ); ?>"></iframe> 85 85 </div> 86 86 </div> 87 87 </article>
Detaljer: hvad opskrifterne retter, niveauerne og testtemaet
Validiscan har 20 opskrifter til WooCommerce-temaer. De retter sidestruktur og navigation, tastaturfokus, zoom, klikflader og kontrast, bevægelse og lyd, formularfelter og kurven samt navnene på ikoner, billeder og indlejrede rammer. En opskrift er en deterministisk ændring for én slags fejl: Den samme kode får altid den samme ændring. Hver af dem foretager kun en ændring, hvor temaets kode viser, hvad den rigtige ændring er; hvor den ikke gør det, ændrer opskriften intet, og fundet overlades til et menneske.
Under hver opskrift finder du de regler, den dækker, med hver regels niveau i Validiscans regelkatalog. AUTO betyder, at en opskrift er reglens standardrettelse. ASSISTED betyder, at rettelsen kræver en vurdering, så en ændring udarbejdes som udkast og gennemgås derefter. MANUAL betyder, at reglen kræver en persons beslutning, og at Validiscan giver vejledning i stedet for en kodeændring. I et projekt anvendes opskrifter på fund af regler på niveau AUTO. Hvor en opskrift også angiver en regel på niveau ASSISTED eller MANUAL, følger et fund af den regel i stedet ASSISTED- eller MANUAL-forløbet. En regel, der er markeret »kontrolleres via« en anden kontrol, køres ikke selvstændigt i en scanning: Den anden kontrol rapporterer den samme fejl.
Filtyperne og før-og-efter-visningen for hver opskrift stammer fra applikationens egne tests. De fleste kører på applikationens WooCommerce-testtema, et child-tema af temaet Storefront, hvor der med vilje er lagt tilgængelighedsfejl ind. De kommentarer, der er mærket VALIDISCAN-SEED, og som du ser i nogle diffs, markerer fejlene og findes kun i testtemaet. WordPress-sider kan ikke gengives i testmiljøet, så disse tests gengiver ikke sider: De kontrollerer selve ændringen som et før og efter af temaets filer. Dit temas filer ser anderledes ud.
Hvad forbliver på niveau MANUAL på WooCommerce?
Fejl, der kræver en beslutning om indhold eller adfærd, som en fast kodeændring ikke kan træffe, for eksempel undertekster og transskriptioner til dine videoer og din lyd, forbliver på niveau MANUAL på WooCommerce. For et fund på en MANUAL-regel giver Validiscan vejledning i, hvordan det rettes, ikke en ændring af din kode.
Reglerne herunder køres i scanninger og har niveau MANUAL på WooCommerce; regler for god praksis er ikke med på listen.
-
meta-refreshForsinket genindlæsning under 20 timer må ikke bruges -
nested-interactiveInteraktive betjeningselementer må ikke være indlejret i hinanden -
scrollable-region-focusableScrollbare områder skal kunne nås med tastaturet -
server-side-image-mapServerside-billedkort må ikke bruges -
vs-keyboard-trapTastaturfokus må aldrig sidde fast -
vs-focus-orderFokusrækkefølgen skal følge den visuelle rækkefølge -
vs-draggingElementer, der kun kan betjenes ved at trække, skal have et alternativ med et enkelt klik eller tryk -
vs-mediaVideo skal have undertekster, lyd skal have en transskription, og intet må afspille lyd automatisk -
vs-documentsLinkede dokumenter skal gennemgås manuelt for tilgængelighed
Detaljer: kontrollen af fokusrækkefølgen, og hvad et projekt ikke omfatter
For et fund på en MANUAL-regel giver Validiscan vejledning i, hvordan det rettes, ikke en ændring af din kode. Disse fejl kræver en beslutning om indhold eller adfærd, som en fast kodeændring ikke kan træffe, for eksempel undertekster og transskriptioner til dine videoer og din lyd, en vej ud af en widget, hvor tastaturfokus sidder fast, en anden måde at bruge et betjeningselement på, som kun virker ved at trække, eller en gennemgang af linkede dokumenter som PDF-filer. Hvor et fund fra vs-focus-order kommer fra et tabindex over 0 i en temaskabelon, fjerner opskriften om tab-rækkefølgen ovenfor det.
Arbejdet med fund på niveau MANUAL, der kræver dine egne beslutninger om indhold, er ikke en del af et projekt, og det samme gælder PDF-filer. Mellem reglerne på niveau AUTO og dem på niveau MANUAL ligger reglerne på niveau ASSISTED, for eksempel tekstalternativer til produktbilleder eller navne til knapper: Deres rettelser kræver en vurdering, og Validiscan gennemgår hver rettelse, før den leveres. Hvad automatiseret test af webtilgængelighed kan og ikke kan bevise
Hvad stiller du til rådighed?
Du sørger for skriftlig tilladelse til en fuld scanning, én vej ind i dit tema, dit svar om AI-udkast til ASSISTED-rettelser, en udvikler eller et bureau, der gennemgår og sætter ændringerne live, dine beslutninger om det, der forbliver MANUAL, og til en anderssproget webshop oversættelser af den nye engelske tekst.
- Skriftlig tilladelse til en fuld scanning af din webshop. En fuld scanning lægger et produkt i kurven og åbner det første trin i kassen uden at gennemføre et køb eller indtaste betalingsoplysninger.
- Én vej ind i dit tema: adgang til det GitHub-repository, der rummer dit tema eller child-tema, eller en ZIP-fil med temamappen, uploadet i kundeportalen.
- Dit svar på, om AI må udarbejde rettelser på niveau ASSISTED. AI-udkast er slået fra, indtil du siger ja.
- En udvikler eller et bureau, der gennemgår ændringerne, merger pull requesten eller anvender patchpakken og sætter temaet live.
- Oversættelser af den nye engelske tekst, hvis din webshop er på et andet sprog.
- Dine beslutninger om det, der forbliver MANUAL, for eksempel undertekster til dine videoer.
Detaljer: når ændringerne er live, og hvad et projekt dækker
Når ændringerne er live, kontrollerer en verifikationsscanning de berørte sider igen, og Remediation Evidence Package registrerer resultatet. Sådan forløber et projekt, trin for trin
Et projekt dækker én webshop: ét domæne og ét tema.
Kilder
4 kilder, alle kontrolleret til denne side den 6. oktober 2026.
WooCommerces og WordPress’ udviklerdokumentation 4
- Template structure & Overriding templates via a theme · WooCommerce · kontrolleret
- language_attributes() · WordPress.org · kontrolleret
- Localization (Common APIs Handbook) · WordPress.org · kontrolleret
- Templates (Theme Handbook) · WordPress.org · kontrolleret
Begynd med et gratis tjek af din webshop.
Send din webshops adresse. Validiscan scanner den og svarer med hver fejl, scanningen kan påvise, med siden og koden.
Bestil et gratis tjekEller skriv til info@validiscan.com.
Hvad det gratis tjek omfatter, og hvad det udelader- Du sender
- din webshops adresse
- Sider, der scannes
- op til 15
- Du får
- hver fejl, scanningen kan påvise, med siden og koden
- På din webshop
- kun offentlige sider; intet login, intet købt, ingen formularer sendt
- Hvad det ikke er
- et fuldt audit