• Pular para navegação primária
  • Skip to main content
  • Home
  • Sobre/About
  • Projetos
  • Fotografia
  • Blog
    • Feed/RSS
  • Boletim/Newsletter
    • Humanist Techology Newsletter
    • Boletín Tecnología Humanista
    • Boletim Tecnologia Humanista

Celso Bessa (sɛwsʊ bɛ:sa)

Prefiro construir pontes a muros

Você está em: Home / blog / tecnologia / Adicionando elementos noscript a scripts do WordPress usando o filtro script_loader_tag

Adicionando elementos noscript a scripts do WordPress usando o filtro script_loader_tag

3 outubro, 2017 por Celso Bessa

Uma boa prática em desenvolvimento de sites e webapps é oferecer alternativas para funcionalidades que dependam de Javascript. Conhecido como progressive enhancement ou aperfeiçoamento progressivo.

[for english version, check this link]

Idealmente, você começa da experiência mais básica, sem Javascript, e progressivamente aperfeiçoa a experiência com nova funcionalidades. Ou ao menos, adicionar avisos e conteúdos que possam ser visto por usuários e robôs de busca sem Javascript.

Uma das formas é colocar elementos noscript com descrição ou alternativa da funcionalidade, ou o aviso para o usuário. Infelizmente, o WordPress — o sistema de gerenciamento de conteúdo que usamos em clientes e projetos de clientes 2Aces — não oferece uma função específica para adicionar este elementos noscript.

A boa notícia é que é possível resolver isto usando o ótimo sistema de filtros do WordPress. Neste caso usando o filtro script_loader_tag, como você pode ver abaixo.

/**
 * @summary        filtra uma tag de script na fila e adiciona um elemento noscript após ela
 * 
 * @description    filtra uma tag de script na fila (identificada pela variável $handle) e adiciona
 *                 um elemento noscript após ela. Se também houver um script inline após o script
 *                 identificado por $handle, adiciona o elemento noscript após ele.
 * 
 * @access    público
 * @param     string    $tag       A string da tag enviada pelo filtro `script_loader_tag` em WP_Scripts::do_item
 * @param     string    $handle    O nome (handle) do como enviado pelo filtro `script_loader_tag` em WP_Scripts::do_item
 * @param     string    $src       A origem (src) do script como enviado pelo filtro `script_loader_tag` em WP_Scripts::do_item
 * @return    string    $tag       A variável $tag filtrada e com o elemento `noscript`
 */
function add_noscript_filter($tag, $handle, $src){
    // como este filtro roda para cada script na fila
    // precisamos verificar se o $handle é igual o script
    // que queremos filtrar e adicionar o noscript a ele
    if ( 'script-handle' === $handle ){
        $noscript = '<noscript>';
        // você poderia pegar o conteúdo interno de outra função
        $noscript .= '
 
Este site demanda JavaScript
 
';
        $noscript .= '</noscript>'; $tag = $tag . $noscript; } return $tag; } // adiciona a função add_noscript_filter aos filtros em script_loader_tag // deve ysar 3 no último parmetro para garantirque $tag, $handle, $src // estejam disponíveis à funço add_noscript_filter add_filter('script_loader_tag', 'add_noscript_filter', 10, 3);

/** * @summary filtra uma tag de script na fila e adiciona um elemento noscript após ela * * @description filtra uma tag de script na fila (identificada pela variável $handle) e adiciona * um elemento noscript após ela. Se também houver um script inline após o script * identificado por $handle, adiciona o elemento noscript após ele. * * @access público * @param string $tag A string da tag enviada pelo filtro `script_loader_tag` em WP_Scripts::do_item * @param string $handle O nome (handle) do como enviado pelo filtro `script_loader_tag` em WP_Scripts::do_item * @param string $src A origem (src) do script como enviado pelo filtro `script_loader_tag` em WP_Scripts::do_item * @return string $tag A variável $tag filtrada e com o elemento `noscript` */ function add_noscript_filter($tag, $handle, $src){ // como este filtro roda para cada script na fila // precisamos verificar se o $handle é igual o script // que queremos filtrar e adicionar o noscript a ele if ( 'script-handle' === $handle ){ $noscript = '<noscript>'; // você poderia pegar o conteúdo interno de outra função $noscript .= ' Este site demanda JavaScript '; $noscript .= '</noscript>'; $tag = $tag . $noscript; } return $tag; } // adiciona a função add_noscript_filter aos filtros em script_loader_tag // deve ysar 3 no último parmetro para garantirque $tag, $handle, $src // estejam disponíveis à funço add_noscript_filter add_filter('script_loader_tag', 'add_noscript_filter', 10, 3);

Aproveite! A função acima também está disponível no Github.

Arquivado em: tecnologia Marcados com as tags: acessibilidade, desenvolvimento, development, filters, filtros, github, HTML, noscript, PHP, progressive enhancement, script_loader_tag, WordPress

Sobre Celso Bessa

Prefiro construir pontes à muros. Cidadão, tecnologista de interesse público, consultor em cibersegurança, Media Democracy Fund fellowship alumni e fundador da Tecnologia Humanista.

Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (exceto fotografias com produto de terceiros ou pessoas)
Otimizado pela WoWPerations e hospedado na Digital Ocean
(Assinando Digital Ocean através deste link do programa indicação, você ganha crédito de 100 dólares para serem utilizados em até 60 dias, e eu ganho uma pequena comissão)