Como tornar o WordPress difícil para os clientes bagunçarem
Publicados: 2022-03-10O WordPress é um CMS maravilhosamente poderoso que vem com muitos recursos versáteis, dando-lhe a flexibilidade de trabalhar fora da caixa para uma ampla gama de usuários. No entanto, se você é um profissional que cria temas e plugins personalizados, às vezes esses recursos podem ser problemáticos. Os mesmos recursos e opções que permitem que temas prontos para uso se adaptem a muitos casos de uso diferentes às vezes também podem ser usados para prejudicar um tema personalizado cuidadosamente projetado, criado para um caso de uso específico.
O artigo a seguir contém uma coleção de trechos de código que eu uso repetidamente em quase todos os projetos do WordPress. O que todos eles têm em comum é que eles limitam a funcionalidade que é desnecessária, confusa ou insegura. Tudo o que segue pode ser usado em qualquer site, mas essas dicas são especialmente aplicáveis para profissionais que criam temas e plugins personalizados para clientes.
Leitura adicional no SmashingMag:
- Como criar e personalizar um tema filho do WordPress
- Escrevendo documentação eficaz para usuários finais do WordPress
- Limitando a visibilidade de postagens no WordPress por meio de nomes de usuário
- Utilizando funções de usuário no WordPress
A distinção notável é que os temas personalizados podem ser criados para servir a um propósito específico. Assim, os espaços em branco para o conteúdo dos autores podem e também devem ser muito mais estreitos. Um tema WordPress bem projetado deve tomar o maior número possível de decisões de design para que o autor não precise.
Desative os plugins e o editor de temas
Não há uma boa razão para que alguém edite ao vivo seu tema personalizado ou arquivos de plug-in por meio do painel do WordPress. Profissionais não trabalham assim, e trouxas normalmente não percebem o quão fácil é quebrar um site pulando um único ponto e vírgula. É também uma vulnerabilidade de segurança que os hackers podem explorar. Felizmente, nossos amigos do WordPress.org tornaram muito fácil desativar esse recurso. Simplesmente adicione o seguinte trecho ao arquivo wp-config.php .
define( 'DISALLOW_FILE_EDIT', true );
Além do editor de temas, isso também desativará o editor de plugins. Eu considero isso um recurso e não um bug.

Limite o editor visual e de texto
Por padrão, o editor WordPress WYSIWYG suporta muitas opções de formatação para um tema personalizado bem projetado. Permitir que os clientes substituam cores de texto ou tamanhos de fonte é uma maneira rápida de fazer com que até o site mais chique pareça barato e feio. Se o texto da postagem do blog foi projetado para ser sempre alinhado à esquerda, por que dar ao autor um botão para alinhá-lo à direita? Você acha que ficará bom se o texto na página Sobre estiver em roxo, em negrito e em itálico? Então não arme seu cliente com os meios para fazê-lo. Na maioria das situações, recomendo desabilitar totalmente o editor visual.

Desativando o Editor Visual
Adicione o seguinte trecho ao arquivo functions.php do seu tema e a guia para alternar o editor WYSIWYG desaparecerá.
function emersonthis_disable_visual_editor(){ # add logic here if you want to permit it selectively return false; } add_filter('user_can_richedit' , 'emersonthis_disable_visual_editor', 50);
Este é um bom começo, mas você notará que os botões negrito e itálico ainda estão presentes no editor de texto simples. Na minha experiência, os clientes abusam desses botões com muito menos frequência quando a gratificação instantânea do editor WYSIWYG acaba. Mas ainda prefiro removê-los se não forem necessários.

Removendo Quicktags em negrito e itálico do editor de texto
O editor de texto possui botões de tag rápida que envolvem o texto selecionado com as tags <strong>
e <em>
. Adicione o seguinte código no arquivo functions.php do seu tema e os autores não terão mais botões em negrito ou itálico.
# Removes bold and italic quicktags from text editor function emersothis_quicktags_settings( $qtInit ) { //To disable ALL butons it must be set to "," (not "") $qtInit['buttons'] = 'more,'; return $qtInit; } add_filter('quicktags_settings', 'emersonthis_quicktags_settings');
Isso elimina a possibilidade de seu cliente decidir, digamos, colocar em itálico um artigo inteiro. Mas isso não remove a capacidade de escrever manualmente no editor de texto. De vez em quando isso pode ser útil quando você está em apuros.
Se você estiver em uma situação rara em que o próprio usuário deve formatar o texto, você pode deixar o editor visual ativado, mas desativar botões específicos individualmente.
Desativando botões no editor visual
Uma das poucas vezes que deixo o editor visual habilitado é quando os autores estão escrevendo posts longos ou páginas que possuem estrutura interna própria. Por exemplo, um autor de um artigo de 10 páginas pode precisar da capacidade de adicionar subtítulos. Nessas situações, configuro classes personalizadas para as subseções e desabilito todos os outros botões de formatação que não são necessários.
A API do WordPress para modificar o editor TinyMCE é um pouco complicada porque você precisa procurar os nomes de código usados para se referir a cada botão que deseja remover. Você obtém o maior retorno possível removendo o botão “pia da cozinha” que alterna toda a segunda linha que contém os botões de formatação mais problemáticos. Adicionar o seguinte código ao arquivo functions.php do seu tema fará isso.
# Remove visual editor buttons function emersonthis_tinymce_buttons($buttons) { # Remove the text color selector $remove = array('wp_adv'); //Add other button names to this array # Find the array key and then unset return array_diff($buttons,$remove); } add_filter( 'mce_buttons', 'emersonthis_tinymce_buttons' );
Um truque para descobrir o nome do código do botão que você deseja remover é inspecionar a marcação do formulário. No momento da escrita, cada botão tem um nome de classe que começa com mce-i-
seguido pelo nome do código que você colocaria no array acima.
Remova o botão "Adicionar mídia"
O botão “Adicionar mídia” aparece por padrão sempre que um tipo de postagem personalizado suporta o recurso de editor. Mas os tipos de postagem personalizados podem ser usados para uma ampla variedade de coisas e, muitas vezes, é inadequado que esse campo inclua imagens.

Na maioria das vezes, quando espero que o autor publique uma imagem para acompanhar o texto, uso miniaturas de postagem (também conhecidas como imagens em destaque). Isso facilita a integração das imagens em modelos de tema e também dá ao desenvolvedor mais controle sobre o tamanho e as especificações das imagens.
Fotos ad hoc incorporadas usando o botão “Adicionar mídia” no editor são difíceis de controlar e tendem a parecer estranhas dependendo de onde o autor insere a imagem em relação ao texto ao redor. Eles também causam confusão para muitos autores, porque de relance o botão “Adicionar mídia” é facilmente confundido com o botão de upload “Imagem em destaque” que aparece mais abaixo na página (por padrão), e pode ser usado de maneira muito diferente pelo tema. Eu quase sempre o removo, adicionando o seguinte código ao arquivo functions.php do tema.
# Remove media buttons function emersonthis_remove_add_media(){ # do this conditionally if you want to be more selective remove_action( 'media_buttons', 'media_buttons' ); } add_action('admin_head', 'emersonthis_remove_add_media');
Você pode adicionar lógica antes de remove_action()
para remover apenas o botão de mídia condicionalmente para determinados tipos de postagem. Por exemplo, você pode permitir que os autores adicionem imagens às páginas, mas não postagens de blog que usam miniaturas.

Desativar opções do personalizador de temas
Se você estiver trabalhando em um tema filho, o tema pai poderá oferecer opções de personalização inadequadas para o filho. As opções de personalização podem não ser utilizadas em seu tema filho ou ter o potencial de quebrar as coisas. De qualquer forma, a API do personalizador de temas do WordPress facilita a eliminação deles adicionando o seguinte trecho ao arquivo functions.php do seu tema.
# Remove customizer options. function emersonthis_remove_customizer_options( $wp_customize ) { // $wp_customize->remove_section( 'static_front_page' ); // $wp_customize->remove_section( 'title_tagline' ); $wp_customize->remove_section( 'colors' ); $wp_customize->remove_section( 'header_image' ); $wp_customize->remove_section( 'background_image' ); // $wp_customize->remove_section( 'nav' ); // $wp_customize->remove_section( 'themes' ); // $wp_customize->remove_section( 'featured_content' ); // $wp_customize->remove_panel( 'widgets' ); } add_action( 'customize_register', 'emersonthis_remove_customizer_options', 30);
Cada linha no snippet acima corresponde a uma opção de personalização de tema individual que você pode desabilitar ao descomentá-la.
Ocultar itens de menu do painel não utilizados
Nem todos os sites têm os mesmos tipos de conteúdo; alguns sites não têm blog, por exemplo. Se aplicarmos ao painel do WordPress a mesma lógica que aplicamos a qualquer outra interface de usuário, fica confuso e desnecessário mostrar botões que não fazem nada. Neste exemplo, o item de menu Posts seria desnecessário, então vamos removê-lo adicionando o seguinte trecho a functions.php :
function emersonthis_custom_menu_page_removing() { // remove_menu_page( 'index.php' ); //Dashboard // remove_menu_page( 'jetpack' ); //Jetpack* remove_menu_page( 'edit.php' ); //Posts remove_menu_page( 'upload.php' ); //Media // remove_menu_page( 'edit.php?post_type=page' ); //Pages remove_menu_page( 'edit-comments.php' ); //Comments // remove_menu_page( 'themes.php' ); //Appearance // remove_menu_page( 'plugins.php' ); //Plugins // remove_menu_page( 'users.php' ); //Users // remove_menu_page( 'tools.php' ); //Tools // remove_menu_page( 'options-general.php' ); //Settings } add_action( 'admin_menu', 'emersonthis_custom_menu_page_removing' );
Cada linha corresponde a um menu específico no painel. Os nomes dos arquivos nem sempre correspondem ao nome que aparece no menu do painel, portanto, as linhas comentadas são deixadas como referência rápida.


É importante entender que a remoção desses itens de menu não revoga as permissões do usuário. Um usuário ainda pode acessar o item de menu oculto diretamente usando o URL. Se o objetivo é tornar o painel menos confuso ocultando controles supérfluos, provavelmente não há problema. Se o objetivo for realmente impedir que um usuário acesse esses controles, você precisará modificar os recursos da função do usuário. Para fazer isso, adicione um trecho como o seguinte ao gancho de ativação de um plug-in (ele só precisa ser executado uma vez):
global $wp_roles; // global class $role = 'author'; $cap = 'delete_published_posts'; $wp_roles->remove_cap( $role, $cap );
Use esta tabela abrangente de todos os recursos para encontrar os recursos específicos que você pode adicionar ou remover para cada uma das funções padrão.
Adicione uma dica sobre como as quebras de linha funcionam no editor
Por padrão, o editor visual (TinyMCE) criará um novo parágrafo quando o autor pressionar Return . Se você quer apenas uma quebra de linha à moda antiga (aka retorno de carro), você precisa pressionar Shift+Return . Isso é bacana e poderoso, mas não intuitivo para muitos autores. Comecei a adicionar um lembrete rápido para evitar a reclamação inevitável sobre “um monte de espaço em branco estranho” aparecendo em um post ou página.

Adicione o seguinte trecho ao seu arquivo functions.php . Altere o valor de $tip
para dizer o que você deseja lembrar aos seus autores.
# Adds instruction text after the post title input function emersonthis_edit_form_after_title() { $tip = '<strong>TIP:</strong> To create a single line break use SHIFT+RETURN. By default, RETURN creates a new paragraph.'; echo '<p>'.$tip.'</p>'; } add_action( 'edit_form_after_title', 'emersonthis_edit_form_after_title' );
Essa técnica pode ser usada para injetar um lembrete sobre qualquer coisa que você queira que os autores lembrem ao adicionar ou editar conteúdo.

Não distribua contas de administrador
A função de administrador do WordPress é muito poderosa e com grande poder vem uma grande responsabilidade. Alguns clientes são usuários avançados do WordPress que administram seu site com competência. Muitos deles não são. Este último não deve estar bisbilhotando como administradores. Em vez disso, torne-os um editor e crie uma conta de administrador separada com uma senha super forte. Se você tiver uma afiliação contínua com o cliente, poderá manter essas credenciais até que o cliente esteja pronto para administrar o site por conta própria.

Como alternativa, forneça ao cliente os dois conjuntos de credenciais e faça com que ele armazene as credenciais de administrador em algum lugar seguro e use-o apenas para executar tarefas administrativas. Muitos clientes perderão imediatamente as credenciais de administrador, mas tudo bem: a senha sempre pode ser redefinida, e esses são geralmente os tipos de clientes que o recontratam para fazer a manutenção de rotina do site para eles de qualquer maneira.
A razão mais importante para ser mesquinho com contas de administrador é que elas são uma vulnerabilidade de segurança. Um efeito colateral agradável é que os usuários iniciantes do WordPress geralmente acham a interface do usuário do painel menos esmagadora quando fazem login como autores ou editores, porque há menos menus para classificar enquanto aprendem habilidades básicas, como adicionar ou editar postagens.
Usar plug-ins mu
O diretório mu-plugins/ existe há muito tempo, mas a maioria dos hackers do WordPress que conheço nunca ouviram falar dele. O “mu” significa deve usar . O diretório é um local alternativo onde os plugins podem ser instalados.

A diferença é que os plugins “must use” são automaticamente ativos e não podem ser desativados acidentalmente em todo o painel. Eles também são carregados antes dos outros plugins. Isso é ideal para plugins que devem estar presentes para que o site funcione corretamente. Também é uma ótima alternativa para hacks sem apresentação que normalmente podem ficar presos no arquivo functions.php do seu tema personalizado. Por exemplo, gosto de definir tipos de postagem personalizados em um mu-plugin, porque esse conteúdo deve persistir independentemente de um tema específico estar ativo ou não.
O diretório mu-plugins/ não existe de fábrica. Você o cria manualmente dentro de wp-content/ .
wp-content/ mu-plugins/ plugins/ themes/ ...
A maior limitação é que o WordPress só procura por arquivos no nível superior de mu-plugins/ e ignora o código dentro de um subdiretório. No entanto, você pode contornar isso criando um único arquivo PHP no topo de mu-plugins/ que carrega o código de um subdiretório irmão. Lembre-se também de que as notificações de atualização não se aplicam a mu-plugins. Eu penso em mu-plugins/ como o lugar para colocar código importante que o cliente nunca deveria ter que pensar.
Leia mais sobre plugins obrigatórios no Codex. Se você deseja exigir outros plugins impedindo a capacidade de desativá-los, você pode achar útil a biblioteca WDS-Required-Plugins.
Nota Final
Você pode achar contra-intuitivo desabilitar a funcionalidade que o WordPress oferece gratuitamente. Mas lembre-se de que seu cliente não está pagando para você dar a eles muitos botões. Seu trabalho é criar um site eficaz e robusto, adaptado para atender aos objetivos do cliente. Ao desabilitar funcionalidades problemáticas ou estranhas, você está realmente entregando mais valor .
Se você quiser mais trechos, criei um repositório público GitHub de trechos úteis do WordPress que contém versões atualizadas dos hacks acima, bem como outros que adiciono periodicamente. Se você tiver seus próprios snippets úteis que deseja compartilhar, solicitações de pull são mais que bem-vindas!