O WordPress 6.0 tem vários novos recursos que devem deixar qualquer extensor feliz em construir em cima da plataforma. No entanto, uma das ferramentas mais avançadas é a capacidade de bloquear blocos, que podem ser usados para impedir que blocos específicos sejam movidos ou removidos.
A próxima versão inclui uma nova configuração “Bloquear” na lista suspensa de opções da barra de ferramentas do bloco, conforme mostrado na captura de tela a seguir:
Ao clicar na opção de bloqueio, aparece um modal que permite ao usuário desabilitar o movimento do bloco ou impedir sua remoção:
Até agora, o melhor caso de uso que encontrei para bloquear blocos por meio da interface do usuário é interromper edições acidentais. Como os usuários têm acesso às configurações da interface do usuário por padrão, eles podem desativar o bloqueio posteriormente se eu precisar mover algo pelo layout ou excluí-lo.
Na superfície, isso pode não parecer um recurso particularmente robusto. No entanto, o verdadeiro poder do bloqueio de bloco está no final do desenvolvimento. Os autores do tema podem usar o novo lock
key para evitar que os usuários finais movam ou removam blocos específicos em seus modelos.
O código a seguir é um exemplo de um bloco de grupo que impede ambos:
Isso pode ser especialmente útil para layouts mais complexos, como um cabeçalho e uma área de navegação. Os autores de temas agora podem exercer mais controle sobre a experiência do usuário em locais onde o design pode ser facilmente quebrado.
Observe que o bloqueio não se estende aos blocos aninhados. Portanto, se um bloco de grupo externo estiver bloqueado, os usuários ainda poderão adicionar, remover ou mover qualquer coisa dentro dele. Os Themers também devem adicionar um bloqueio a todos os itens aninhados que desejam manter no lugar. Há um tíquete aberto e alguns trabalhos de design iniciais em torno do bloqueio de blocos aninhados, mas não chegará ao WordPress 6.0.
Embora esse novo recurso ofereça mais controle para os autores do tema, ele não concede poder absoluto. Os usuários ainda podem desbloquear blocos clicando no ícone de cadeado na barra de ferramentas. No entanto, como é o ditado comum nos círculos de desenvolvimento do WordPress, “Existe um gancho para isso”.
George Mamadashvili cobriu usando o block_editor_settings_all
gancho de filtro para personalizar o acesso. Ele forneceu alguns exemplos de como habilitar ou desabilitar a interface do usuário com base em recursos, e-mail do usuário e contexto, como o tipo de postagem. Não há limite de como os desenvolvedores podem usar esse gancho. Em geral, as verificações de capacidade são normalmente a melhor opção ao lidar com permissões.
Um desenvolvedor pode desativar a capacidade de qualquer usuário de mover ou remover blocos. Em casos do mundo real, isso deve ajudar agências e freelancers a criar experiências rigidamente controladas para seus clientes, especialmente ao entregar o acesso ao editor do site.
Para desenvolvedores que estão criando temas para lançamento no WordPress.org, a Equipe de Temas atualmente não permite o uso deste gancho. Ele se enquadra na diretriz “território do plug-in”. No mês passado, a equipe anunciou que os temas podem bloquear blocos, mas não desativar a capacidade do usuário de desbloqueá-los.
O bloqueio de bloco não se limita a modelos baseados em bloco. Também é possível bloquear coisas dentro de posts ou páginas. Com uma configuração de permissões personalizada, os desenvolvedores podem estendê-la para dar liberdade aos administradores e editores, evitando que autores e contribuidores substituam bloqueios, por exemplo.
Por padrão, todos os blocos suportam bloqueio. Para desenvolvedores de plug-ins que desejam desativar esse recurso, eles podem definir o supports.lock
chave para false
em seu block.json
Arquivo.
Estou ansioso para ver novos plugins WordPress construídos neste sistema. Há muito espaço para explorar desde a personalização do site e a edição de ângulos de fluxo.
Para ler mais, confira a postagem de Anne McCarthy sobre como criar experiências selecionadas com APIs de bloqueio e theme.json.