Back-End

20 nov, 2012

Guia completo de integração com o ambiente gráfico do WordPress – Parte 01

Publicidade

Este artigo é a primeira parte da série sobre desenvolvimento de plugins e temas com o foco na integração com o ambiente nativo da administração do WordPress, o uso dos componentes gráficos tais como botões, tabelas, frames, entre outro CSS nativo, incluindo as API de configurações, nonces entre outras ferramentas que o WordPress já nos oferece.

Nesta primeira parte, iremos falar de alguns pressupostos importantes na criação de interfaces e do básico da criação de páginas de administração, integrando apenas com o CSS que promove o UI do WordPress. Para isso, começaremos por criar um novo plugin, que será a nossa forma de testar o código que iremos desenvolver.

Introdução

A evolução da interface de administração do WordPress ao longo de todo o seu desenvolvimento foi fantástica. Na minha opinião é um fenómeno raro em vários níveis, quando se trata de desenvolvimento colaborativo em software. Passamos, aos poucos, a ter uma interface cada vez mais limpa e acessível – sendo que, atualmente o WordPress é considerado por muitos, como o CMS, com a interface de administração mais simples e intuitiva para o usuário operador, e os testes que têm vindo a acontecer no blog sobre UI da equipa de desenvolvimento mostram bem essa ideia.
A verdade é que esse desenvolvimento é continuamente rápido e a evolução tem sido bastante grande de versão para versão – é por essas e  outras que é importante respeitar os padrões de design e intuitividade já estabelecidos pelo software quando você criar a interface para o seu plugin ou tema.

Durante este artigo iremos abordar várias razões para que isto aconteça.

Criando o plugin de desenvolvimento 

Agora vamos falar de como desenvolver um plugin. É bastante simples, no entanto vou repetir os passos necessários para os leitores mais desatentos. 🙂

Em primeiro lugar, vamos criar uma nova pasta dentro da diretoria wp-content/plugins/ com o nome «plugin-teste-ui» e em seguida um arquivo dentro dessa recém criada diretoria – exatamente com o mesmo nome mais a extensão php, ou seja «plugin-teste-ui.php». Em seguida, abra o arquivo para edição e inclua o seguinte texto, também chamado cabeçalho do plugin:

<?php
/*
Plugin Name: Escola WP Teste UI
Version: 1.0
Author: Escola WP
Author URI: http://www.escolawp.com/
*/

Neste momento, já tem o seu plugin criado e poderá dirigir-se à área de administração de plugins para ativá-lo. No entanto, ele ainda não é funcional pois não tem nenhum código lá dentro. Mas vamos deixá-lo ativado pois vamos adicionando aos poucos o código.

Experiência do usuário 

Este é também conhecido como UX, do inglês user experience, e é uma das particularidades em que a equipe de desenvolvimento da administração do WordPress tem se preocupado mais: manter a experiência do usuário consistente por toda a administração. É muito ofuscante quando um usuário instala um plugin no WordPress e percebe-se que a sua interface não tem nada a ver com a que está habituado. Manter uma interface consistente é importante para manter usuários. Acredite, não são poucos os usuários que deixam de usar determinados plugins porque simplesmente “não são bonitos”.

Manter sempre atualizado

O sistema de atualizações do WordPress é bastante simples. As mudanças ocorrem nas atualizações maiores, ou seja, no incremento dos dois primeiros digitos da versão, enquanto que as versões menores apenas corrigem bugs – e pode existir um infindável número destas. Por exemplo, a próxima mudança de versão, da 3.4 para a 3.5, vai trazer novas APIs e uma interface melhorada, no entanto a versão 3.4.3 (que provavelmente poderá sair antes da 3.5) irá apenas corrigir bugs encontrados nas versões anteriores do WordPress.

Posto isto, manter o plugin atualizado e funcionando corretamente em todas as versões futuras é necessário e importante, além de ser uma das maneiras para não nos preocuparmos com a interface e usando os elementos nativos, pois à medida que o WordPress vai atualizando a sua interface, ela será sempre consistente com as versões do nosso plugin.

Reduzir a pegada do plugin na interface

Esta é uma questão muito discutível, no entanto demasiado importante para ser deixada de fora. Existe a ideia entre os desenvolvedores de que o plugin que criamos é mais importante que o próprio WordPress em si, e isso é natural, pois quem é que não estima as suas criações? Eu também pasei por essa fase quando apenas programa plugins, no entanto, trabalhar e contribuir para a core deu-me uma percepção diferente do que deve ser um plugin. Enumero algumas das minhas conclusões:

  1. Um plugin deve servir apenas um propósito e não uma data deles;
  2. Serve apenas para extender funcionalidades e não para recriá-las (é para isso que existem action hooks do WordPress, se não existir nenhuma que possa ajudá-lo, peça uma!);
  3. Não deve ser de dificil instalação;
  4. Não deve criar demasiadas opções para o usuário, principalmente se requererem nível técnico.

Bom exemplo: P2P do scribu – é um plugin complexo mas com apenas uma finalidade: permitir ligar vários posts e usuários entre si apenas passando determinados parâmetro areavés da WP_Query, ou seja destinado a pessoas que saibam programar em PHP.

Mau Exemplo: W3 Total Cache – o propósito é fazer cache, no entanto também serve para integrar o S3 ou outro CDN, comprime o HTML, minifica o javascript e o CSS, importa automaticamente anexos dos posts para a biblioteca e só lhe falta tirar cafés para ficar completo… A meu ver, ele é totalmente desnecessário, sendo que este deveria ter sido separado em pequenos plugins cada um com um propósito apenas.

Criar ou não criar um menu ou submenu?

Esta dúvida é muito importante responder coerentemente: “Será necessário meu plugin ter um menu ou um submenu específico?”, “poderei usar um dos submenus já existentes para colocar lá as opções?”. Como já referido anteriormente, é muito importante que se reduza a “pegada gráfica” do seu plugin para que o usuário se sinta confortável. Existem plugins cuja necessidade é de ter apenas um ou dois controladores (checkboxes, input boxes, etc). Será mesmo necessário criar uma página nova na administração para apresentar esse dois controladores? Eles não poderão ir para a página de opções gerais?

Como exemplos disso, podemos pensar em dois plugins hipotéticos: um gere e integra todas as suas contas das redes sociais e necessita, portanto, no mínimo de uma input box para identificar cada conta. Faz sentido neste caso criar uma página nova chamada, por exemplo, “Redes Sociais” e aí disponibilizar seus controladores. Outro exemplo é de um plugin que transforma a galeria nativa do WordPress num slideshow em jQuery e que necessita de poucos controladores para modificar o aspecto do slideshow. Neste caso, faz sentido colocar esses controladores na página de “Opções de Media”.

Uma exceção poderá ser um plugin que forneça uma ferramenta ao WordPress. Ferramenta aqui é algo que corra na administração como um analisador de SEO ou um regenerador de thumbnails. Quando estamos perante um caso destes, esse plugin deve obrigatoriamente criar uma subpágina no menu de ferramentas.

 

Um bom exemplo de um plugin que não necessita de configurações pois já tem um propósito bem definido é o meu plugin “Hide Comments Feature”, que simplesmente elimina o sistema de comentários do WordPress assim que ativado. É simples, direto, eficaz e não necessita de nenhuma configuração.

No meu entender, não vejo razão nenhuma para que um plugin crie um novo menu de topo para albergar em várias páginas a sua funcionalidade. Um dos plugins que mais aprecio em termos de SEO é o WordPress SEO do Yoast de Valk, pois é bastante útil e as suas funcionalidades são milagrosas. No entanto, ele erra em toda a construção que faz da sua interface. O plugin cria uma nova estrutura de raíz apenas para albergar várias subpáginas com uma montanha de configurações cada uma – muitas delas repetidas e desnecessárias. O mais interessante foi que nas versões seguintes, o Yoast deve ter percebido a dificuldade que seus usuários encontravam em configurar o seu plugin e decidiu incluir uma tour para guiar na configuração. Infelizmente, também peca ao não saber usar a ferramenta ideal, que a meu ver poderia ser algo parecido com o Wizard, do BuddyPress.

Para terminar esta crítica, o que para mim é mais absurdo: uma página de promoção chamada “About” e uma sidebar que acompanha todas as páginas que inclui várias caixas com publicidade e links para doações.

 

Não quero com isto dizer que o Yoast não possa monetizar o seu plugin, mas não é necessário fazer isto, pois podemos sempre partir do princípio que se uma pessoa quer doar porque gosta do trabalho, então ela procurará uma maneira de fazê-lo. A meu ver, um pequeno link para pedir doação na página de ativação do plugin seria o suficiente e teria praticamente o mesmo efeito. A resolução ideal para este problema poderia ser a escolha das configurações mais importantes e criar uma subpágina chamada “SEO” no menu de opções. Todas as outras configurações deveriam ser deslocadas para action hooks.

Decisões, opções não!

É o mote usado sempre na construção do WordPress. A ideia é que o usuário não perca tempo em ter que configurar ou fazer escolhas. Escolhas levam a indecisões, indecisões levam a pedidos de funcionalidade e quanto mais opções existirem, mais propenso ao erro o WordPress se encontra. Obviamente, um usuário não deve ficar preso às escolhas da maioria e por isso é que existem os plugins: para extender as funcionalidades que possam ajudar um grupo de pessoas que usam o WordPress e fazer melhor o seu trabalho.

Tenha sempre em mente o seguinte quando for construir o seu plugin:

  • Um plugin deve ter um propósito, e apenas um que seja bem definido;
  • Deve dar como escolha ao usuário apenas opções que são fundamentais para o bom funcionamento do plugin;
  • Desenvolva uma funcionalidade de maneira a atender à maioria, e forneça action hooks para que o usuário mais desenvolto possa modificar a funcionalidade a seu gosto.

Criando uma página na administração

Vamos dar inicio à criação de uma subpágina na administração, abaixo do menu de opções. Esse submenu vai se chamar “Teste de UI”! Para isso, abra o arquivo de plugin que criamos anteriormente e vamos então colocar o seguinte código:

<?php
// Adicionar uma acção no menu da adminsitração
add_action( 'admin_menu', 'test_ui_submenu_page' );

function test_ui_submenu_page() {
// Adicionar um submenu para a página do plugin onde iremos criar controladores
add_submenu_page( 'options-general.php', __( 'Teste UI', 'plugin-test-ui' ), __( 'Teste UI', 'plugin-test-ui' ), 'manage_options', 'plugin-test-ui', 'test_ui_submenu_page_callback' );
}

// Esta função faz o display do conteúdo da página
// No futuro iremos colocar tudo o que é visível aqui
function test_ui_submenu_page_callback() {
echo '<div>';
echo '<h3>Teste UI</h3>';
echo '</div>';

}

Esta entrada de submenu já está criada. Guarde o arquivo e volte a fazer refresh ao browser. Você irá encontrar uma entrada de submenu “Teste UI” sob o menu de opções. Esta é a página onde iremos colocar os nossos controladores. Qualquer usuário poderá encontrar esse submenu, mas será fácil? Poderá ser uma tarefa dificil se você não disponibilizar instruções para seus usuários buscarem a página de configurações. Para isso, existe uma forma bastante fácil de contronar esse problema.

Criar um link para a página de opções 

 

Com isto, vamos tentar garantir que qualquer opção do plugin não seja perdida, e assim os nossos usuários descobrem facilmente o que fazer após ativar o plugin. Adicionar um link para a página de configuração ao lado dos links de desativar e editar é uma boa maneira de garantir isso:

<?php
add_filter( 'plugin_action_links', 'my_plugin_settings_link', 10, 2 );
function my_plugin_settings_link( $links, $file ) {
if ( $file == 'plugin-test-ui/plugin-test-ui.php' ) {
/* Insert the link at the end*/
$links['settings'] = sprintf( '<a href="%s"> %s </a>', admin_url( 'options-general.php?page=plugin-test-ui' ), __( 'Settings', 'plugin-test-ui' ) );
}
return $links;

}

Se você se dirigir agora à página de plugins, irá encontrar nas acções do plugin um link direto para a página de configuração. Desta maneira, seus usuários irão se sentir mais confortáveis.

No próximo artigo iremos tratar de outros elementos nativos da administração. Vamos começar por construir os controladores da nossa página e aprender mais algumas regras na construção de plugins para WordPress.

Até breve!