← cd ../blog

Arhitectura Pontes: Catalog de aplicații accesibile în WP

Arhitectura Pontes: Catalog de aplicații accesibile în WP — imagine de copertă

Introducere: Accesibilitatea ca fundație

Proiectul Pontes nu este doar un simplu site, ci o platformă critică pentru comunitatea persoanelor cu deficiențe de vedere. Când am început reconstrucția arhitecturii, obiectivul a fost clar: să tratăm accesibilitatea nu ca pe un strat aplicat la final, ci ca pe o componentă fundamentală a schemei de date.

1. Arhitectura CPT și ACF

Pentru a gestiona diverse tipuri de conținut, am optat pentru Custom Post Types (CPT) dedicate. Astfel, am separat logic jocurile, programele și materialele audio.

register_post_type('joc', [
    'labels' => ['name' => 'Jocuri', 'singular_name' => 'Joc'],
    'public' => true,
    'supports' => ['title', 'editor', 'thumbnail', 'custom-fields'],
    'taxonomies' => ['categorie_joc', 'platforma_joc'],
    'has_archive' => true
]);

Pentru fiecare CPT, am definit grupuri ACF (Advanced Custom Fields) care stochează metadate critice: platforme suportate și cititoare de ecran compatibile. Aceasta permite utilizatorilor să filtreze software-ul în funcție de tehnologia asistivă pe care o folosesc.

2. Toolbar-ul de accesibilitate

Am implementat un toolbar care persistă preferințele în localStorage. Utilizarea aria-live asigură faptul că orice schimbare (ex: mărirea fontului) este anunțată imediat cititoarelor de ecran.

// template-parts/components/accessibility-toolbar.php
<div id="acc-toolbar" aria-live="polite">
    <button onclick="setFontSize('large')">Mărește font</button>
    <button onclick="toggleContrast()">Contrast ridicat</button>
</div>

3. Shortcode-ul [pontes-embed]

Pentru a integra conținut extern fără a încărca tot site-ul, am creat un shortcode care folosește wp_remote_get și DOMDocument pentru a extrage doar segmentele marcate cu <!-- startembed -->.

function pontes_embed_shortcode($atts) {
    $url = $atts['url'];
    if (false === ($content = get_transient('pontes_embed_' . md5($url)))) {
        $response = wp_remote_get($url);
        $html = wp_remote_retrieve_body($response);
        // Extracție logică cu DOMDocument...
        set_transient('pontes_embed_' . md5($url), $content, HOUR_IN_SECONDS);
    }
    return $content;
}

4. Motorul de statistici: Pontes_Software_Meta

Pentru a oferi transparență asupra ecosistemului, am creat clasa Pontes_Software_Meta, care agregă datele din taxonomii și metadate pentru a genera rapoarte în timp real.

class Pontes_Software_Meta {
    public static function get_stats($taxonomy) {
        global $wpdb;
        // Interogare custom pentru agregări pe platforme
        return $wpdb->get_results("SELECT ...");
    }
}

5. Sistemul de redirectări și Deployment

Migrarea de pe subdomenii vechi (ex: games.pontes.ro) către noua structură a necesitat o tabelă personalizată url_redirects și utilizarea template_redirect pentru a intercepta cererile 404 și a redirecționa utilizatorii către noua locație.

Pentru deployment, folosim un script rsync pentru sincronizarea fișierelor pe VPS, iar wp-cli este utilizat pentru importul masiv de date din fișiere JSON, asigurând consistența bazei de date între mediul de dezvoltare și producție.

Această abordare modulară ne permite să menținem platforma Pontes scalabilă și, mai presus de toate, incluzivă pentru toți utilizatorii noștri.