Error!
Houve algum problema! Por favor, tente novamente.
Admin: '. (Atenção para o espaço em branco após o texto para deixar um pouco de espaço antes do link.) Por fim, o terceiro parâmetro é o que vai após o link, que é apenas '
' uma vez que você precisa para fechar a tag. Em outras palavras, edit_post_link() é capaz de lidar com três parâmetros, e eles são passados, neste sentido, para falar um pouco em PHP:
Lembre-se de que os parâmetros são passados entre aspas e separados por vírgulas e um espaço para torná-los mais legíveis. Não é tão complicado, não é mesmo? Você só precisa saber quais os parâmetros devem ser passados, e em que ordem eles devem ser passados. A ordem é importante: sem a ordem correta, você pode criar o link com o texto errado, o que com certeza arruinaria seu design, ou, na melhor das hipóteses, a validação do site. Vejamos agora algo um pouco mais complicado:
Essa template tag irá gerar uma nuvem de tags exibindo até 45 tags, com a menor em fonte 8 pt (pontos), e a maior em 22 pt. Elas são exibidas em uma lista e classificadas por nome, em ordem crescente. Sabemos disso porque esses são os valores padrão, e há uma porção deles, como você pode ver na Tabela 2-1. Na verdade, a template tag wp_tag_cloud() é capaz de passar 13 parâmetros.
33
PARTE I: INTRODUÇÃO AO WORDPRESS Tabela 2-1 Parâmetros padrão para nuvem de tags Parâmetro
Descrição
Valor padrão
smallest
Menor tamanho de tag
8
largest
Maior tamanho de tag
22
unit
Tamanho de fonte utilizado
pt
number
Máximo de tags exibidas
45
format
Como exibir as tags
flat separated with white space
separator
O que aparece entre as tags
white space
orderby
Como organizar as tags
name
order
Como classificar as tags
ascending
exclude
Quais tags excluir
none
include
Quais tags incluir
all
link
Links de edição ou de visualização
view
taxonomy
A base para a nuvem de tags
post_tag
echo
Exibir ou não a nuvem de tags
true
Se você comparar esses valores com a descrição da saída padrão de wp_tag_cloud(), você verá que eles são passados sem que você precise passar quaisquer parâmetros manualmente. Agora, tente alterar a tag mudando alguns parâmetros. No entanto, esteja ciente de que wp_tag_cloud() lê seus parâmetros no que chamamos de query style (ou estilo de consulta). Isso é bom, pois precisar digitar todos os 13 parâmetros possíveis quando você quer simplesmente mudar o tamanho da fonte de pt para px não seria muito amigável para com o usuário. Em vez disso, você pode simplesmente escrever em texto simples:
Eu não sabia que px era um parâmetro válido para a opção de unidade; descobri isso na descrição da template tag (http://codex.wordpress.org/Template_Tags/wp_ tag_cloud). Outros tamanhos possíveis de fontes são em, % e, naturalmente, pt, que é o valor padrão. Se você deseja passar mais parâmetros, basta adicionar um (&) entre eles, dentro do parâmetro, sem espaços. Alterar o ordenamento das tags para count ao invés de name :
Você pode adicionar ainda mais parâmetros à template tag, simplesmente separando-os com um &. Agora torne a ordenação aleatória, alterando a menor tag para 10 px (uma vez que o padrão de 8 é um tanto pequeno quando você usa pixels e não pontos) e maior para 24 px:
34
CAPÍTULO 2: SINTAXE DO WORDPRESS
O valor de ordenamento RAND, está em caixa alta. Isso é intencional; é assim que você passa os dados de ordenamento (as outras opções são ASC para crescente e DESC para decrescente). Além disso, você deve ter percebido que tanto smallest quanto largest foram colocadas antes da opção de unidade. Essa é uma boa forma de colocar os vários parâmetros na ordem em que são descritos, pois assim você será capaz de encontrá-los com maior facilidade sempre que precisar editar o código ou investigar algo.
MAIS SOBRE PARÂMETROS Uma vez que você estará fazendo muita coisa com as template tags, é crucial ter uma compreensão acerca dos parâmetros. Há três tipos de template tags, que já foram abordados. O primeiro tipo não aceita parâmetros, o segundo aceita um ou vários parâmetros entre aspas, e o terceiro tipo é o chamado query style, que separa as diversas opções com o caractere &. Naturalmente, a não passagem de um parâmetro significa que você acaba de posicionar a template tag no local em que precisa que ela esteja, e isso também vale para as outras template tags, uma vez que existe uma saída padrão. Os problemas surgem quando você precisa alterar essa saída padrão, e, portanto, os parâmetros. Nos exemplos anteriores, você já fez tudo isso. Lembre-se de que você passou apenas uma informação em um parâmetro para a template tag bloginfo():
Em seguida, você passou um parâmetro em estilo PHP, com a template tag edit_post_ link(). Aqui, você disse à template tag qual deveria ser o texto do link, e o que deveria vir antes e depois dele, separando cada instrução com uma vírgula e colocando os dados entre aspas: Admin: ', '
, mas a saída disso seria nada, de modo que, se você quiser usar isso com o seu próprio código PHP, esta é a maneira de proceder. Lembre-se de que strings consistem em texto entre aspas, integers são números inteiros, e que parâmetros Boolean podem ser true (verdadeiros) ou false (falsos), sem usar aspas. Tendo isso em mente, vai ser muito mais fácil entender as template tags que você usará para construir sites muito bacanas no WordPress mais adiante.
36
CAPÍTULO 2: SINTAXE DO WORDPRESS
CONDITIONAL TAGS As conditional tags (tags condicionais) são extremamente úteis. Você irá utilizá-las em arquivos de modelo do seu tema e, como o nome sugere, elas servem para configurar diversas condições. Em outras palavras, você pode usá-las para exibir coisas diferentes, dependendo da situação. Um bom exemplo é a conditional tag is_home(), que verifica se você está ou não na página inicial. Utilize essa tag para gerar uma saudação, já que essa é a coisa educada a fazer: Ei, você, seja bem-vindo ao site. Eu amo novos visitantes!
Alguma mensagem de erro ou algo do tipo.
Houve algum problema! Por favor, tente novamente.
Alguma mensagem de erro ou algo do tipo.
Alguma mensagem de erro ou algo do tipo.
Alguma mensagem de erro ou algo do tipo.
Alguma mensagem de erro ou algo do tipo.
Alguma mensagem de erro ou algo do tipo.
Desculpe, mas não há nada aqui! Você poderia chamar isso de uma mensagem de erro 404 Página Não Encontrada, e estaria coberto de razão. A página que você está procurando não existe, ou a URL que você seguiu ou digitou pode estar errada de alguma forma.
Por que você não tenta fazer uma busca? Use a caixa de busca e tente pensar em uma palavra-chave de busca adequada, e você provavelmente vai encontrar o que procura.
Você tem certeza de que a página que você procura deveria estar aqui? Então avise para a gente!
Quer ler outra coisa? Estas são as últimas 20 atualizações mais recentes:
ul>Desculpe, mas não há nada aqui! Você poderia chamar isso de uma menssagem de erro 404 Página Não Encontrada, e estaria coberto de razão. A página que você está procurando não existe, ou a URL que você seguiu ou digitou pode estar errada de alguma forma.
Por que você não tenta fazer uma busca? Use a caixa de busca e tente pensar em uma palavra-chave de busca adequada, e você provavelmente vai encontrar o que procura.
Você tem certeza de que a página que você procura deveria estar aqui? Então avise para a gente!
Quer ler outra coisa? Estas são as últimas 20 atualizações mais recentes:
Nosso sensacional feed RSS mantém você atualizado!
Our smashing RSS feed¨ keeps you up-to-date!
'; $content.= 'Isto é um marcador para futuras opções de admin!
'; echo 'Isto é um marcador para futuras opções de admin! ' ; echo '
Esta é a página de configurações do plug-in Footer Notes. Este plug-in adiciona código HTML no final de suas postagens e itens de feed. Simplesmente acrescente o código HTML desejado para os dois locais possíveis.
Deixa qualquer dos dois campos completamente vazios se não quiser retornar nada!
' . $content . ' blockquote>'; } add_shortcode('pull', 'pullquote');
Isso é semelhante ao exemplo anterior, exceto pelo fato de que você está extraindo o array shortcode_atts() e a parte $content = null, que informa que você precisa fechar esse shortcode. Você também vai chamar isso em sua declaração de retorno para inserir as coisas entre as tags de abertura e fechamento do shortcode. Em outras palavras, trata-se de [shortcode]$content[/shortcode], e o que mais você colocar ali dentro. É aí que entram em cena os atributos, neste caso apenas float. A ideia é que, usando o shortcode [pull], o usuário configura float para alignleft ou alignright, da seguinte forma: [pull float="alignright"]Meu texto[/pull]
Designers de tema experientes sabem que tanto alignleft quanto alignright são classes padrão para posicionamento, usadas dentro do WordPress, por isso seu tema já deve contê-los. Você vai utilizá-los para posicionar a citação. Em outras palavras, você retorna o código, uma citação em bloco com a classe pull quote, e qualquer que seja o valor atribuído pelo usuário ao atributo float, e gera a saída. O uso de [pull float="alignright"]Meu texto[/pull] irá gerar o seguinte código:Meu texto
Isso é útil para quem não quer alterar o código HTML. É claro que, se você quiser mais atributos, pode simplesmente adicioná-los ao array, e então incluí-lo na posição que quiser.
TRECHOS DE SHORTCODE Você talvez esteja se perguntando se o aninhamento de shortcode funciona. Funciona sim, e você pode colocar uma tag de shortcode dentro de outra, desde que abra e feche todas as tags adequadamente, como em HTML. O exemplo a seguir é válido: [shortcode-1] [shortcode-2] [/shortcode-2] [/shortcode-1]
Mas este provavelmente causaria um erro e resultados estranhos: 224
CAPÍTULO 10: WORDPRESS COMO CMS [shortcode-1] [shortcode-2] [/shortcode-1] [/shortcode-2]
No entanto, para que o primeiro trecho funcione, você precisa permitir shortcode dentro do seu shortcode, usando do_shortcode(). Por isso, se você quisesse permitir shortcode dentro da tag [pull], a partir do exemplo anterior, precisaria colocar $content dentro de do_shortcode(), da seguinte forma: function pullquote( $atts, $content = null ) { extract(shortcode_atts(array( 'float' => '$align', ), $atts)); return '' . do_ shortcode($content) . ''; } add_shortcode('pull', 'pullquote');
Caso contrário, qualquer shortcode posicionado entre [pull] e [/pull] não passaria pelo parsing adequado. Lembre-se de que o shortcode funciona apenas dentro do conteúdo, e não em cabeçalhos ou até mesmo trechos. Esse recurso está associado à template tag the_content(). No entanto, você pode fazê-lo funcionar usando a função do_shortcode() e adicionando um filtro. Pode ser uma boa ideia adicionar suporte a shortcode pelo menos às áreas para widgets se você pretende fazer coisas impressionantes com eles. Afinal, aquele widget de texto pode ser muito útil. O código a seguir em seu arquivo functions.php irá adicionar suporte a shortcode ao widget de texto padrão: add_filter('widget_text', 'do_shortcode');
Ele aplica a função do_shortcode() à função widget_text() como um filtro (com add_filter() obviamente). É simples, bem do jeito que eu gosto! A API e shortcode é na verdade bastante completa. Você pode ler a respeito no Codex do WordPress http://codex.wordpress.org/Shortcode_API se quiser mais informações. Usar shortcodes é uma excelente forma de permitir que os usuários adicionem recursos e funcionalidade ao seu conteúdo. No entanto, às vezes você precisa ir além dos elementos de design óbvios (sejam eles widgets ou alterações no loop) e o conteúdo em si, especialmente se o site em questão precisar promover outros serviços. A integração do conteúdo externo ao WordPress é abordada na seção seguinte.
INTEGRANDO CONTEÚDO EXTERNO AO WORDPRESS Às vezes, você precisa colocar conteúdo externo ao WordPress no seu site de WordPress. Isso pode ser complicado, porque nem todas as plataformas de publicação são amistosas. Na melhor das hipóteses, o conteúdo que você precisa expor dentro de seu site de WordPress 225
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS pode ser exportado de forma semelhante a um widget (não do tipo para plug-in, e sim do tipo JavaScript), incluído no todo com PHP, ou talvez até mesmo exibido em um iframe, se nada mais der certo. Hoje, um feed de RSS pode ser a salvação, principalmente se você estiver buscando conteúdo de texto, mas também para vídeos e imagens. Se o conteúdo externo estiver no serviço de imagens Flickr, por exemplo, você pode obter o feed RSS com um plug-in separado (há plug-ins de Flickr e variantes de RSS), ou com a funcionalidade integrada do WordPress para exibir feeds. A seguir está o código básico fetch_RSS, que pode ser usado com o WordPress. Neste caso, você está chamando http://notesblog.com/feed/ e exibindo as últimas cinco postagens a partir de uma lista ilimitada. Você colocaria este código em um arquivo de modelo no seu tema, possivelmente em uma barra lateral, ou talvez em um modelo de página.Novidades do Notes Blog
?php // Get RSS Feed(s) include_once(ABSPATH . WPINC . '/rss.php'); $rss = fetch_rss('http://notesblog.com/feed/'); $maxitems = 5; $items = array_slice($rss->items, 0, $maxitems); ?>Ops, nada aqui!'; else foreach ( $items as $item ) : ?>
- ' title=''>
Assim, você pode usar isso sempre que precisar exibir conteúdo que está disponível em um feed de RSS (ou em qualquer dos outros plug-ins disponíveis, naturalmente). De qualquer forma, depois de decidir como exibir o conteúdo que você quer dentro de seu site de WordPress, há boas chances de que você crie uma página com seu próprio modelo, contendo o código acima. Minha recomendação é inserir o código nos arquivos de modelo. Essa é a forma mais fácil, e a técnica que recomendo antes de recorrer ao ExecPHP ou a plug-ins semelhantes que permitem que você insira código PHP dentro de postagens e páginas, uma vez que eles podem fazer um grande estrago. Em outros casos, a solução pode envolver criar um plug-in que opere como intermediário. Uma vez eu fiz isso, quando rodava meu próprio CMS e queria migrar para WordPress, mas tinha um banco de dados imenso de jogos e muitos dados. Foi relativamente fácil importar os textos e imagens para os bancos de dados do WordPress, mas as taxonomias flexíveis e o suporte a tags nativo ainda não existiam naquela época, por isso precisei ser criativo com o banco de dados de jogos. A solução foi criar um plug-in que lesse aquela parte e a exibisse usando shortcodes. Isso dava muito mais trabalho do que simplesmente exibir algo a partir de um feed RSS, mas às vezes é impossível integrar o conteúdo ao WordPress sem expandi-lo um pouco.
226
CAPÍTULO 10: WORDPRESS COMO CMS Por fim, se todo o resto falhar, finja. Faça a página se parecer com seu tema de WordPress, mas armazene-a fora do tema, em si. Eu sei que isso não é tão divertido, mas às vezes os sistemas simplesmente entram em conflito e, embora normalmente seja possível resolver isso, o investimento de tempo pode não compensar.
NÃO ESQUEÇA DE INCLUIR UM MANUAL Para quem tem experiência com sistemas baseados na Web, o WordPress pode parecer facílimo de usar. O problema é que nem todo mundo concorda. Na verdade, para quem não tem experiência com sistemas baseados na Web, o WordPress pode parecer intimidante, mesmo que o usuário esteja perfeitamente familiarizado com processadores de texto e outros programas comuns. Existem manuais orientados para o usuário integrados ao WordPress, mas será que são o suficiente? Embora o site wordpress.org e o festival de tutoriais em vídeo wordpress.tv possam ser referências úteis para seus usuários, sua melhor opção é provavelmente criar um pequeno guia de instruções sobre como o WordPress funciona. Isso é especialmente importante se você estiver usando o WordPress como CMS para um site estático e não para um blog; se você indicar um site como o Codex para seus usuários, eles simplesmente ficarão confusos. Se você é um desenvolvedor e/ou designer e faz muitos sites de WordPress, aconselho a compilar um kit para iniciantes descrevendo as tarefas mais comuns do uso diário. Esse kit, que pode ser qualquer coisa, desde um simples documento até um livreto para impressão, deve ser atualizado regularmente à medida que novas versões de WordPress são disponibilizadas. Ele também deve ser construído de forma a permitir que você acrescente qualquer funcionalidade personalizada que seja usada para os sites de clientes. Talvez você tenha uma categoria para vídeos que se comporte de forma diferente das outras, ou talvez haja o eterno problema dos campos personalizados e sua usabilidade. Acrescente a utilização de plug-ins, widgets e possíveis configurações que você criou para seu cliente, e você vai economizar muitas perguntas, simplesmente entregando um manual de introdução junto com seu design.
UMA ÚLTIMA CONSIDERAÇÃO SOBRE O USO DO WORDPRESS COMO CMS A ideia de que o WordPress não é uma boa opção de solução CMS para diversos projetos é um equívoco comum. Obviamente, nem sempre ele é a opção perfeita – nenhuma plataforma de publicação jamais será –, mas a facilidade com a qual você pode criar um site com WordPress é um forte fator a seu favor. Somando a interface de usuário simples à grande possibilidade de expansão graças aos plug-ins e temas, o que temos é uma excelente alternativa. Uma das vantagens de usar o WordPress como CMS é o fato de que ele é muito bem equipado para lidar com mecanismos de busca. Com um bom código, e talvez um ou dois plug-ins (você pode encontrar algumas sugestões no Capítulo 9), você não terá problemas para ser bem classificado nos mecanismos de busca, desde que tenha o conteúdo para tanto. Em combinação com a Web social, é dessa forma que você pode obter grande parte do seu tráfego, hoje em dia. Por isso, o próximo capítulo mostra a você como integrar a Web social aos seus sites de WordPress.
227
11
INTEGRANDO A WEB SOCIAL
NÃO RESTAM DÚVIDAS da importância da Web social nos dias de hoje, e os dois exemplos mais proeminentes disso são o Facebook e o Twitter. Quando usados corretamente, esses serviços podem ser excelentes plataformas para promover conteúdo, coletar histórias ou incentivar a comunicação. Por isso, é natural que hoje a maioria dos sites tenha algum tipo de integração com os serviços mais populares da Web social, ainda que isso se resuma a um simples botão ou link para “compartilhar no Facebook” ou “enviar para o Twitter”. Antes de entrarmos nas diversas técnicas usadas para exibir e se conectar à Web social, é importante não esquecer da ferramenta de integração mais óbvia que está disponível: os feeds RSS. A solução mais simples é usar o widget de RSS que está incluído no WordPress, e que permite exibir facilmente conteúdo a partir de um
feed RSS. E, hoje, qualquer serviço, aplicativo, comunidade, etc. na Web social possui um feed RSS com o qual você pode brincar –, ou seja, grande parte da integração que você pode obter com esses serviços pode ser feita usando RSS. Seja para exibir seu último “tweet” ou para criar um lifestream completo, quase sempre o RSS está no centro de tudo. Por isso, quando você quiser que seu último livro concluído em www.anobii.com seja exibido, considere a possibilidade de usar o feed RSS (no widget do serviço ) antes de sair por aí em busca de plug-ins ou de modificar suas próprias soluções. Há boas chances de que o serviço a partir do qual você quer exibir suas últimas ações/itens salvos/etc. já transmita esses dados com RSS. Mas chega disso, é hora de colocar a mão na massa!
CAPÍTULO 11
SMASHING WORDPRESS
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS
INTEGRANDO O FACEBOOK AO SEU SITE Vamos começar pelo Facebook, já que ele é não apenas a maior rede social que existe no momento da escrita deste livro, mas também porque oferece a maior facilidade de integração a um site, ao menos no nível mais básico. O Facebook possui excelentes ferramentas que ajudam a integrar as funções dele ao seu site; basta dar uma olhada na página de Plug-ins Sociais em http://developers.facebook.com/docs/reference/plugins/ para conhecer uma porção de alternativas (ver Figura 11-1).
Figura 11-1: O Facebook possui excelentes ferramentas para adicionar recursos relacionados ao seu site
Na maioria dos casos, você pode promover duas coisas em seu site, em termos de Facebook: seu conteúdo, para que as pessoas “curtam” ele, e sua página (fan page) no Facebook.
BOTÃO CURTIR O botão Curtir do Facebook é incrivelmente fácil de integrar. Basta visitar esta página para construir o seu próprio: http://developers.facebook.com/docs/reference/ plugins/like. Não se preocupe com o campo “URL to Like”, uma vez que vou mostrar a você como trocar isso pela template tag the_permalink(). Clicando em Get Code, você terá dois trechos de código; um se destina a usuários de XFBML e o outro é um simples iframe. Vamos começar com o segundo, já que essencialmente trata-se apenas de copiar e colar: <iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2F google.com&layout=standard&show_faces=true&width=450&action= like& colorscheme=light&height=80" scrolling="no" frameborder="0"
230
CAPÍTULO 11: INTEGRANDO A WEB SOCIAL style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true">
Está vendo aquela parte do href= ? É ali que você quer inserir the_permalink() em vez de reescrever http://google.com (que foi o que eu fiz). Assim: <iframe src="http://www.facebook.com/plugins/like.php?href= &layout=standard&show_faces=true&width=450&action=like& colorscheme=light&height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true">
Basta inserir esse trecho de código nos seus diversos modelos de tema (como single.php), nos locais onde você quer permitir que as pessoas “curtam” o conteúdo, e pronto. Mas e aquele código para XFBML? O código é menor e bem mais versátil, mas requer algo a mais, especificamente o JavaScript SDK do Facebook. Se você só precisa do botão Curtir, eu diria que carregar esse código é um pouco de exagero, mas se você estiver fazendo outras coisas com Facebook em seu site, vale a pena conferir essa opção. De qualquer forma, todos os detalhes acerca de como carregar o JavaScript SDK para que você possa usar o código XFBML estão disponíveis aqui: http://developers.facebook.com/docs/reference/ javascript/. Obviamente, você vai precisar mudar o código aqui também. A seguir, apresento o mesmo código do trecho de iframe acima, mas para XFBML: <script src="http://connect.facebook.net/en_US/all.js#xfbml=1">
Basta substituir http://google.com por the_permalink() e pronto: <script src="http://connect.facebook.net/en_US/all.js#xfbml=1">
WIDGETS DE PERFIL Se você quiser promover sua página no Facebook, ou talvez sua página pessoal, existem widgets muito simples para isso. Há os selos simples, disponíveis em http://www. facebook.com/badges/, mas há uma boa chance de que você esteja querendo algo mais bacana. Talvez você queira exibir a atividade do seu feed, ou simplesmente permitir que as pessoas se tornem fãs de sua página sem sair do seu site. Nesse caso, dê uma olhada nos widgets sociais que o Facebook oferece em http://developers.facebook. com/plugins. Digamos que você queira colocar uma caixa para que o usuário possa Curtir sua página de Facebook dentro do seu site. O Facebook é consistente, porque a página de construção da caixa Curtir funciona da mesma foma que a do botão Curtir, acima, mas sem a necessidade de inserir qualquer código adicional, como the_permalink(). Basta aplicar o estilo que quiser, copiar o código e colá-lo em um widget de texto ou onde quiser, dentro de seus arquivos de tema.
231
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS
INTEGRANDO O TWITTER Não restam dúvidas de que a ascenção do Twitter mudou muita coisa. Hoje, o mundo inteiro está tuitando, especificamente o pessoal interessado em tecnologia, e não há sinais de desaceleração nessa tendência. Assim, embora 140 caracteres sejam uma limitação e tanto para alguém que está acostumado a digitar postagens de blog com 3 mil caracteres, o Twitter ainda é uma ótima ferramenta para quem publica na internet. Se você ou sua marca estão no Twitter, há boas chances de que você queira promover sua conta de Twitter em seu site. Isso pode ser feito facilmente com imagens gráficas, naturalmente, mas você pode levar a ideia ainda mais longe. Isso funciona também ao contrário: promovendo seu conteúdo com tweets, você pode atingir um público que talvez só conheça você do Twitter E isso ainda é apenas a ponta do iceberg; há uma infinidade de serviços bacanas construídos ao redor do Twitter, além da própria API, que você talvez queira usar ou imitar. Vamos começar pelo começo: este livro não trata de construir um novo aplicativo de Twitter. No entanto, é provavelmente uma boa ideia levar a promoção do Twitter para além de uma simples imagem com os dizeres “Siga-me no Twitter”, não é mesmo?
ADICIONANDO BOTÕES E WIDGETS DO TWITTER Hoje, é fácil exibir seus “tweets”, graças ao widget do Twitter, e promover um artigo no Twitter usando o botão oficial Tweet. Você pode obter os “tweets” mais recentes, permitir que os usuários marquem seus “tweets” como favoritos, e assim por diante, tudo isso usando um widget simples que você pode construir (aplicando estilos) no site do Twitter: http:// twitter.com/about/resources/widgets. Depois de aplicar os estilos desejados ao widget, você terá algo semelhante a isto: <script src="http://widgets.twimg.com/j/2/widget.js"> <script> new TWTR.Widget({ version: 2, type: 'profile', rpp: 4, interval: 6000, width: 250, height: 300, theme: { shell: { background: '#333333', color: '#ffffff' }, tweets: { background: '#000000', color: '#ffffff', links: '#4aed05' } },
232
CAPÍTULO 11: INTEGRANDO A WEB SOCIAL features: { scrollbar: false, loop: false, live: false, hashtags: true, timestamp: true, avatars: false, behavior: 'all' } }).render().setUser('tdhedengren').start();
Cole isso nos seus arquivos de tema, ou, ainda melhor, em um widget de texto, e você está pronto. Se quiser mudar algo, a forma mais fácil de fazer isso é simplesmente voltar ao Twitter e refazer o processo inteiro, embora um usuário mais avançado possa analisar o código e fazer as mudanças diretamente dentro dele. Obter um botão Tweet é igualmente simples. Basta visitar http://twitter.com/about/ resources/tweetbutton e escolher a aparência do seu botão e, então, adicionar qualquer conta de Twitter que você queira mencionar (ver Figura 11-2). Mais uma vez, você terá um simples trecho de código que pode inserir no modelo single.php de seu tema, para que os usuários possam facilmente “tuitar” suas postagens: Tweet <script type="text/javascript" src="http://platform.twitter.com/widgets.js">
Figura 11-2: É fácil obter o código para seu próprio botão Tweet
233
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS Se você quiser ainda mais controle, confira a API do botão Tweet em http://dev. twitter.com/pages/tweet_button.
USANDO O MÉTODO DA API PARA EXIBIR SEUS “TWEETS” Uma das melhores formas de exibir suas atualizações de Twitter em grande estilo é exibir o “tweet” mais recente. Tenho certeza de que uma infinidade de plug-ins é capaz de fazer isso, mas a forma mais direta de fazê-lo é usar a API do Twitter (ver referência em http://dev. twitter.com) e um pouco de JavaScript. O exemplo abaixo sou eu, retornando o “tweet” mais recente de minha conta (http:// twitter.com/tdhedengren, caso você esteja curioso), usando dois JavaScripts fornecidos pelo Twitter:<script type="text/javascript" src="http://twitter.com/javascripts/blogger.js"> <script type="text/javascript" src="http://twitter.com/statuses/user_timeline/tdhedengren.json? count=1&callback=twitterCallback2">
Primeiramente, o div#mytweet não é obrigatório, mas uma vez que você pode querer algum controle adicional, é uma boa ideia adicioná-lo. Por outro lado, o div#twitter_update_ list, sem nada dentro (à primeira vista), é necessário. É dentro disso que o blogger.js e o script JSON vão retornar as atualizações solicitadas (neste caso, as minhas). Nesta linha, você encontra meu nome de usuário, tdhedengren, adicionado como se fosse um arquivo, de fato, no servidor twitter.com: <script type="text/javascript" src="http://twitter.com/statuses/user_timeline/tdhedengren.json? count=1&callback=twitterCallback2">
Isso avisa ao Twitter que as atualizações devem ser obtidas a partir do meu nome de usuário. Naturalmente, count=1 significa que apenas um “tweet” deve ser exibido, e você pode alterar isso para, digamos, cinco, caso queira exibir cinco “tweets”. Por fim, temos callback=twitterCallback2, que é necessário, uma vez que você está usando JSON aqui, da forma como o Twitter quer. O que você terá é uma lista com marcadores dentro de div#twitter_update_list, por isso aplique os estilos de forma adequada. A Figura 11-3 mostra a aparência que isso poderia ter com um pouco de CSS adicionado.
Figura 11-3: Uma caixa simples exibindo o “tweet” mais recente pode aumentar seu número de seguidores no Twitter
Em vez disso, você poderia obter o feed RSS, mas ele contém muita bobagem, sem falar do nome de usuário que aparece antes de tudo, desde o título do “tweet” até o conteúdo de fato. Naturalmente, você pode reduzir isso com um pouco de PHP, mas nesse caso você estaria modificando em um nível tal que talvez fosse uma ideia melhor usar um dos plug-ins disponíveis.
234
CAPÍTULO 11: INTEGRANDO A WEB SOCIAL A documentação completa sobre esse método (além de informações sobre outras configurações e métodos que talvez sejam mais adequados para você) está disponível na documentação da API de busca do Twitter, em http://dev.twitter.com/doc/get/ search.
EXPANSÕES DO TWITTER PARA SITES Há inúmeros widgets, plug-ins, serviços e aplicativos ao redor do Twitter. O ecossistema relativamente aberto que cerca o serviço de microblog pode ser facilmente usado para desenvolver outras coisas, e o falatório cada vez maior ao redor da marca não está desacelerando as coisas. É por isso que você tem o TweetMeme (http://tweetmeme.com) rastreando os artigos mais quentes no Twitter, assim como o Twitterfeed (http:// twitterfeed.com) que permite que você publique links automáticos em sua conta de Twitter usando um feed RSS. As seções a seguir oferecem alguns links úteis para serviços e encurtadores de URL que podem ser úteis. Mas você não vai encontrar plug-in de Twitter algum aqui: estão todos no Capítulo 9.
Potenciadores de site Alguns serviços relacionados ao Twitter têm mais destaque que outros. Estes três adicionam funcionalidade ao seu site usando o Twitter. TweetMeme (http://tweetmeme.com) rastreia o que há de mais quente no Twitter e
se inspira intensamente no Digg. Tweetboard (http://tweetboard.com) adiciona uma conversa de Twitter ao seu site com respostas em discussão e tudo o mais. Twitterfeed (http://twitterfeed.com) publica links a partir de qualquer feed RSS à sua conta de Twitter, sem que você precise fazer coisa alguma. Há serviços concorrentes que também fazem isso, mas esse é o original, com o login de OpenID e tudo o mais.
Encurtadores de URL O limite de 140 caracteres significa que URLs longas não caberão em seus “tweets”. É aí que entram em cena os encurtadores de URL, um mal necessário segundo alguns, e uma excelente ferramenta para outros. Você pode, naturalmente, resolver isso sozinho (consulte o Capítulo 9 para indicações de bons plug-ins), mas, se você não conseguir ou não quiser fazê-lo, esses “encurtadores” são excelentes opções. Lembre-se de que talvez você queira escolher um deles e continuar com ele para que as pessoas se acostumem. Também pode ser uma boa ideia manter em mente que o Twitter usa o encurtador de URL t.co por padrão. Além disso, o WordPress pode encurtar as URLs por você. Quando você faz login e visualiza uma postagem ou página individual, pode encontrar o Shortlink na barra de admin, como mostra a Figura 11-4 (partindo do pressuposto de que você não tenha desativado a barra de admin e esteja rodando a versão 3.1 ou uma versão mais recente).
235
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS
Figura 11-4: O link para o Shortlink na barra de admin só pode ser visualizado em postagens ou páginas individuais quando o usuário fez login
E aqui estão os “encurtadores” de URL t.co (http://t.co) é o encurtador de URL oficial do Twitter, que você pode usar
através dos botões e aplicativos oficiais do Twitter , listados aqui apenas para referência. TinyURL (http://tinyurl.com) é o encurtador de URL original, usado pelo Twitter
antes do surgimento do t.co, mas ele não oferece muita coisa, em comparação à concorrência. Bit.ly (http://bit.ly) não apenas encurta sua URL, mas também oferece estatísticas. goo.gl (http://goo.gl) é o encurtador de URL do Google. É claro que, às vezes, você precisa fazer mais do que simplesmente exibir seus “tweets”. Talvez você queira exibir tudo o que faz on-line dentro do seu site. Isso se chama lifestreaming, e vamos falar disso na próxima seção.
LIFESTREAMING COM WORDPRESS Lifestreaming é um termo geralmente usado para descrever a compilação de tudo o que você faz quando está on-line. (Talvez seja um tanto presunçoso presumir que sua vida está on-line, mas fazer o quê?) Geralmente, seu lifestream envolve links para suas postagens de blog, atualizações de status no Facebook, “tweets” no Twitter, fotos do Flickr, livros que você lê em LibraryThing, vídeos do YouTube, e assim por diante. Basicamente, quanto mais atividade melhor, e tudo é compilado em uma espécie de lista cronológica. A compilação de sua vida on-line é geralmente feita com RSS, por isso, teoricamente, você pode usar o WordPress para lifestreaming. Para fazer isso, você pode criar seu tema de forma a usar o parser de RSS integrado SimplePie para compilar os dados e então gerar uma saída de tudo, ou usar um dos plug-ins de RSS scraping para alimentar seu banco de dados de WordPress com o conteúdo, na forma de postagens.
CONFIGURANDO UM LIFESTREAM Embora você possa simplesmente reunir todos aqueles feeds RSS usando SimplePie e o recurso de múltiplos feeds mencionado no Capítulo 14, lifestreaming é uma daquelas situações em que, parece-me, os plug-ins são a melhor solução. Embora seja possível criar um lifestream totalmente funcional usando a funcionalidade do SimplePie, pode ser complicado fazer o carregamento desse conteúdo acontecer de maneira rápida. 236
CAPÍTULO 11: INTEGRANDO A WEB SOCIAL Em minha opinião, há três configurações possíveis – discutidas nas seções seguintes – para alguém que quer usar o WordPress para criar um lifestream.
Usar o Parser de RSS Integrado Se você trouxer todo o seu conteúdo a partir dos diversos feeds RSS gerados por suas contas em toda a Web, vai ser difícil gerenciar os feeds. Você pode combinar tudo e, talvez, armazenar o conteúdo em cache em arquivos (que o SimplePie suporta) ou no banco de dados (que não é oficialmente suportado, mas ainda assim é possível), e então exibir o conteúdo em seu tema. Esse é um projeto complicado de colocar em prática, mas definitivamente é possível. Você pode ler mais sobre isso no Capítulo 14. Uma solução levemente menos complexa que utiliza o parser de RSS integrado é ter um conjunto de caixas contendo diferentes tipos de conteúdo, agrupado por relevância ou qualquer outro critério. Pode não ser uma típica listagem cronológica de atualizações, mas vai ser o suficiente na maioria dos casos.
Usar um Plug-in de Lifestreaming Há alguns plug-ins de lifestreaming disponíveis, e o mais incensado deles é o WP-Lifestream (http://wordpress.org/extend/plugins/lifestream/). Ele funciona bem (a Figura 11-5 mostra o plug-in em ação no site tdh.me/stream/) e permite que você configure as fontes das quais quer exibir feeds, incluindo o lifestream em sua barra lateral ou em uma página, por exemplo. Essa é, definitivamente, a forma mais fácil de começar a usar lifestreaming com WordPress, mas pode não oferecer o grau de personalização que você está buscando. Além disso, há outras questões relacionadas ao tempo de carregamento, das quais falarei em breve.
Figura 11-5: WP-Lifestream com estilo minimalista
237
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS O plug-in WP-Lifestream salva o conteúdo obtido no banco de dados. Nem todos os plug-ins de lifestreaming fazem isso, mas acho que é uma boa ideia fazê-lo. Afinal, sem salvar o conteúdo (mantendo assim um arquivo de suas atividades on-line), você poderia simplesmente exibir o conteúdo em tempo real, não é mesmo? Certifique-se de que o plug-in de lifestreaming que você escolheu possui os recursos de que você precisa, principalmente o de armazenamento no banco de dados.
Alimentar o Banco de Dados do WordPress A terceira solução é alimentar o banco de dados do WordPress com o conteúdo dos feeds RSS usando plug-ins de scraping. A ideia aqui é criar uma postagem de WordPress, de fato, preferivelmente classificada dentro da categoria adequada e talvez até mesmo marcada com tags (embora isso provavelmente vá ser difícil) e então exibir o conteúdo em seu tema usando os métodos normais. Isso, teoricamente, significaria que você pode ter uma categoria Flickr contendo tudo que vem do Flickr, uma categoria Twitter que salva todos os seus “tweets”, e assim por diante. O fato é que tudo fica armazenado como postagens normais, facilitando o gerenciamento, e isso é ótimo. O plug-in FeedWordPress (http://wordpress.org/extend/plugins/ feedwordpress/) é um dos muitos plug-ins de scraping que são capazes de obter feeds de RSS e salvar seu conteúdo em sua instalação de WordPress. Usar uma solução desse tipo pode parecer um tanto extremado, mas é possível, e trabalhando um pouco sobre seu tema você pode obter um site com um blog e seções de lifestreaming, além de um excelente banco de dados para busca e categorização.
SOBRE TAREFAS AGENDADAS O problema de obter feeds RSS (e qualquer coisa que venha de um servidor externo, na verdade) é que isso requer tempo. O PHP precisa solicitar o feed ao servidor de destino, e então o servidor precisa enviar o conteúdo; em seguida o seu servidor precisa recebê-lo, e o PHP precisa finalizar o processo fazendo algo com o conteúdo obtido. Compare isso a fazer uma consulta ao banco de dados e gerar a saída de dados e você vai entender qual é o problema. Agora, imagine que você tem 10 identidades on-line e quer incluí-las em seu lifestream. Quando um visitante chega para ver o que você tem feito on-line, o PHP precisa gerar uma consulta para cada identidade, receber todo o conteúdo e gerar a saída. Isso, é claro, se não houver retardatários que causem uma falha no script (o que seria uma má programação) ou que demorem muito até que uma resposta (mesmo que negativa) seja recebida. Assim, você pode compreender que uma página de lifestream pode demorar muito a carregar. É por isso que você armazena o conteúdo em cache, e qualquer solução que se preze deve oferecer suporte a cache. Porém, a obtenção e o armazenamento em cache precisam ser iniciados por alguém. Em sua forma mais pura, isso significa que mesmo que o conteúdo esteja armazenado em cache, um pobre visitante a cada 30 minutos (ou qualquer que seja o limite de tempo configurado) precisará esperar até que tudo seja baixado, armazenado em cache e então exibido, para que a página funcione. Você pode fazer isso com SimplePie, e a maioria dos plug-ins de lifestreaming possuem alguma forma de solução de cache. É possível usar tanto soluções de arquivos (basicamente arquivos de texto) quanto de banco de dados.
238
CAPÍTULO 11: INTEGRANDO A WEB SOCIAL Mas há soluções melhores. Uma delas é o recurso integrado WP-Cron, que é uma espécie de pseudotarefa agendada chamada por alguns plug-ins. Outra solução mais recomendável é uma tarefa agendada (cronjob). Uma tarefa agendada consiste, basicamente, em instâncias cronometradas executadas independentemente pelo servidor, assim, nenhum visitante precisará esperar sentado até que todos aqueles feeds de RSS sejam carregados. A única coisa exibida será o conteúdo salvo (em cache), e essa é a única coisa atualizada, também. A forma como você configura sua tarefa agendada depende do seu serviço de hospedagem. Provavelmente, você deve ter um painel de controle onde pode fazer alterações no seu site. Procure pelas configurações de tarefas agendadas (ou cronjobs) ali. Os fãs de Linux obviamente usarão o terminal, mas isso está bem longe do escopo deste livro. O resto de nós vai usar as soluções integradas ao painel de controle do serviço de hospedagem, e isso é o suficiente. Se você está planejando executar uma porção de feeds RSS, o que é inevitável em se tratando de lifestreaming, deve investigar a possibilidade de usar cache, que deve ser suportado por sua solução desde o princípio, e de como executar os scripts que obtém o conteúdo sem tornar o site mais lento. Mais uma vez, a maioria dos plug-ins que se prezam oferecem suporte a esse recurso, inclusive o SimplePie, caso você queira utilizá-lo. A melhor solução é usar uma tarefa agendada (cronjob), por isso converse com seu serviço de hospedagem Web sobre o assunto e certifique-se de qualquer plug-in ou serviço que você queira usar tenha suporte a esse recurso.
DISSEMINANDO SEU CONTEÚDO COM BOTÕES DE ENVIO NA WEB SOCIAL A Web social é certamente um fator importante a considerar para quem trabalha com conteúdo editorial hoje em dia. Embora os mecanismos de busca possam trazer visitantes em doses homeopáticas ao longo do tempo, ser destaque na página inicial do Digg vai causar uma explosão demográfica em suas estatísticas em curto prazo. Se o seu conteúdo é direcionado a um público técnico, a Web social oferece uma série de serviços para os quais você pode enviar seu artigo para que possa divulgar o material para o público certo, mas não importando o tipo de conteúdo, você deve buscar, dentro do seu nicho, algum site social que seja uma boa parceria. Afinal de contas, todos querem ter mais acessos, não é mesmo? Muita coisa pode ser dita sobre o tipo de conteúdo que funciona na Web social, e, invariavelmente, o que importa é produzir conteúdo de qualidade, que seja interessante e facilmente acessível, e enviar esse conteúdo para o site certo. Aí, então, fica a cargo dos usuários votar no conteúdo, aumentando sua audiência, ou negligenciá-lo por completo, o que pode depender, na verdade, de quantos amigos (que sejam capazes de dar à matéria o destaque desejado) você tem. Por isso, sim, trata-se de um concurso de popularidade, e, sim, você pode facilmente participar se expandir seu site para essas plataformas.
USANDO PLUG-INS A forma mais fácil de preparar seu site para a Web social é usar um dos inúmeros plug-ins disponíveis (consulte o Capítulo 9 para obter sugestões). Esses plug-ins tipicamente adicionam links ao fim de cada postagem, onde o visitante pode votar na matéria em questão ou enviá-la para um serviço (caso ainda não tenha sido enviada). 239
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS Adicionar um plug-in que gerencie essas coisas por você é fácil e certamente tentador, mas há alguns fatores que você deve levar em consideração antes de embarcar nessa abordagem. Quais serviços da Web social podem ser gerenciados pelo plug-in? Certifique-se de que
os serviços certos para o seu nicho específico estejam incluídos e de não encher seu site com serviços que nunca vão funcionar para você. Em outras palavras, não peça para as pessoas enviarem seu site para o Digg se você está escrevendo em norueguês sobre jardinagem; não vai adiantar. O plug-in tem uma boa aparência, que combina com seu design, ou é possível personalizá-lo para que se adapte ao design? Caso contrário, você provavelmente deve procurar outra alternativa. O plug-in tem sempre a mesma aparência? Caso sim, há boas chances de que os visitantes estejam tão acostumados a vê-lo que eles simplesmente não prestem mais atenção. A coisa toda não passa de um bloco de ícones entre a postagem e os comentários, que aparece em quase todos os blogs que se vê por aí, e isso não é uma grande vantagem se você quer que seus visitantes interajam. O plug-in está, na verdade, hospedado em outro lugar? Há plug-ins de terceiros que carregam tudo a partir de um servidor externo. Isso tornará seu site mais lento, por isso certifique-se de que você não tenha problemas com isso antes de usar um desses plug-ins. A maioria dos plug-ins, infelizmente, cria uma poluição em forma de botões ou links que não funcionam para todos os sites. Alguns são limitados a um número predeterminado de serviços, e outros podem fazer você cair na tentação de acrescentar serviços demais. Não perca a classe: não exagere no número de serviços de social bookmarking; isso não vai tornar o conteúdo mais atraente ou conquistar mais votos. Na verdade, apenas um ou dois botões de “Por favor, vote na minha matéria” talvez funcionem melhor para você do que encher uma tela inteira deles.
MODIFICANDO SEUS PRÓPRIOS LINKS DE ENVIO Você não precisa depender dos plug-ins para adicionar botões de envio para serviços de social bookmarking. A maioria dos sites oferece seus próprios botões, que você pode incorporar, mas isso deve ser feito manualmente. Pessoalmente, gosto de adicionar links de envio simples à visualização de postagem individual, de preferência de uma forma que não seja excessivamente invasiva para o usuário e que não polua o design. É melhor promover matérias que parecem se sustentar por si próprias, com imagens ou texto adicionais pedindo ajuda. No entanto, na maioria dos casos, um punhado de links estáticos não faz mal a ninguém, desde que seja relevante. As linhas a seguir mostram o código usado para adicionar links estáticos para os sites mais usados. Você envia o link permanente da postagem em questão para o serviço, de modo que, quando alguém clicar sobre o link, esse usuário será direcionado para a página de envio. &title="> Salvar no Del.icio.us ">
240
CAPÍTULO 11: INTEGRANDO A WEB SOCIAL Publicar no Digg &title="> Compartilhar no FriendFeed Publicar no Mixx &title="> Publicar no Reddit &title="> Publicar no Stumbleupon
Visite cada site, individualmente, para obter o código atualizado, além de gráficos, logotipos, ícones, etc. É fácil adicionar links semelhantes para novos sites; a maioria deles possui links de compartilhamento semelhantes que podem ser construídos ao redor de the_permalink() e the_title(). Você deve ter percebido que o Facebook e o Twitter não entraram na lista. Isso se deve ao fato de que eles possuem seus próprios botões para isso: o botão Tweet do Twitter e o botão Curtir do Facebook dos quais já falamos. Você deve usar esses botões em vez de incluir todos os serviços no mesmo plug-in. A Figura 11-6 mostra um conjunto de links de envio em blogherald.com.
Figura 11-6: Links de envio para serviços de social bookmarking, além de outros elementos, retirados de blogherald.com
E lembre-se de usar esses links para cada postagem! Caso contrário, você vai enviar apenas sua categoria ou página inicial para o Digg. Na verdade, um bom local para posicionar esses links seria entre o conteúdo e os comentários. Faz sentido enviar um link para seu excelente conteúdo depois da leitura, antes de seguir para os comentários. Você pode aprender mais sobre como turbinar seus comentários na seção a seguir.
241
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS
USANDO UMA SOLUÇÃO DE COMENTÁRIOS HOSPEDADA Com o advento da discussão nos comentários, no núcleo do WordPress, e com as excelentes opções de estilo com CSS disponíveis atualmente, além do onipresente suporte a Gravatar (http://gravatar.com), talvez você esteja se perguntando como é possível melhorar os comentários. A resposta é simples: enchendo-os de funcionalidade adicional, com a ajuda de plug-ins, ou retirando-os totalmente do WordPress. A primeira solução pode significar qualquer coisa, de permitir que os usuários avaliem os comentários até incluir a discussão que está acontecendo no Twitter, ao passo que a segunda significa que você dependeria de um serviço de terceiros para gerenciar seus comentários. Consulte o Capítulo 9 para conhecer uma porção de plug-ins que podem melhorar seus comentários internos, e algumas que ajudam você a gerenciar logins e coisas do tipo. Esta seção trata da alternativa aos plug-ins. Usar soluções de comentários hospedadas significa deixar a solução de comentários inteiramente a cargo de um serviço de terceiros, sem depender da funcionalidade de comentários do WordPress. Há dois grandes players nessa arena, Disqus (http://disqus.com) e IntenseDebate (http://www.intensedebate.com). O primeiro é mais antigo, mas o segundo é de propriedade da Automattic, o que faz dele uma escolha tentadora para os amantes de WordPress. Ambos os sistemas possuem seus prós e contras, em termos de funcionalidade, mas ambos estão sendo ativamente desenvolvidos, embora a maioria das pessoas diria que o Disqus leva vantagem na disputa. Para começar a usar Disqus ou IntenseDebate, você só precisa fazer o download de um plug-in para WordPress e fazer a instalação. É muito fácil começar a usar tanto o Disqus quanto o IntenseDebate, embora a localização seja um problema para alguns usuários, assim como a personalização do estilo. Você pode também adicionar esses serviços a sites estáticos, para dar uma funcionalidade de comentários a qualquer site. Trata-se de uma ótima solução. Há muitas vantagens em usar uma solução de comentários hospedada. Em primeiro lugar, o problema do spam é solucionado em maior escala. Ambos os sistemas de comentários oferecem também diversos métodos de login, entre eles o uso de credenciais de Twitter e Facebook, resposta por e-mail e feeds RSS, além de integração com a Web social e notificações por e-mail. Para obter o escopo dos recursos integrados ao Disqus ou ao IntenseDebate, você precisaria sobrecarregar os comentários do WordPress com plug-ins. Por fim, fala-se muito sobre o fato de que usar esses sistemas resulta em mais comentários, e parece que isso não é só conversa de RP das próprias empresas. No entanto, meu principal problema com o conceito de comentários hospedados é o fato de que você está basicamente entregando o conteúdo para que outra pessoa faça a manutenção. Isso significa que, se o serviço de comentários que você escolheu entrar em pane ou sair do mercado, seus comentários vão deixar de funcionar (na pior das hipóteses) ou retornar ao padrão do WordPress. O fato de que os comentários retornam (com alguma graciosidade) para o padrão do WordPress quando há uma pane na solução de comentários hospedados é obviamente uma vantagem, mas isso pode confundir seus leitores. Outros problemas possíveis incluem períodos de manutenção e poluição visual, uma vez que provavelmente a solução de comentários não se
242
CAPÍTULO 11: INTEGRANDO A WEB SOCIAL adaptará perfeitamente ao seu design fabuloso. Além disso, qualquer problema que o sistema de hospedagem do sistema de comentários enfrentar vai afetar o seu site também. Isso é nada bom. Tendo em mente essas limitações, se você tiver que usar um serviço assim, qual deles deve escolher? Eu já usei o Disqus em mais projetos do que o IntenseDebate (inclusive em meu próprio blog http://tdh.me, como você pode ver na Figura 11-7) e acho que ele funciona bem, mas a melhor alternativa é testar ambos e decidir por si próprio.
Figura 11-7: Alguns botões de compartilhamento social em ação, juntamente com o formulário de comentário do Disqus, encontrados em http://tdh.me
USANDO LOGINS UNIFICADOS A ideia de um sistema de login unificado é excelente. Pense bem: não seria ótimo ter apenas um login para tudo? Você não precisa de uma infinidade de senhas para gerenciar, e não há risco daquele problema de segurança causado por “uma mesma senha para muitos sites”. (A não ser, é claro, pelo fato de que você pode realmente acessar todos aqueles sites com uma única senha.) No entanto, a ideia é a de que os poucos provedores dessas Contas Mestras (do inglês, “Master Accounts”) seriam tão seguros que o único risco de comprometer os usuários seria erro humano, e o que você fizer no seu lado das coisas. Comparada ao risco de que um site pequeno seja “hackeado”, divulgando ao mundo sua “senha única”, a ideia parece boa. É por isso que o OpenID (http://www.openid.net) é interessante, e atraiu a atenção de gigantes como Yahoo!, Google e Microsoft. Pela mesma razão, o Facebook desenvolveu o Facebook Connect (http://developers.facebook.com/docs/guides/web), um login unificado que usa sua conta de Facebook. A solução Sign in with Twitter (http:// dev.twitter.com/pages/sign_in_with_twitter) é relativamente similar, e a lista não para por aí. Você talvez esteja se perguntando por que deveria considerar usar seu próprio procedimento de login quando é possível usar as soluções desses gigantes. A maioria dos sites de WordPress 243
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS não possui um procedimento de registro próprio para outros usuários além dos autores e administradores, ao menos não para comentários. Em geral, isso é o suficiente para deixar um nome e um endereço de e-mail. No entanto, se você quer que os usuários se registrem, vale a pena considerar uma das soluções unificadas. Eu gostaria de indicar o OpenID, mas a verdade é que o Facebook Connect é bem mais amigável para o usuário (neste momento), e o Facebook também é membro do OpenID. Em breve, você vai poder usar suas contas de Google e Live.com para se registrar em toda a Web, além do Facebook e Twitter, e talvez tudo isso esteja conectado pela Fundação OpenID. Ou não. De qualquer forma, o que importa é que se você precisa de uma funcionalidade de login para seus usuários, deve considerar adotar um login unificado para seu site. Há plug-ins que resolvem esse problema para você (pode encontrá-los no Capítulo 9), mas não deixe que isso o impeça de buscar outras opções. Leia a respeito dos serviços e tome sua decisão, tendo em vista qualquer registro de usuário que possa ocorrer no futuro.
A IMPORTÂNCIA DA WEB SOCIAL Hoje, a Web social e todo o conteúdo que publicamos em serviços como Twitter e Facebook são parte integrante da vida on-line de muita gente. Nós interagimos uns com os outros, escolhemos quem seguir ou adicionar como amigo, e essencialmente assinamos conteúdo “curtindo” páginas no Facebook e seguindo certas contas ou listas no Twitter. É natural que a Web social faça parte também de nossos sites, e que tenhamos o desejo de promover o conteúdo que publicamos para nossos seguidores nos diversos serviços da Web social que usamos, e também para os serviços que nossos visitantes podem estar utilizando. Na verdade, isso é bastante simples. Na Web social, você escolhe quem seguir, e há boas chances de que você confie mais nas pessoas que você segue do que em uma pessoa qualquer. Por isso, quando um amigo no Facebook compartilha um link, você fica mais inclinado a clicar sobre ele do que ficaria no caso de um link aleatório que apareça em sua frente. Pense bem: você tem mais chances de assistir a um filme recomendado por um amigo do que um filme que simplesmente foi anunciado. Isso faz os elementos da Web social, como botões do Twitter e de diversas opções de social bookmarking, se tornarem uma realidade em nossos designs. Quando essa integração é bem feita, sua aparência é ótima, mas quando a incorporação é precária, acaba gerando poluição visual e prejudicando o desempenho do site. Mantenha isso em mente, pois o próximo capítulo vai ajudar você a brincar com alguns elementos de design para garantir que seus sites tenham a melhor aparência possível.
244
12
TRUQUES DE DESIGN
ESTE CAPÍTULO É dedicado a tornar seu tema de WordPress mais interessante, dando a ele aquela funcionalidade adicional capaz de fazê-lo se destacar. Algumas das técnicas abordadas aqui estão diretamente ligadas ao WordPress e ao tipo de dados que você pode obter a partir da plataforma, enquanto outras são adaptações de técnicas e soluções que podem ser úteis em seus projetos. Este capítulo vai mostrar
uma variedade de truques bacanas: como utilizar design baseado em tags, fazer o menu obedecer aos seus comandos, incluir tanto folhas de estilo quanto bibliotecas de JavaScript da forma adequada, fazer seu 404 ajudar um visitante perdido e trabalhar com anúncios dentro do loop. Em outras palavras, prepare-se para aprender muitos truques de design no WordPress.
CAPÍTULO 12
SMASHING WORDPRESS
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS
MAIS CONTROLE SOBRE SUAS POSTAGENS O WordPress oferece diversos métodos para ganhar mais controle sobre suas postagens. Esta seção aborda três desses métodos: design baseado em tags, campos personalizados e criação de suas próprias taxonomias.
DESIGN BASEADO EM TAGS A configuração mais comum para um site de WordPress envolve categorias e Páginas. As categorias oferecem controle individual para as listagens de postagens e podem ser consultadas com conditional tags, como in_category(), ou seja, você pode fazer cada categoria se comportar de forma diferente. Isso, por sua vez, significa que um arquivo de categoria pode facilmente tornar-se uma seção do site, de forma bastante natural, e as postagens daquela categoria podem receber o estilo adequado, caso você deseje. No mínimo, esse estilo pode ser um conjunto de cores para a categoria, ou quem sabe um ícone ou outro tipo de gráfico, mas, se você levar essa ideia mais longe, pode usar um estilo totalmente diferente para a apresentação do conteúdo. As tags, por outro lado, são menos fixas e geralmente funcionam melhor para descrever apenas postagens individuais. Isso significa que elas podem parecer redundantes para sites mais estáticos (ou sites que tenham menos a ver com blogs da Web 2.0). No entanto, você ainda pode obter o melhor delas, se quiser. As tags oferecem três formas primárias de obter interações especiais. A primeira é a mais óbvia: a capacidade de controlar as páginas de arquivo de tags. Talvez você ainda se lembre de que o arquivo tag.php do seu tema é capaz de controlar a exibição de tags, mas você também pode usar tag-X.php, onde X é o slug de uma tag específica. Isso é um pouco diferente do que acontece com category-Y.php, onde Y é a ID da categoria, e não o slug. Isso significa que você pode ter listagens de postagens com estilos diferentes para cada tag, assim como com as categorias. Em tese, isso significa que seus arquivos de tags podem se tornar seções no seu site, da mesma forma que as categorias. A segunda forma de controlar o conteúdo com base nas tags é a conditional tag is_tag(). Ela funciona mais ou menos da mesma forma que is_category(), e você simplesmente passa o slug da tag para identificar uma tag específica, da seguinte forma:
Naturalmente, você precisa também de algumas condições. Esse tipo de utilização em geral é o suficiente quando se trata de categorias, mas uma vez que a maioria dos designs de tema para WordPress bem planejados é construída ao redor do mínimo possível de categorias. As tags, no entanto, são diferentes, por isso talvez você queira verificar várias tags ao mesmo tempo, usando um array:
Isso vai retornar true sempre que as tags piratas, ninjas, ou cogumelos forem usadas. A última forma de usar tags em seu benefício é valer-se do fato de que post_class() retorna todas as tags como uma classe para o div da postagem. Isso significa que você pode ter muitas classes em potencial, para aplicar estilos em maior profundidade.
246
CAPÍTULO 12: TRUQUES DE DESIGN Esta, por exemplo, é uma postagem com a ID 129, o que você pode perceber em id="post-129", além do fato de que ela tem mesmo a classe post-129:
Você terá uma porção de tags automáticas e, por fim, terá uma classe por categoria e uma classe por tag. Nesse caso, a categoria usada possui o slug news, assim post_class() adiciona a classe category-news. O mesmo vale para as tags: você tem as tags piratas, ninjas e cogumelos na postagem, e elas são adicionadas com o prefixo tag- para que você possa ver ao que se referem. Assim, você tem tag-piratas, tag-ninjas e tag-cogumelos. A genialidade disso é oferecer um controle ainda mais preciso sobre seu conteúdo. Se você quiser dar mais ênfase a algumas postagens do que a outras, mas não quer associá-las a uma categoria específica, uma tag apropriada é uma excelente solução. Uma utilidade comum dessa técnica seria dar mais destaque a postagens ou patrocinadores. Digamos que você queira dar destaque a uma mensagem de “Obrigado a nossos patrocinadores” no meio do conteúdo, mas não quer que os leitores confundam essa mensagem com uma postagem, de fato. Nesse caso, você simplesmente marcaria a mensagem com uma tag adequada, como patrocinador, e adicionaria algum CSS à sua folha de estilo, fazendo todas as postagens na classe tag-patrocinador terem uma aparência diferente em termos de fonte, cor, fundo, borda ou imagem para mostrar que não se trata do conteúdo comum. Assim como com as categorias, você pode construir seu site ao redor de tags. Minha filosofia é que você deve tomar muito, mas muito cuidado na hora de criar categorias; deixe-as para as seções principais. Aí, então, você pode fazer as coisas acontecerem para cada postagem, usando tags e estilos de CSS específicos.
USANDO CAMPOS PERSONALIZADOS Digamos que você não queira usar um design baseado em tags. Talvez você queira dar um destaque maior aos anúncios dentro do seu conteúdo, apresentando-os como postagens patrocinadas, com um estilo diferente para não correr o risco de enganar os leitores, mas não queira que a tag exclusiva para anúncios apareça nas nuvens de tags. Você pode simplesmente excluir essa tag específica da nuvem de tags, da seguinte forma (a tag excluída, neste caso, será patrocinador):
No entanto, talvez essa solução específica não resolva o seu problema, e você não queira usar tags dessa forma especificamente por já usá-las de outras formas, mas você deseja o mesmo tipo de resultado. Criar uma categoria também não é uma opção, porque você quer controlar em que seção do site as postagens aparecem. É aí que entram em cena os campos personalizados. O exemplo a seguir cria um campo personalizado chamado Poststyle; basta adicioná-lo uma vez e salvar um valor para ele. Este exemplo usa a tag ad (do inglês, anúncio) para manter as coisas separadas. (Se você não se lembra como os campos personalizados funcionam, consulte o Capítulo 4 para recapitular.)
247
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS Insira a classe desejada no valor para a chave Poststyle. Você pode fazer isso facilmente com uma verificação da chave Poststyle para cada postagem, executando echo. Lembre-se de que o último parâmetro true serve para garantir que o echo seja executado para apenas um valor, caso mais valores venham a ser adicionados. Nesse caso, isso não vai funcionar; você quer somente o valor que vai usar como estilo para uma postagem específica. Isso, por sua vez, significa que, quando você atribui a Poststyle o valor ad, o que você quer é que isso seja adicionado como classe, para que você possa aplicar o estilo adequado. (Isso significa também que você pode fazer ainda mais acrescentando outras classes, o que já é uma outra história.) O código que você deve usar para o echo é o seguinte: ID, 'Poststyle', true); echo $specialstyle; ?>
Como adicionar isso à lista de classes gerada por post_class()? Este é o código para gerar as IDs e classes para o div da postagem:>
Você pode simplesmente acrescentar isso à ID da seguinte forma:>
Isso adicionaria #ad à postagem, caso você atribua a Poststyle o valor ad, mas, no fim das contas, não fica muito bonito fazer isso com a ID, por isso vamos entrar na template tag post_class()em vez disso. A vantagem é que post_class() aceita parâmetros, assim, se você quiser adicionar uma classe – tartarugas, por exemplo – pode fazer isso da seguinte forma:
Isso faria que post_class() adicionasse tartarugas às classes de CSS geradas, que é o que você quer fazer, mas em vez disso você quer colocar seu valor de campo personalizado para Poststyle ali. Isso significa que você precisa passar o código PHP anterior para post_class(), o que por sorte é bem simples de fazer. No entanto, você não pode usar o código diretamente, por isso vai precisar alterá-lo um pouco. Este é o código que você deve usar: ID, 'Poststyle', true); ?>
A parte do echo foi removida, uma vez que post_class() vai retornar o que você passar para ela. E adicionar essa parte é tão fácil quanto simplesmente remover as declarações em PHP do código e colocá-la dentro de post_class():ID, 'Poststyle', true) ); ?>>
Isso adicionará o valor do campo personalizado Poststyle como uma classe ao div da postagem, assim como o parâmetro tartarugas fez.
248
CAPÍTULO 12: TRUQUES DE DESIGN ADICIONANDO SUA PRÓPRIA TAXONOMIA Outra forma de obter mais controle sobre suas postagens é adicionar uma taxonomia personalizada. Com esse método, você pode fazer verificações condicionais usando taxonomy_exists(), que, por sua vez, retorna true caso a taxonomia em questão esteja disponível. (Lembre-se de que você precisa criar sua taxonomia personalizada primeiro, conforme descrito no Capítulo 6.) Assim como qualquer outra conditional tag, esse método permite que você realize uma verificação condicional para determinar se uma certa taxonomia está presente; caso esteja, você faz alguma coisa e, caso não esteja, você faz outra. Infelizmente, suas taxonomias personalizadas não podem ser anexadas a post_class() com estilos personalizados, por isso você mesmo terá de fazer isso se quiser. Você poderia optar por executar echo em suas taxonomias personalizadas com os divs de suas postagens, ou usá-los de forma similar caso prefira aplicar estilos à sua postagem dessa forma, simulando a forma como as tags são adicionadas com post_class(), conforme descrito anteriormente. Leia mais sobre taxonomy_exists() no Codex em http://codex.wordpress.org/ Function_Reference/taxonomy_exists. Controlar a aparência de suas postagens usando tags, campos personalizados ou taxonomias é uma ótima forma de melhorar o apelo visual de seu site e dar destaque ao conteúdo de maior importância. Fazer os diversos elementos do design se destacarem sozinhos é importante, desde que eles se encaixem no final. A próxima seção aborda outra parte importante de qualquer design: o menu.
MELHORANDO O MENU O menu é uma das partes mais importantes de um design. Ele precisa incluir conteúdo suficiente para ajudar o visitante a mergulhar fundo em um site, mas sem exagerar a ponto de se tornar poluído e difícil de usar. É crucial caprichar no menu, uma vez que ele está em evidência para o usuário. É por isso que há tantas abordagens visuais usadas para tornar os menus mais interessantes, às vezes para pior, uma vez que muitas delas tendem a ignorar a utilidade em favor de um design mais “cool”. Dito isso, um menu útil e interativo (ver Figura 12-1) também pode ser atraente, e experimentar com diferentes abordagens de uso do menu é sempre uma boa ideia. Só não esqueça de que o objetivo principal é uma navegação fácil. Figura 12-1: Menu simples O tipo de menu que você escolhe quando usa WordPress depende muito do tipo de site no qual está trabalhando. Alguns sites de WordPress são construídos ao redor de Páginas (especialmente sites estáticos), enquanto outros são mais fluidos e realmente podem se resolver muito bem com uma nuvem de tags e um campo de busca. Entre os dois extremos, há a utilização mais comum, com categorias (que obviamente consistem em postagens) para as
249
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS seções e Páginas para informações estáticas (aquela chatice do “About”), e as tags são apenas uma forma de descrever melhor o conteúdo da postagem. De qualquer forma, você definitivamente deve construir o menu usando o recurso de menu (tenho certeza de que lembra dele, dos capítulos anteriores). Dessa forma, não vai ser problema popular o menu, e as atualizações serão relativamente fáceis. Fazer tudo se encaixar não resolve coisa alguma, mas permite que você misture categorias com páginas, postagens, links, etc. Como se isso não fosse o suficiente, você ainda precisa decidir a aparência do menu, sua orientação, e se ele precisa de algum elemento decorativo para se tornar interessante. Uma técnica popular é a de sliding doors. A seção a seguir explica como implementar esse método em um menu de WordPress.
SLIDING DOORS A técnica de menu deslizante em CSS, chamado sliding doors, é um modo simples, mas eficaz de usar elementos gráficos como fundo em um menu horizontal sem precisar configurar uma largura fixa. A ideia é adicionar elementos gráficos como fundo aos seus itens de menu, fazendo-os ser suficientemente flexíveis para comportar qualquer comprimento de texto. O código a seguir é a base do seu menu.
Basicamente, é a saída típica da maioria das template tags de WordPress que listam categorias e Páginas, uma lista não ordenada que é a solução ideal para os menus sempre que possível, ainda que remotamente. Afinal, o que é um menu senão uma lista? Digamos que você queira usar um botão com cantos arredondados, como mostra a Figura 12-2, para seus itens de menu; isso é bonito e moderno, não é mesmo? O problema é que simplesmente aplicar esse botão ao fundo de cada item de menu exigiria que o item de menu, em si, tivesse largura fixa, e uma vez que você não quer criar um gráfico para cada item, e sim fazer o texto do item de menu ser exibido pelo navegador com toda a liberdade Figura 12-2: Imagem de fundo de um botão com cantos que isso oferece, você vai precisar ser criativo. arredondados
A solução é cortar a imagem em três partes. Primeiro, você tem o lado esquerdo, com cantos arredondados nesse lado. Em segundo lugar, você tem o que está no centro, que será o fundo do seu link de menu. E a parte final são os cantos arredondados do lado direito. Ver Figura 12-3.
250
CAPÍTULO 12: TRUQUES DE DESIGN O que você quer é colocar a parte central como fundo do link, e já que sou preguiçoso e não vou me estender muito nesse assuto, vamos usar um centro de uma só cor. Em seguida, você deve colocar os cantos arredondados da esquerda à esquerda do link, e os cantos arredondados da direita à direita, deixando que a cor de fundo preencha o espaço entre os dois.
Figura 12-3: Como cortar um botão
Como você faria isso em HTML? É fácil, basta adicionar um span dentro de cada link da seguinte forma:
Aí, então, você simplesmente adiciona as imagens da forma adequada, usando CSS. O link ficaria com os cantos arredondados da esquerda à esquerda, e seria preenchido com a cor de sua escolha, e então você aplicaria os cantos do lado direito ao span, porém fixos à direita. O efeito que você vai obter é um botão que pode ter a largura que quiser, uma vez que o fundo do link, em si, é um preenchimento depois que os cantos da esquerda são exibidos. Para simplificar ainda mais, aqui está um CSS simulado que você vai precisar alterar antes de usar, mas que ainda assim explica como isso funciona. ul#navigation li { float:left; padding: 5px; list-style:none; } ul#navigation a:link, ul#navigation a:visited { display:block; } ul#navigation a:hover, ul#navigation a:active { background: #888 url(corners-left.gif) no-repeat left; float:left; } ul#navigation a span { float:left; display:block; } ul#navigation a:hover span { float:left; display:block; background: url(corners-right.jpg) no-repeat right; }
251
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS Como você faria isso funcionar com wp_nav_menu(), a template tag responsável pela saída adequada dos menus? É fácil, basta adicionar a tag HTML span com a ajuda dos parâmetros before e after, assim: &after='); ?>
Isso acrescentaria a tag span necessária a cada link no menu, ativando assim a utilização do sliding door. Você poderia aplicar esse método também a outras template tags simples, como wp_list_ categories() para sites em que você precisa listar as categorias dessa forma. É um pouco mais complicado, mas se você executar inteiramente wp_list_categories() pelo PHP, usando preg_replace (referência no manual de PHP: http://se2.php.net/preg_ replace), pode alterar a saída de wp_list_categories(). Esse código é um pouco mais técnico; ele busca algumas expressões (nesse caso as tags li e a) e então adiciona tags span de abertura e fechamento ao redor de cada link. No lado do WordPress, é importante passar um false (isto é, zero) para o parâmetro echo, de modo a garantir que a tag wp_list_ categories() não gere uma saída para o conteúdo (é isso que você faz com echo antes de preg_replace(), afinal), e é provavelmente uma boa ideia não passar coisa alguma para o parâmetro title_li, de modo a não obter um título para a listagem de categorias. Outra boa ideia é passar 1 para depth, a fim de garantir que você tenha apenas categorias de primeiro nível. O código é o seguinte: 248 ]*)>\]*)>(.*?)\<\/a>@i', '- $3', wp_list_categories('title_li=&echo=0&depth=1')); ?>
Mas e o que dizer de wp_list_bookmarks()? Aqui está ela em ação, exibindo apenas a categoria de links Importante, cuja ID é 15. Naturalmente, você também precisaria adicionar o código de span necessário e remover o título: &link_after= '); ?>
PENSANDO SOBRE O EFEITO HOVER NOS MENUS Quanto mais conteúdo você tiver, mais itens vai querer incluir no menu. Afinal, o propósito do menu é justamente ajudar os visitantes a navegarem em seu site, por isso é fácil cair na tentação de adicionar tudo e mais um pouco ao menu. Os menus horizontais são populares, mas a largura é uma limitação quando chega a hora de expandi-los. A solução muitas vezes é o efeito “hover”, que faz um submenu se abrir ao passar o mouse sobre um item, como mostra a Figura 12-4, para que os visitantes tenham fácil acesso às seções dentro de cada item de menu. Com o advento de dispositivos com tela de toque, como smartphones e tablets, no entanto, você deve tomar cuidado na hora de usar designs que usam esse efeito. Uma vez que os menus são parte integrante de um site, eu recomendo que você evite construí-los usando o efeito “hover”. Afinal, não é possível passar o mouse sobre um link em uma tela de toque, já que as únicas opções são “pressionar” (no sentido de que você está tocando a tela, de forma
252
CAPÍTULO 12: TRUQUES DE DESIGN comparável a um clique, em uma interface que usa um mouse) ou não. Não é possível “passar o mouse sobre” algo em uma tela de toque, por isso um menu que depende desse efeito não vai funcionar em tablets. Já há milhões de tablets no mercado, e todos esperam que esse mercado exploda. Será que isso significa que você nunca mais vai criar um menu com o efeito “hover”? Embora eu recomende cautela, acho que ainda há espaço para eles. Se você tem alternativas decentes, como por exemplo fazer o primeiro item do menu ser clicável e garantir a facilidade para alcançar itens mais baixos a partir da página-alvo, não há problema algum. Não vai ser tão rápido e fácil navegar no seu menu sem um ponteiro de mouse, mas pelo menos tudo vai funcionar. Mantenha isso em mente na hora de decidir que tipo de menu você vai usar em seus projetos futuros.
Figura 12-4: O menu do tema Twenty Ten, que abre submenus quando o usuário passa o mouse sobre cada item, nem um pouco amigável para iPad
Agora, vamos dar uma guinada da exibição de postagens e menus para a adição de anúncios dentro do loop.
POSICIONANDO ANÚNCIOS DENTRO DO LOOP Uma pergunta que muitas pessoas me fazem é como inserir anúncios – especificamente anúncios de Google AdSense – dentro do loop. Normalmente, os blogueiros querem veicular um anúncio depois da primeira, segunda ou terceira postagem e, então, continuar com o loop como se nada tivesse acontecido. Uma forma de fazer isso é dividir o loop em dois, primeiramente com uma consulta para as duas primeiras postagens, por exemplo, e então exibindo o anúncio. Depois disso, há um segundo loop com uma compensação de postagens que corresponde ao número de postagens consultadas no primeiro loop; assim tudo forma uma grande unidade. Uma forma melhor de fazer isso é simplesmente contar o número de postagens e exibir o anúncio quando um certo número for atingido. Você pode fazer isso com PHP ou adicionando uma variável sempre que o loop é executado, o que acontece para cada postagem que deve ser exibida. Mais uma forma comum de exibir um anúncio depois da primeira postagem, sem todo o código de saída da postagem.
253
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS
O código acima é um loop básico, com um pouco de contagem. Sem dúvida, você reconhece a primeira linha if (have_posts(), mas a linha abaixo dessa é nova. Você atribui a $postcount o valor 0, e então adiciona +1 ao valor sempre que o loop for executado. Isso é feito na linha while (have_posts()) : the_post(), assim, a primeira coisa que você vai fazer depois disso é adicionar +1 ao valor de $postcount, e para isso você usa ++, que significa exatamente isso, adicionar +1. Depois disso, a coisa é bem simples. Se o valor de $postcount for inferior a 2, o código irá gerar a postagem e o código do anúncio; caso contrário, o código passa para a saída de postagem expressa por else, que corresponde à sua postagem padrão. Mas e se você quiser inserir o anúncio após cada uma das primeiras duas postagens? Nesse caso, basta alterar a consulta if configurando o valor de $postcount de 2 para 3, o que significaria que o anúncio seria exibido nas postagens de números um e dois dentro do loop:
Cuidados com as regras de anúncios Inserir anúncios entre as postagens pode soar como uma grande ideia. Afinal, é uma prática relativamente não invasiva e, portanto, não excessivamente irritante. É claro que, ainda assim, ela irrita alguns, mas é bem melhor do que colocar anúncios no conteúdo em si, o que você também pode fazer, com alguns truques bacanas de “hacking”. No entanto, embora possa parecer interessante distribuir os anúncios entre as postagens, você deve observar as regras da rede de anúncios que está usando. O Google AdSense, um serviço amplamente utilizado, tem um limite para o número de anúncios que você pode exibir por página; e se você exceder esse limite, vai ter problemas, e talvez sua conta seja suspensa. Isso é ruim para a maioria das pessoas, mas ainda pior para quem ganha a vida com anúncios na Internet. Por isso, embora eu incentive a distribuição de anúncios pelo site (isso, afinal, é bem melhor do que concentrá-los no topo da página), também me sinto na obrigação de lembrar que você deve verificar se as regras da rede de anúncios incluem alguma limitação. E tome cuidado! Saídas automáticas como essa podem ser perigosas, e um erro em algum lugar pode acabar gerando um bocado de anúncios em toda a parte. Ninguém vai gostar disso: nem seus leitores, nem a rede de anúncios e muito menos você. Outra coisa que você deve considerar com cautela é o uso de páginas de erro 404 com anúncios. É claro que você pode exibir anúncios nessas páginas, mas eles não terão um bom desempenho se forem contextuais, e duvido que os anunciantes que estão pagando pela visualização dos anúncios queiram aparecer em uma página de erro.
254
CAPÍTULO 12: TRUQUES DE DESIGN
CRIANDO PÁGINAS DE 404 PARA AJUDAR O VISITANTE É importante criar páginas de erro 404 que sejam úteis. Essas páginas são exibidas sempre que alguém chega a uma página que não existe em seu site, e embora você possa não ter cometido erro algum, isso pode não se aplicar a quem disponibiliza links para o seu conteúdo, por isso essas páginas são necessárias. O arquivo de modelo do tema que gerencia os erros 404 Page Not Found tem o nome de 404.php, e você pode fazer o que quiser com ele, desde que ele seja executado a partir do WordPress. Esta seção não traz detalhes sobre como construir seu próprio arquivo de modelo 404.php (falamos disso no Capítulo 4). No entanto, ela discute o que acho que uma boa página de erro 404 deve oferecer ao visitante: O fato de que a página não está ali deve ficar óbvio. Em outras palavras, informe ao
visitante que a página que ele buscava não existe, e faça-o de modo que não haja risco de um mal-entendido. Ofereça rotas alternativas. Uma vez que a maior chance de encontrar uma mensagem de erro 404 em uma instalação de WordPress é por meio de um link corrompido vindo de um local externo, você deve oferecer uma rota diferente para o conteúdo que o visitante estava buscando. Ofereça um incentivo específico para que seu visitante utilize a ferramenta de busca. Abra seu site. O visitante talvez não se importe o suficiente para buscar o conteúdo que disparou o erro 404, mas talvez você ainda assim possa capturar sua atenção. Adicione links para suas categorias e ofereça uma breve introdução sobre cada uma delas. Faça seu erro 404 vender o seu site. Mostre o conteúdo mais recente. É fácil exibir uma lista de links mostrando as últimas atualizações. Alguma coisa ali pode chamar a atenção do visitante. Mantenha o bom humor. Uma pitada de humor pode ser uma forma de fazer o visitante se irritar menos com o fato de que o conteúdo que ele queria visualizar não está disponível ali. Ofereça uma forma de relatório de erro. Deixe que o visitante entre em contato com você para avisar sobre o conteúdo indisponível; isso gera uma mensagem positiva, e ainda ajuda você a encontrar possíveis falhas em seu site. Uma página de 404 útil diz muito sobre um site, por isso invista algum tempo para caprichar na sua.
USANDO BIBLIOTECAS DE JAVASCRIPT COM WORDPRESS JavaScript pode ser uma ferramenta excelente, principalmente graças às ótimas bibliotecas como jQuery, MooTools, Scriptaculous, etc. Há uma infinidade dessas bibliotecas disponíveis, o que facilita na hora de adicionar transições e outros elementos visuais decorativos, assim como coisas mais úteis. A maioria dos serviços on-line bacanas de hoje utilizam JavaScript, e a interface de admin do WordPress perde muito da diversão se você desativar JavaScript em seu navegador. Você pode adicionar a funcionalidade de JavaScript também aos seus sites de WordPress, seja apenas para melhorar o apelo visual de seu tema com animações e coisas do tipo, ou para
255
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS adicionar novas funcionalidades, de fato, graças ao brilhantismo do seu código. O que você precisa é pensar em como fazer isso, e é aí que entra em cena wp_enqueue_script(). Com essa tag, você pode carregar qualquer uma das diversas bibliotecas de JavaScript incluídas no WordPress, ou simplesmente anexar sua própria. A utilização é simples. Adicione um JavaScript ao gancho onde ele é necessário, usando
wp_enqueue_script(). Se você quiser retardar ao máximo o carregamento de um
JavaScript, uma vez que ele provavelmente não será necessário até que o usuário faça algo específico, você pode usar wp_enqueue_script() e anexar isso ao gancho wp_footer, da seguinte forma (usando jQuery como exemplo): function load_my_scripts() { wp_enqueue_script('jquery'); } add_action('wp_footer', 'load_my_scripts');
Isso carregará a versão de jQuery integrada ao WordPress. Você pode encontrar outras bibliotecas de JavaScript assim, na pasta wp-includes/js/. A utilização de wp_enqueue_ script() também facilita o carregamento de scripts apenas quando você precisa deles, com o uso criativo de algumas conditional tags. Se você quer o script apenas na página inicial, use is_home(), e assim por diante. Você pode fazer muita coisa com JavaScript, e tudo depende do site e das suas preferências. Algumas pessoas se sentem mais confortáveis com Prototype do que com jQuery, e outras preferem MooTools ou algo totalmente diferente. É por isso que wp_enqueue_script() pode carregar qualquer coisa. Você deve usar essa tag e certificar-se especificamente de não deixar seu site mais lento com JavaScripts caso não precise deles, ou deixar que os scrips sejam carregados cedo demais. Afinal, qual é o objetivo de esperar um JavaScript quando não há uma página para utilizá-lo? Recomendo fortemente que você leia um pouco sobre wp_enqueue_script() no Codex, onde você também vai encontrar informações sobre as diversas bibliotecas de JavaScript incluídas no WordPress, e sobre como você pode passar elementos como dependências, além de como remover o registro de bibliotecas de JavaScript e substituí-las por suas próprias bibliotecas. Comece pela página do Codex (http://codex.wordpress.org/ Function_Reference/wp_enqueue_script) e siga adiante, a partir daí, para a biblioteca de JavaScript em si . Há uma porção de JavaScripts por aí que você pode usar, sem falar nas extensões das populares bibliotecas de que já falamos. Certifique-se de ler sobre elas, não apenas para manter seu site limpo, mas também para garantir que elas funcionem em todos os navegadores para os quais você quer oferecer suporte. Dito isso, se a funcionalidade adicional, a elegância ou o elemento chamativo vai ajudar a melhorar seu site, essa pode ser uma ótima forma de torná-lo mais atraente.
WORDPRESS DO SEU JEITO Às vezes, você precisa que o WordPress leve sua marca um pouco mais longe do que o esperado. Muitas vezes, isso ocorre quando você está usando plug-ins ou recursos que permitem que os usuários se registrem, com configurações e privilégios no lado administrativo das coisas. Ou seja: eles podem acessar a interface de admin do WordPress. 256
CAPÍTULO 12: TRUQUES DE DESIGN Isso tem duas consequências. Primeiramente, os visitantes podem fazer login, ou seja, eles irão usar o formulário de login do WordPress, mostrado na Figura 12-5. O formulário padrão de login não se parece nada com o site que você desenhou cuidadosamente, por isso, é natural que você queira mudar algo nele. Em segundo lugar, os usuários irão acessar a interface de admin do WordPress, que tem a cara do WordPress, e não a cara da sua Super Marca™. Ninguém quer uma coisa dessas, não é mesmo? Infelizmente, o WordPress não oferece as mesmas possibilidades dos temas no lado Figura 12-5: Formulário de login padrão administrativo das coisas quanto no lado do usuário de seu site, mas há várias coisas que você pode fazer. Tudo vai depender do quão importante é que as partes do WordPress se pareçam o mínimo possível com WordPress, e de quanto tempo você quer investir para fazer as alterações.
FORMULÁRIO DE LOGIN PERSONALIZADO Se você precisar mudar uma só coisa dentre todos os elementos administrativos do WordPress, provavelmente será o formulário de login. Ele é cheio de elementos visuais da marca WordPress, o que, em si, já é bem irritante, sobretudo se o seu site estiver fazendo algo totalmente diferente de um típico blog de WordPress. É claro que você pode simplesmente modificar o formulário de login alterando os arquivos no núcleo do WordPress, mas isso significaria correr o risco de causar uma falha em algo crucial, fora o fato de que você precisaria repetir o processo a cada atualização, uma vez que a atualização sobrescreve as alterações. Usar um plug-in é uma ideia bem melhor. Você pode já ter encontrado algumas possibilidades no Capítulo 9. Elas são muito boas, por isso recomendo que teste-as. No entanto, talvez você queira manter o formulário de login alinhado com o tema, uma vez que trata-se de uma questão de design, e isso significa que você quer fazer suas personalizações dentro dos arquivos do tema. Por sorte, você pode fazer isso ativando o gancho de ação login_head com a ajuda de folhas de estilo. Isso significa que você pode fazer o formulário de login ter a aparência que você quiser, desde que não precise alterar o layout em si. Sendo assim, não é problema aplicar um fundo preto e o seu logotipo; basta usar um pouco de CSS. Porém, primeiramente você precisa criar o gancho de função sobre o gancho de ação login_ head. Você provavelmente vai reconhecer esse tipo de código do Capítulo 6, que aborda os ganchos de ação em profundidade. Lembre-se de que você deve facilitar a construção de temas filhos sobre o seu tema, e esses temas filhos podem precisar de seu próprio formulário de login. É por isso que eu uso o parâmetro stylesheet_directory na tag get_ bloginfo(), em vez de template_directory, que é usado normalmente. O código é o seguinte: 257
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS // CSS para formulário de login personalizado function nbcustom_login() { $nbCustomLoginUrl = get_bloginfo('stylesheet_directory').'/noteslogin.css'; wp_register_style( 'nbCustomLoginStyle', $nbCustomLoginUrl ); wp_enqueue_style( 'nbCustomLoginStyle' ); } add_action('wp_head', 'nbcustom_login', 1);
O código acima é relativamente simples; a única coisa que ele faz é adicionar o conteúdo da função nbcustom_login() ao gancho login_head. Naturalmente, estou falando de wp_enqueue_style() (que funciona de forma muito semelhante a wp_enqueue_ script()) contendo uma folha de estilo localizada em uma pasta chamada custom no diretório do tema. Você pode ler sobre wp_enqueue_style() no Codex em http:// codex.wordpress.org/Function_Reference/wp_enqueue_style. O restante fica a seu critério: é só modificar a nova folha de estilo que você incluiu (localizada em custom/login.css nesse exemplo). A página de login é relativamente fácil de entender. Alguns dos elementos que talvez você queira alterar são a cor de fundo (usando a tag body), o logotipo do WordPress, que reside na tag h1 e a própria caixa de login, que está em div#login. Boas modificações para você!
TEMAS DE ADMIN Aplicar um tema à interface de admin do WordPress é, infelizmente, uma tarefa relativamente complicada. Em primeiro lugar, a única forma de fazer isso sem modificar ou sobrescrever os arquivos do núcleo (o que nunca é uma boa ideia) é usando um plug-in. Basicamente, você pode criar um plug-in que use o gancho de ação admin_head e aplique sua própria folha de estilo, da mesma forma como fizemos com o formulário de login no exemplo anterior: function smashing_admin() { echo ''; } add_action('admin_head', 'smashing_admin');
Você já sabe como a coisa funciona: você inclui a folha de estilo smashing-admin.css diretamente dentro do diretório do plug-in, usando algo como http://domain.com/ wp-content/plug-ins/smashing-admin-plug-in/smashing.css nesse caso. Depois disso, você precisa alterar o comportamento dos inúmeros elementos da interface de admin do WordPress. Isso não é para os fracos. E, naturalmente, não esqueça de instalar e ativar o plug-in! Talvez você queira, também, adicionar algo ao rodapé da interface de admin. Para isso, simplesmente acrescente o que quiser ao gancho admin_footer, de forma semelhante ao que acabamos de fazer. Há alguns temas de admin impressionantes por aí, incluindo os mencionados no Capítulo 9, mas não se iluda. Fazer a interface de admin ter a aparência que você quer não é uma tarefa fácil. Dito isso, às vezes você precisa apenas de mudanças mínimas, como trocar as cores e coisas do tipo, e isso não chega a ser um problema, se você usar o método acima.
258
CAPÍTULO 12: TRUQUES DE DESIGN
MELHORANDO SEU SITE DE WORDPRESS Para que o seu site deixe de ser um simples tema de WordPress (por melhor que ele seja) e se torne algo mais completo, é importante que você aprenda os truques do WordPress. Qualquer site que se preze pode se beneficiar do aprimoramento que esses truques oferecem, por isso experimente com diversas técnicas e veja o que você pode fazer com seu site. Embora seja importante controlar a aparência e a atmosfera geral das suas postagens e obter um menu adequado, as possibilidades para o seu site são infinitas. Há blogs excelentes, como o da Smashing Magazine (http://www.smashingmagazine.com/) e A List Apart (http://www.alistapart.com/), que podem ajudá-lo a encontrar ainda mais técnicas interessantes para seu site. Algumas delas podem ser empregadas imediatamente, e outras precisam de uma abordagem mais prática. Divirta-se com seus experimentos!
259
13
DIVERSÃO COM IMAGENS
DIZEM QUE uma imagem vale por mil palavras; com imagens, é possível contar uma história bem mais rapidamente do que com palavras. Não é segredo algum que imagens e texto funcionam muito bem juntos. Além de dar um tempero a mais às coisas, uma imagem pode ajudar a contar uma história e (literalmente) ilustrar um argumento. Se você está usando imagens em seu site, é importante pensar com calma sobre como
incorporar galerias e ilustrações. Este capítulo aborda a exibição de imagens em um site de WordPress para além das tradicionais ilustrações ou cenários inspiradores em suas postagens e páginas. Estamos principalmente falando de galerias, apresentação e serviços de compartilhamento de fotos, isso sem falar no detalhe de configurar o gerenciamento de imagens do WordPress de uma maneira que faça sentido.
CAPÍTULO 13
SMASHING WORDPRESS
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS
TRABALHANDO COM GALERIAS DE IMAGENS O WordPress já oferece suporte ao shortcode [gallery] por bastante tempo, com todas as possibilidades que isso traz. Se você estiver trabalhando no editor visual, não vai ver o botão de galeria, apenas uma grande caixa que avisa tratar-se de uma área para imagens. Para obter uma representação mais refinada, você pode alternar para a visualização em HTML. Na verdade, o que [gallery] faz é gerar uma saída das imagens que você subiu em um grid de miniaturas clicáveis. Aí, então, você pode permitir que os visitantes vejam uma versão maior da imagem, seja no design do seu tema ou no arquivo original, em si. O primeiro método é chamado de página de anexo (attachment page), uma vez que as imagens são anexos da postagem de blog. Essa funcionalidade integrada deve cuidar da maior parte de suas necessidades se você possui um site primariamente orientado para texto que publica imagens eventualmente. Para fazer a sintonia fina desse quesito, o primeiro passo depois de instalar o WordPress e selecionar o tema desejado é visitar a página Media, dentro da opção Settings, na interface de admin. Aqui, você pode controlar as circunstâncias sob as quais as diversas imagens são redimensionadas. Quando você faz o upload de uma imagem, ela é salva em quatro versões diferentes, para diferentes necessidades no site. A Figura 13-1 mostra a página de configurações de mídia do WordPress, que define os diversos tamanhos que suas imagens podem ter: A miniatura (thumbnail) é uma versão cortada da imagem, que serve para simbolizar a
imagem em questão. Você pode configurá-la para ser cortada em tamanhos exatos, assim, a imagem inteira nem sempre será exibida. É uma imagem pequena, feita para ser clicável. O tamanho padrão é 150x150 pixels, mas você pode alterar isso para ajustar as configurações ao seu tema. A imagem média (medium) é a imagem completa com o tamanho reduzido e largura e altura propocionais à imagem original que você subiu. Você pode configurar a largura e altura máximas que ditam como a imagem deve ser dimensionada. Essa é também a imagem usada nas páginas de anexo. A imagem grande (large) também é sua imagem completa, mas reduzida proporcionalmente. A imagem original também é disponibilizada, sem qualquer alteração. Não há ressalvas: nenhuma versão da imagem será criada caso sua dimensão seja maior do que a da imagem original. Assim, se sua imagem estiver configurada para ter largura e altura de 800 pixels, mas a imagem que você está subindo for menor que isso, ela não será criada ou disponibilizada para inclusão no WordPress. Não haveria porquê. Então o que acontece? Por que estou tocando nesse assunto? É simples. A miniatura deve ter um tamanho que se ajuste à largura e ao número de colunas que você normalmente espera usar em suas galerias de imagens criadas com o shortcode [gallery]. Selecione um tamanho que funcione bem para o seu site. 262
CAPÍTULO 13: DIVERSÃO COM IMAGENS
Figura 13-1: Página de configurações de mídia do WordPress
Por outro lado, acredito que a imagem média deva ser exatamente da mesma largura máxima que seu design pode suportar. Em outras palavras, se a largura máxima for de 580 pixels, configure a largura máxima da imagem média para 580 pixels, para garantir que você possa incluí-la em suas postagens sempre que quiser. Uma vez que a imagem média é usada nas páginas de anexo, é uma boa ideia fazê-la se encaixar bem nessa página. Se suas páginas de anexo forem construídas de forma a suportar um tamanho de imagem maior que suas postagens tradicionais, você certamente vai ter problemas, mas nesse caso você vai precisar criar imagens personalizadas para suas postagens. O mais importante é que a página de anexo tenha uma aparência agradável. Por fim, a imagem grande é boa para criar um link para uma variante maior. Alguém poderia dizer que a imagem grande deve ser usada na página de anexo, e provavelmente é possível fazer isso acontecer, mas o padrão não é esse, sendo assim, não conte com isso. A imagem grande em geral só interessa se você estiver fazendo o upload de uma foto em alta resolução e não quiser incluir um link para a versão original, uma vez que ela tem 15 megabytes e é ridiculamente grande para ser visualizada na Web, e a imagem grande for substancialmente menor e se adapte ao tamanho da tela.
APLICANDO ESTILOS À GALERIA Deixar as galerias incluídas com o shortcode [gallery] com uma boa aparência é fácil, partindo-se do pressuposto de que você tenha configurado suas miniaturas de acordo com o número de colunas que vai usar. O número de colunas é algo que você pode selecionar na hora de incluir a galeria, por isso preste bem atenção.
263
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS Aplicar estilos à galeria é, na verdade, muito fácil. Tudo fica dentro de um div com várias classes de identificação a serem utilizadas, e uma delas se chama gallery. Como manda a norma do WordPress, há também IDs e classes únicas, mas você provavelmente pode resolver o problema com o div.gallery para suas necessidades de CSS. Seguindo em frente, cada item da galeria é envolto por dl.gallery-item, que por sua vez contém dt.gallery-icon, que possui a miniatura com o link para a imagem e possivelmente também um dd.gallery-caption, caso haja uma legenda para a imagem em questão. Você terá esse formato para todas as imagens que estiver selecionado para exibição em uma fileira, e então tudo isso é interrompido para iniciar uma nova fileira, sem a menor cerimônia, com uma tag br com style="clear:both", e então tudo recomeça. Isso significa que, para as listagens de galerias de miniaturas, você precisa aplicar o estilo aos seguintes elementos (listados em ordem hierárquica): div.gallery {} dl.gallery-item {} dt.gallery-icon {} dd.gallery-caption {}
Este é o código usado pelo tema Notes Blog, com cor e tamanho de fonte sutis para as legendas e um espaço em branco no meio, o que é sempre agradável aos olhos. Naturalmente, seu design pode ser bem mais atraente, adicionando imagens de fundo, bordas e assim por diante. 260 div.gallery { margin-bottom: 14px; } img.attachment-thumbnail { border:0; } dd.gallery-caption { margin-top: 8px; font-size: 12px; color: #777; font-style: italic; }
Isso é apenas a metade do processo. Embora você possa configurar as miniaturas de sua galeria para incluírem um link para a imagem, de fato, você sempre pode optar por criar um link para a página de anexo. Trata-se da página que exibe a imagem no design do seu tema, o que provavelmente significa que ela irá reverter para single.php ou index.php, uma vez que a maioria dos temas não possuem um arquivo de modelo attachment.php, e pouquíssimos possuem arquivos de modelo para video.php, image.php, etc. Para fazer seu tema ser amigável para imagens, você deve adicionar um link de volta para a postagem que contém a galeria de imagens e adicionar links de Anterior/Próxima para que o usuário possa navegar pelas imagens da galeria. Vamos começar pelo link para a imagem anterior. O código a seguir, que talvez você reconheça do Notes Blog, busca a postagem mãe (a postagem à qual o anexo se refere) e cria um link para ela. Nada demais. Você não pode usar the_permalink(), uma vez que isso indicaria o próprio anexo, ao passo que the_title() é, naturalmente, o título da imagem. Você provavelmente deve garantir que o seu modelo de anexo gere a mesma saída.
264
CAPÍTULO 13: DIVERSÃO COM IMAGENS← post_parent) ?>" title="post_parent) ?>" rev="attachment"> post_parent) ?>
Falando em saídas, a descrição que você pode digitar na hora de fazer o upload ou a edição de imagens é na verdade gerada por the_content(), assim, você pode facilmente acrescentar um bom suporte a anexos para seu modelo single.php ou index.php. Basta usar a conditional tag is_attachment() para fazer a verificação e gerar a saída de acordo com isso, que tudo dará certo. Voltando ao assunto: é hora de adicionar aqueles links para a imagem anterior e para a próxima imagem, facilitando a navegação dentro da galeria, na visualização de imagem anexada. Para fazer isso, use previous_image_link() e next_image_link(); ambas irão gerar, por padrão, a miniatura com link para a outra imagem de destino. Aqui, você está usando divs para deixar os links para a próxima imagem e para a imagem anterior flutuando à direita e à esquerda, respectivamente:
Embora a saída da miniatura possa ser o suficiente se for personalizada para a tarefa, você talvez prefira usar texto. Basta não passar nada para os parâmetros de tamanho da imagem (sim, outros tamanhos também são aceitos) e a saída gerada trará o título da postagem da imagem, ou seja, o nome atribuído por você. Ou, alternativamente, você pode adicionar outro parâmetro para passar um link com texto personalizado, da seguinte forma:
Isso é essencialmente tudo o que você precisa saber para trabalhar com galerias em um site de WordPress. O próximo passo natural, depois de fazer a galeria funcionar com seu tema, é turbinar a coisa toda usando plug-ins.
NAVEGANDO MELHOR COM O EFEITO LIGHTBOX O efeito Lightbox é um nome genérico para uma sobreposição que exibe uma imagem sobre um site, sem abrir um pop-up (ver Figura 13-2). Você precisa fechar a imagem para acessar novamente o site, o que pode soar como uma má ideia, mas compare isso a precisar abrir uma nova página para visualizar a imagem em tamanho completo, e você vai entender o princípio. As melhores soluções lightbox oferecem também botões de navegação.
265
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS
Figura 13-2: Efeito lightbox em ação
Isso é feito com JavaScript e alguns truques de design, e há uma infinidade de soluções possíveis esperando por você. A solução que escolher depende de quantos elementos visuais decorativos você quer, e de que tipo de efeito se adapta a você e ao seu site. Acredito que você deve optar por uma solução que venha sob a forma de plug-in de WordPress, no entanto, porque isso significa que você não vai precisar adicionar manualmente as classes de suas imagens para garantir que a solução Lightbox reconheça o link como um link do tipo lightbox. Consulte o Capítulo 9 para obter excelentes opções de plug-ins que oferecem esse efeito caso ainda não tenha um favorito. Os plug-ins fazem isso por você, de modo que, em um piscar de olhos, sua galeria de imagens não precisa mais abrir aquelas páginas de anexo, e seus visitantes poderão navegar facilmente pelas fotos. No entanto, isso tem desvantagens, a mais óbvia delas sendo a possibilidade de o visitante ter desativado JavaScript, ou de alguém clicar sobre o link da miniatura antes que o script de Lightbox tenha sido carregado completamente. O resultado disso é a imagem ser exibida, por inteiro, fora do design, como se um link apontasse para a própria imagem apenas (o que é exatamente o que acontece, mas aí então o script corrige isso com os efeitos adicionados). Não é bonito quando isso acontece, sobretudo se o visitante espera aquele efeito de sobreposição bacana, e os práticos links de navegação da galeria que provavelmente estão incluídos, mas graças ao botão Voltar do navegador, a solução é plenamente funcional. Quais seriam os motivos para não usar uma solução de Lightbox? Uma grande preocupação são os dispositivos menores. Quão atraente será esse efeito em uma tela inferior a sete polegadas, com baixa resolução? Será que nesse caso há alguma utilidade? Podemos dizer o mesmo sobre as páginas de anexo, mas é mais fácil aplicar estilos a essas páginas de acordo com o perfil de cada usuário. Você deve certificar-se de que o script de Lightbox não substitua qualquer outra solução. Por fim, se você ganha dinheiro com visualizações de página, não adote o efeito lightbox a não ser que você acredite que isso trará mais leitores. Afinal, fazer as pessoas carregarem uma nova página e, portanto, um novo conjunto de anúncios, sempre que quiserem visualizar a próxima imagem em uma galeria, pode ser, por si só, um bom negócio.
266
CAPÍTULO 13: DIVERSÃO COM IMAGENS USANDO SCRIPTS E SISTEMAS EXTERNOS Por fim, gostaria de falar um pouco sobre o uso de soluções de galeria externas ao WordPress, como um software de galeria autônomo. Há inúmeros scripts de galeria disponíveis, e alguns deles são, em si, sistemas completos, enquanto outros simplesmente convertem as imagens para diversos tamanhos e exibem o conteúdo em pastas físicas no seu servidor, como HTML. Recomendo que você pense muito bem antes de usar galerias de imagens externas, como por exemplo Gallery2. A principal preocupação por trás disso é a flexibilidade. O WordPress pode ser expandido com inúmeros plug-ins, e se as suas imagens fazem parte do WordPress, elas podem se beneficiar disso. No entanto, se você estiver executando suas imagens em um script externo e simplesmente exibindo-as em seu tema, não terá benefício algum. E o que acontece se o script externo de repente parar de funcionar ou entrar em conflito com sua instalação de WordPress? O mesmo se aplica também aos plug-ins que movem a funcionalidade de galeria do núcleo do WordPress para sua própria instalação. Isso pode significar que eles podem adicionar novos recursos, melhor classificação, ou o que for, mas significa também que, quando o plug-in deixar de receber manutenção e parar de funcionar por conta de uma funcionalidade abandonada de WordPress ou outros conflitos, você vai estar sozinho, algo que não aconteceria se não tivesse optado por uma solução externa. Além disso, no lugar da funcionalidade de galeria oferecida pelo plug-in que você estava considerando, por que não sair em busca de algo que adicione isso aos recursos já incluídos na galeria de imagens? Dito isso, às vezes você precisa fazer mais, e nesses casos vai precisar extrapolar os recursos do núcleo do WordPress, seja usando plug-ins ou sistemas e/ou serviços externos. Apenas certifique-se de que você sabe o que está fazendo, e tenha a certeza de que você sabe o que fazer se precisar retornar para a configuração anterior, ou usar algo diferente. As ferramentas de conversão e importação podem ajudá-lo a ter maior segurança nesses casos.
RANDOMIZANDO ELEMENTOS DE IMAGENS Configurar seu site para exibir aleatoriamente suas imagens e outros elementos pode apimentar as coisas e dar mais vida ao seu site. Na blogosfera, é comum ver imagens de cabeçalho randômicas, ou aleatórias, assim como promoção de postagens aleatórias. Afinal de contas, elementos que mudam sutilmente a cada nova visita (sem comprometer a capacidade de navegação do visitante) são, em geral, vistos como algo mais interessante do que uma exibição estática. A forma mais básica de randomização utiliza PHP e qualquer uma das funções de randomização que a linguagem oferece, como rand() e mt_rand(), por exemplo. Além disso, há diversas soluções de JavaScript que você pode utilizar. Soluções para ambas as técnicas estão disponíveis na Web, para que você não precise desperdiçar tempo modificando sua própria solução a não ser que isso seja realmente necessário. Mas a coisa não para por aí. Também há diversos plug-ins que podem ajudar, e alguns deles são abordados no Capítulo 9. O conteúdo randomizado, especialmente as imagens, se tornou tão comum que é ridiculamente fácil implementar esse recurso. A não ser, é claro, que você queira exibir imagens randomizadas a partir de postagens que foram subidas por você. Por algum motivo, isso é mais difícil. 267
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS EXIBINDO IMAGENS ALEATÓRIAS A PARTIR DE SUAS GALERIAS Uma forma de conteúdo de imagem randômico ainda mais legal vem das suas galerias: as imagens que você já subiu para o WordPress. Essas imagens são anexos, e você pode chegar a elas modificando get_post() em um loop adicional. A ideia é exibir a miniatura de qualquer anexo que seja uma imagem, e criar um link para essa imagem. Uma vez que você já aplicou um estilo adequado às suas galerias (como aprendeu na seção anterior), você sabe que o visitante pode continuar clicando e apreciando suas fotos (ou o que for) a partir dali, por isso essa parece ser uma boa forma de capturar a atenção dos leitores. Este código mostra como fazer isso, neste caso gerando uma saída para tudo, em uma lista não ordenada, que parece a solução mais adequada.
have_posts()) : $new_query->the_post(); ?> $args = array(
'post_type' => 'attachment', 'numberposts' => 1, 'orderby' => rand,
'status' => 'publish',
'post_mime_type' => 'image', );
'parent' => $post->ID
$attachments = get_posts($args); if ($attachments) {
foreach ($attachments as $attachment) {
echo '- ';
'; }
echo wp_get_attachment_link($attachment->ID, 'thumbnail', true, ''); echo '
}
?>
As duas primeiras linhas servem simplesmente para criar o novo loop de WordPress e limitar o número de postagens que entram no loop. Em seguida, temos um array que pertence à função $args. Essa é uma utilização relativamente comum no WordPress; ela facilita a passagem de todos os parâmetros e seu armazenamento em uma função. Os parâmetros pertencem a get_posts(), que irá controlar a saída, de fato. Vamos falar disso em breve. O array $args deve ser relativamente autoexplicativo, com classificação pelo post type do anexo, exibindo apenas um anexo por postagem (caso contrário, você teria várias imagens em vez de uma só), randomizando a ordem e usando apenas postagens publicadas, limitando as coisas ao tipo MIME 'image'. (Esse valor poderia facilmente ser limitado a 'video', por exemplo, portanto é possível usar o método para vídeos também.) Por fim, você anexa a ID da postagem mãe, como boa prática; isso não é realmente necessário, mas pode ser útil em outros casos, por isso deixei o código ali como informação. 268
CAPÍTULO 13: DIVERSÃO COM IMAGENS Assim, você tem todas as informações do array armazenadas em $args, e agora vai carregar get_posts() com esse array. Para fazer isso, você usa a linha a seguir. $attachments = get_posts($args);
Agora, get_posts() com todos os parâmetros de $args é inteiramente armazenada em $attachments, que você pode usar no loop foreach. Ali, você encontra a seguinte linha, que é o que controla a forma como os anexos serão exibidos: echo wp_get_attachment_link($attachment->ID, 'thumbnail', true, '');
A template tag wp_get_attachment_link() gera o anexo relevante por padrão. Aqui, você está informando a ID de foreach e, então, informando ao loop que ele deve exibir a miniatura e não a imagem em tamanho original (que é o padrão). O valor true passado depois disso informa se a saída deve incluir um link para a página de anexo, e uma vez que essa é a ideia aqui, esse valor precisa ser passado. Por fim, o último parâmetro determina se um ícone de mídia deve ou não ser exibido, e o valor padrão é false, por isso você não precisa passar esse parâmetro. Colocar o trecho de código acima em uma barra lateral vai resultar em uma lista de miniaturas randomizadas com links para suas respectivas páginas de anexo.
MAIS OPÇÕES DE IMAGENS RANDOMIZADAS Isso tudo ainda não é o suficiente? Então sua melhor opção é recorrer ao maravilhoso mundo dos sites de compartilhamento de imagens e seus diversos widgets e códigos de integração (embed), além da infinidade de plug-ins disponíveis (consulte a seção “Aproveitamento Máximo dos Serviços de Compartilhamento de Imagens”, mais adiante neste capítulo, para obter mais detalhes). A combinação desses dois recursos é geralmente uma boa receita para obter bons blocos de imagens que exibem suas obras de arte mais recentes (ou apenas as fotos de suas férias), por isso mergulhe nessas opções para explorar o mundo das imagens. Você vai encontrar uma porção de plug-ins e sugestões no Capítulo 9, caso ainda não tenha consultado esse capítulo. Mas é importante ressaltar a importância do cuidado com a poluição e com a demora no carregamento. A inclusão de serviços de terceiros aumenta o tempo de carregamento, principalmente quando exibem imagens, que podem ou não ter sido adequadamente comprimidas para a Web. Sei que é tentador inserir um widget bacana em Flash obtido em um site de compartilhamento de fotos, ou um plug-in em Ajax-y que exibe suas melhores fotos em uma apresentação de slides infinita, mas tome cuidado. Outra consideração é determinar se você realmente precisa do bloco de imagens. O simples fato de ter acesso a um fluxo de imagens não significa que você tenha que usá-lo ou exibí-lo. O conteúdo das fotos é interessante para os visitantes? Caso contrário, esqueça o assunto e use aquele valioso espaço na tela para exibir outra coisa.
269
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS
Usos criativos de imagens de cabeçalho e destaques Dois tipos especiais de imagem podem ser usados de forma ainda mais criativa em seus projetos: a imagem do cabeçalho e a imagem em destaque. Como você sabe, a imagem do cabeçalho é muitas vezes usada como um cabeçalho de blog tradicional, mas não há nada no recurso que limite você nesse sentido. A imagem em destque é uma opção individual para cada postagem, que permite configurar uma imagem específica como símbolo da postagem. Esse recurso é frequentemente usado para imagens de manchete ou com objetivos similares. Mas você também pode fazer outras coisas com esses tipos de imagens! Aqui vão algumas ideias para ajudá-lo a começar. • Use a imagem do cabeçalho como mensagem sazonal. De uma forma quase tipicamente blogueira, a imagem do cabeçalho ou a imagem em destaque pode servir para exibir mensagens de boas festas ou coisas do tipo para seus visitantes. • Use a imagem do cabeçalho para dar ainda mais exposição à sua marca. Uma abordagem mais tradicional da ideia acima é usar a imagem do cabeçalho para dar mais exposição à sua marca, destacar um produto, convenção, serviço, pessoa, etc. • Use a imagem em destaque como fundo. Quem disse que a imagem em destaque precisa ser uma imagem tradicional de manchete? Use-a para criar um fundo para sua postagem, ao invés disso, melhorando a estratégia de sua marca. • Use a imagem em destaque como cabeçalho. Você sabia que o tema Twenty Ten pode substituir o cabeçalho personalizado por uma imagem em destaque (caso haja uma) quando você está lendo uma postagem? Esse conceito pode ser ainda mais refinado, dando à postagem seu próprio cabeçalho, como um site dentro do site.
APROVEITANDO AO MÁXIMO OS SERVIÇOS DE COMPARTILHAMENTO DE IMAGENS Para sites com limitações de hardware ou contas de hospedagem compartilhadas, pode ser essencial economizar espaço e largura de banda, e o que pode ser melhor do que hospedar vídeos no YouTube e imagens no Flickr? O mesmo se aplica a sites maiores que não geram muito retorno financeiro, mas em geral esses sites podem se dar ao luxo de obter soluções personalizadas como dados armazenados na nuvem ou arquivos estáticos nos servidores. Exibir as imagens a partir de qualquer site de compartilhamento de fotos é uma forma garantida de economizar largura de banda e armazenamento, sobretudo se o site em questão publica muitas imagens. Um bom exemplo disso seria um site especializado em jogos eletrônicos, cheio de capturas de tela, tipicamente acima de 700KB por imagem; além disso, com as telas maiores e resoluções HD, há ainda a necessidade de compartilhar as imagens nessa resolução. Digamos que você crie duas galerias de capturas de tela por dia, cada uma contendo 10 imagens. Isso soma 140 imagens por semana, ou 560 por mês. Com cerca de 700 KB por imagem, isso gera um grande volume, que ultrapassa 380 MB por mês. Você não precisa ser matemático para entender que um site assim requer muitos megabytes em largura de banda e armazenamento a longo prazo. É por isso que os sites de compartilhamento de imagens são interessantes. Guardando as imagens no Flickr, você não precisa se preocupar com essas coisas, pois sua largura de banda vai ser coberta pelo Flickr. Pode ser um certo exagero sugerir que um grande site especializado em jogos eletrônicos rode sua biblioteca de imagens no Flickr, mas a mesma matemática se aplica a um site de fotografia, por exemplo. 270
CAPÍTULO 13: DIVERSÃO COM IMAGENS É possível economizar dinheiro com isso, aplicando o “golpe do YouTube” também para suas imagens. Afinal, poucos sites hospedam seus próprios vídeos hoje em dia. Em vez disso, eles usam vídeos integrados a partir de serviços como YouTube ou Vimeo, então por que não fazer o mesmo com as imagens? É claro que isso tem suas desvantagens, mas a mais importante delas é o fato de que, se o seu serviço de hospedagem de imagens sair do mercado, você perde todas as suas imagens. Você pode resolver isso facilmente, se tiver cópias de segurança, é claro, mas seria necessário reinserir as imagens manualmente. Por outro lado, esses serviços são quase sempre players grandes, e se você optar por um desses, ele provavelmente tem poucas chances de ir à falência. Se você pode confiar no YouTube, provavelmente pode confiar em um serviço como o Flickr. Outro problema é o tempo de carregamento. Se o seu serviço de hospedagem de imagens estiver com problemas para exibir as imagens, por qualquer motivo, seu site será afetado. Em longo prazo, acredito que as imagens são mais próximas daquilo que gosto de chamar de “conteúdo direto” do que os vídeos, e por isso minha tendência é armazená-las e disponibilizá-las localmente sempre que possível. Se eu realmente precisar disponibilizar essas imagens a partir de outro local para manter um site no ar, considero a possibilidade de usar um servidor de arquivos ou soluções de nuvem, antes de acabar totalmente dependente de um serviço de terceiros. No entanto, isso não significa que eu não pense em terceirizar, e como usuário fiel do Flickr, eventualmente utilizo o serviço para hospedar imagens. Trata-se de uma solução conveniente, que economiza tempo, largura de banda e espaço. Apesar de tudo o que eu disse até aqui, é difícil argumentar contra esse fato.
PUBLICANDO A PARTIR DO FLICKR O Flickr (http://flickr.com) é provavelmente o site de compartilhamento de imagens mais popular que existe. Ele permite que você faça o upload de fotos gratuitamente, até um certo limite, e se você quiser fazer o upload de ainda mais fotos, pode adquirir uma conta pro. O Flickr também funciona bem com blogs, e você pode até mesmo compartilhar suas fotos do Flickr (assim como as de outras pessoas) diretamente em seu blog. Você pode fazer isso nas configurações da conta. O WordPress é apenas uma das muitas plataformas de blogs nas quais o Flickr permite que você compartilhe suas fotos. Siga os passos a seguir para compartilhar fotos em seu blog usando o Flickr. 1. Faça login no Flickr e vá até a página Your Account (Sua Conta). 2. Clique na guia Sharing & Extending (Compartilhamento e Expansão) e, em seguida, clique sobre o link “edit” à direita de your blogs (seus blogs), para editar as configurações (Ver Figura 13-3.). 3. Adicione seu blog de WordPress, preenchendo os detalhes (ver Figura 13-4). Você vai precisar ativar a publicação por XML-RPC na interface de admin do seu blog, em Settings → Writing. O endereço que você deve usar para o Flickr é a URL de xmlrpc.php, localizado na raiz de sua instalação de WordPress. 4. Use o guia e não deixe de escolher (e possivelmente editar) um layout padrão para as postagens que você publicará a partir do Flickr.
271
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS Pronto. Agora, você pode enviar fotos do Flickr diretamente para seu blog. Encontre a foto que você quer enviar, clique em Share This Link (Compartilhe Este Link) que aparece no topo da página, à direita, ao visualizar a imagem e, em seguida, selecione seu blog na aba Blog It. Infelizmente, você não pode compartilhar todas as fotos do Flickr assim; tudo depende da licença do proprietário do conteúdo, e algumas licenças não permitem compartilhamento.
Figura 13-3: O link de edição à direita dos blogs listados
Figura 13-4: Adicione os detalhes do seu blog de WordPress
272
CAPÍTULO 13: DIVERSÃO COM IMAGENS O Flickr é uma ferramenta muito utilizada não apenas para publicar imagens, mas também para economizar tráfego. Disponibilizando as imagens a partir do Flickr, você não corre o risco de sobrecarregar seu próprio servidor. É claro que isso funciona para os dois lados, pois se o Flickr sair do ar (ou do mercado), suas imagens também sairão, por isso não deixe de fazer cópias de segurança de todo o seu conteúdo.
USANDO O SLIDESHOW DO FLICKR Se você é um usuário fiel do Flickr, pode achar interessante a ideia de integrar uma apresentação de slides a partir do Flickr. Basicamente, isso consiste em um pequeno widget em Flash que você pode colocar onde quiser, dentro do seu site; é possível até mesmo alterar suas dimensões. Você pode obter uma apresentação de slides a partir de qualquer material que esteja agrupado no Flickr, sejam todas as fotos de um usuário ou apenas um álbum. Naturalmente, a apresentação de slides incluirá apenas fotos públicas. É fácil acrescentar um slideshow. Basta encontrar o álbum ou coleção de fotos que você quer exibir e clicar sobre o link Slideshow, no topo da página, à direita (ver Figura 13-5), ao lado de Share This Link. Caso o link Share This Link esteja presente, você pode criar um slideshow a partir do conteúdo; caso contrário, não pode – é simples assim.
Figura 13-5: Pode ser difícil enxergar o link Slideshow, mas normalmente ele vai estar aqui
Clicar no link Slideshow irá iniciar a apresentação de slides (ver Figura 13-6). Clique em Share, no topo da página, à direita e, então, clique sobre o link Customize HTML, abaixo do código de embed. Isso irá exibir uma nova janela, na qual você pode configurar a largura e altura desejadas ou selecionar a largura e altura predefinidas. Copie o código de embed e cole-o onde quiser. 273
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS
Figura 13-6: Copie o código de embed a partir da página personalizada, e não a partir do Slideshow, para ter mais opções
Então, quando pode ser útil usar uma apresentação com slides do Flickr? Os sites podem usar esse recurso como uma segurança, quando precisarem da ajuda do Flickr para controlar o tráfego, mas em outros casos eu diria que sua melhor opção é criar galerias bacanas. No entanto, o slideshow é interessante como uma expansão para todo o resto; é como colocar uma caixa na coluna lateral exibindo suas últimas peripécias. Fora isso, a apresentação de slides do Flickr é uma novidade. Para aproveitar ao máximo o que o Flickr tem para oferecer, além da disponibilização de imagens estáticas, você vai precisar pesquisar um pouco mais. Há uma API com a qual você pode brincar (www.flickr.com/ services/api/) e os inúmeros plug-ins disponíveis variam muito entre si, dependendo do que você quer e precisa fazer com o serviço.
CUIDADO COM A POLUIÇÃO Imagens são uma forma excelente de dar mais personalidade a um site, sobretudo quando você usa serviços como Flickr e instala widgets bacanas para exibir suas fotos mais recentes ou exibir suas imagens de outras formas. Seus visitantes vão gostar dos elementos dinâmicos que você adicionar, e todos eles agregam valor à experiência. Ao menos esse é o aproveitamento ideal. Na videa real, grande parte desse tipo de recurso acaba sendo sinônimo de poluição e perturbação do design. O que estou tentando dizer é que você precisa ter certeza de que vai usar essas ferramentas para o bem, não importando se for um elemento de imagens aleatórias ou suas últimas atualizações do Flickr. Tudo no seu site deve fazer sentido, assim como todos os elementos do bom design.
274
14
FUNCIONALIDADES ADICIONAIS
HÁ MUITAS COISAS que você pode fazer com WordPress. Este capítulo é dedicado a algumas funcionalidades bacanas que você pode querer usar em um projeto ou site. Vamos falar de caixas com abas, formulários de login, coisas que você pode fazer com feeds RSS – como criar versões para impressão de seu site de WordPress – e coisas do tipo. Muitos dos elementos descritos aqui podem ser usados em uma infinidade de formas; uma vez que cada site é diferente, sua solução pode acabar sendo muito diferente das ideias apresentadas aqui.
Para cada elemento descrito, explico também quando é uma boa ideia usar a técnica em questão e quando o melhor é simplesmente esquecer o assunto. Entre a expansibilidade dos plug-ins e os diversos recursos que você pode incluir em seu tema, há uma infinidade de opções, e é muito fácil acabar poluindo um site com uma porção de coisas desnecessárias. Antes de acrescentar algo, você deve questionar se o elemento é necessário, mesmo que às vezes seja difícil resistir a alguns recursos bacanas.
CAPÍTULO 14
SMASHING WORDPRESS
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS
CAIXAS COM ABAS Caixas com abas (do inglês, “tabbed boxes”) são uma excelente forma de economizar espaço de tela. Em blogs e sites dinâmicos e vivos, as caixas com abas podem ser usadas para exibir postagens populares, comentários recentes e outros elementos que podem ser agrupados de forma natural. O segredo é certificar-se de que o conteúdo das abas que não é exibido por padrão não precise estar sempre visível. Na verdade, essa é a principal questão na hora de trabalhar com caixas com abas: garantir que você não esteja ocultando algo crucial em uma aba. Tecnicamente, as caixas com abas não são difíceis de criar ou de gerenciar. Algumas delas podem sequer ter a aparência de uma caixa com guias; trata-de de um tipo de funcionalidade, mais do que qualquer outra coisa.
UTILIZAÇÃO INTELIGENTE Criar a funcionalidade de caixa com abas, em si, é relativamente fácil, e há uma infinidade de scripts disponíveis, caso você não queira criar um. O código no exemplo a seguir é suficientemente simples na maioria dos casos, mas ele também funcionaria bem com alguns elementos decorativos. Afinal, se você já decidiu utilizar uma caixa com abas, por que não deixá-la mais atraente e fazê-la se adaptar ao seu design? O código a seguir depende da biblioteca de JavaScript Prototype, por isso você deve carregá-lo com wp_enqueue_script(). Consulte a seção que trata de JavaScript, no Capítulo 12, para obter instruções mais detalhadas. Neste exemplo, parto do princípio de que a biblioteca Prototype já foi carregada. Aqui está a parte que precisa ser incluída na seção head de header.php: <script> // Função para visualizar aba function viewTab(tabId) { //Obter todos os elementos filhos de "contents-container" var elements = $('contents-container').childElements(); // Fazer loop em todos eles for (var i=0, end=elements.length; i
276
CAPÍTULO 14: FUNCIONALIDADES ADICIONAIS Talvez você queira incluir isso em seu próprio arquivo. Seguindo adiante, aqui está a marcação básica para a caixa com abas:
Conteúdo da aba de itens recentes.
Conteúdo da aba de itens populares.
Conteúdo da aba de cometários.
Você precisará aplicar estilos para criar o tipo de caixa que deseja, que pode não ser uma caixa com abas, e sim algo totalmente diferente. O segredo é que os links da lista de itens abrem um container div com o conteúdo da aba (ou qualquer outra coisa) em questão. Você poderia parar por aqui, incluindo o código necessário para postagens recentes (Recent) e populares (Popular), além dos comentários mais recentes, em seus respectivos div. Sem problemas. Porém, se quiser facilitar um pouco o gerenciamento, você pode criar uma área para widgets destinada ao div de cada aba, o que lhe daria a liberdade de trocar facilmente uma funcionalidade corrompida por um novo plug-in à sua escolha. Se você quiser adotar esse método, vai precisar recorrer um pouco aos widgets. Primeiramente, temos a parte de registro que vai em functions.php: register_sidebar(array('name'=>'Postagens Recentes')); register_sidebar(array('name'=>'Postagens Populares')); register_sidebar(array('name'=>'Comentários Recentes'));
Então, temos as áreas para widgets, de fato, que naturalmente serão colocadas no respectivo div de cada uma:
277
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS
Agora, você pode simplesmente soltar o conteúdo de cada aba na área para widgets à sua escolha a partir da interface de admin do WordPress, como faria com widgets de rodapé ou da barra lateral. A Figura 14-1 mostra a aparência que uma caixa com abas pode ter, com algumas alterações mínimas em relação ao código acima.
COM OU SEM ABAS? Então, você deve ou não usar uma caixa com abas? No fim das contas, o que importa é o tipo de conteúdo com o qual você está lidando. O mais importante é que você certifique-se de que a utilização é intuitiva e óbvia para todos os tipos possíveis de usuários. O conteúdo que você Figura 14-1: Caixas com abas podem ajudar na oculta nas abas não pode ser crucial, uma vez organização e navegação que o visitante pode não ser do tipo que sai clicando nas coisas. Além disso, o conteúdo das abas pode acabar não sendo visto quando você tem um visitante acidental que olha brevemente para o site e então decide se vai ficar e explorar o conteúdo ou se prefere ir para outro lugar. Você não pode ocultar seu melhor 278
CAPÍTULO 14: FUNCIONALIDADES ADICIONAIS conteúdo em abas, assim como não deve criar um menu ou caixa de busca que sejam complicados demais para usar. Dito isso, para muitos sites, o uso de caixas com abas pode fazer sentido. Tudo depende de quanto espaço você quer desocupar para listagens de conteúdo, atividade, etc. Por exemplo, existe alguma razão pela qual sua lista de blogs precise estar sempre visível? Por que não colocar todos os links em uma caixa com abas, com uma aba para seus perfis em redes sociais, outra para os sites de amigos, etc. Isso ocupa bem menos espaço, e qualquer pessoa que estiver interessada em mergulhar mais fundo em sua presença on-line ou nos amigos e parceiros de um site pode facilmente recorrer ao uso da caixa com abas. É bem possível que esse mesmo usuário perceba a caixa com abas como uma vantagem quando ela não for seu foco de atenção, uma vez que a economia de espaço simplifica muito a usabilidade de seu site. Em geral, você deve usar com cautela as caixas com abas, e o mesmo vale para os menus com abas. Trata-se de um clique adicional, e isso pode ser irritante para o visitante. Dito isso, não é muito bonito poluir seu site com listas e funções que raramente são usadas, por isso tome uma decisão informada.
EXIBINDO FEEDS RSS Os feeds RSS são realmente úteis, não apenas para assinar atualizações usando um leitor de feeds, mas também para exibir conteúdo de parceiros ou de outros projetos que você esteja publicando na Web. Você provavelmente já conhece o widget de feed RSS incluído no WordPress; ele é capaz de exibir atualizações a partir de qualquer feed RSS que funcione. Quando você quer trabalhar com feeds em seu site, não precisa se limitar apenas a esse widget, ou mesmo aos plug-ins disponíveis. Na verdade, você pode acessar diretamente o parser de feeds e fazer mais coisas personalizadas com a saída do feed. Se você quiser controlar a descrição, isso é possível, assim como é possível adicionar código HTML ao redor dos diversos elementos para obter maior controle, e assim por diante. Se você quiser fazer coisas mais avançadas com o conteúdo de um feed RSS, precisa usar um plug-in ou programar você mesmo o código usando a funcionalidade integrada (que, casualmente, é muitas vezes o que aquele plug-in que você estava considerando usar faz). No entanto, você deve levar em consideração o fato de que a exibição de feeds RSS pode deixar seu site mais lento. Se você estiver obtendo as últimas atualizações a partir de vários sites (ou mesmo um só), eventualmente seu site vai ficar mais lento. Isso acontece porque o seu servidor está fazendo uma consulta de feed para o servidor do feed, e é necessário recolher e executar o parsing de todos os dados com PHP para conseguir gerar a saída que você deseja. Isso se aplica tanto à busca de RSS com hardcode quanto aos widgets que você coloca em seu site para exibir os feeds. Se você depende de uma grande quantidade de conteúdo obtida a partir de feeds, é uma boa ideia se informar sobre soluções de cache para que o carregamento do seu site seja o mais rápido possível. Na verdade, o ideal é deixar que o servidor execute uma tarefa agendada em intervalos regulares, armazenando em cache o conteúdo para ser exibido quando necessário. Existe suporte para cache, mas no que diz respeito a agendar a busca do conteúdo, você está sozinho. Provavelmente, isso significaria desenvolver seu próprio plug-in, ou encontrar um que faça o trabalho por você. 279
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS Portanto, os feeds são, de fato, muito úteis, mas se você navegar na blogosfera (principalmente) e prestar atenção ao que torna os sites mais lentos, vai perceber que os feeds estão entre os principais culpados, juntamente com outras funcionalidades que exibem conteúdo a partir de serviços externos (selos ou anúncios, por exemplo). Em suma: cuidado para não “entupir” seu site de conteúdo obtido a partir de feeds RSS.
O PARSER INTEGRADO O WordPress oferece suporte integrado à exibição de conteúdo de feeds RSS em seu site. Você pode usar o widget de feeds (do qual falaremos mais adiante), mas provavelmente vai precisar de um controle maior. Por sorte, é fácil conseguir esse controle, graças à adição do SimplePie ao núcleo. Sim, há um novo parser de feeds no WordPress a partir da versão 2.8, ou seja, embora suas velhas chamadas wp_rss() ainda possam funcionar, elas estão desatualizadas e devem ser substituídas por algo mais atualizado, a saber, fetch_feed(). Isso pode parecer um tanto intimidante quando você mergulhar pela primeira vez na documentação do SimplePie. No entanto, a coisa não é tão complicada assim. Eis uma inclusão simples das últimas manchetes, com links obtidos a partir do meu lifestream em http://stream.tdh.me:
Lifestream
get_items() as $item){
printf('- %s
', $item->get_permalink(),
?>
$item->get_title());
}
Incluindo um feed dessa forma, estou abrindo o feed para as funções do SimplePie. Estou basicamente criando um loop do feed aqui, e imprimindo esse loop, buscando os dados à medida que eles são necessários. Neste caso, estou simplesmente exibindo o link permanente e o título de cada postagem. Você pode expandir isso adicionando uma descrição e a data:
Lifestream
get_title());
foreach ($feed->get_items() as $item){
printf('- %s
', $item->get_permalink(), $item->get_title());
printf('%s
', $item->get_description());
?>
}
printf('%s
', $item->get_date('j F Y at g:i a'));
280
CAPÍTULO 14: FUNCIONALIDADES ADICIONAIS O SimplePie, por si só, poderia ser o tema de um livro inteiro. Tudo o que você precisa saber está disponível na documentação do SimplePie, que infelizmente não é inteiramente compatível com WordPress, uma vez que trata-se de um parser de RSS autônomo, na verdade. Dito isso, você deve dar uma olhada neste link: http://simplepie.org/wiki/ reference/. Logo mais, voltaremos a falar do SimplePie. Mas antes disso, vamos falar um pouco sobre a solução de widget integrada.
QUANDO USAR A SOLUÇÃO DE WIDGET Então, quando você deve usar o widget de RSS padrão que vem integrado à plataforma? A resposta é simples: nunca! Isso pode soar um tanto radical, sobretudo porque o que o widget realmente faz é a mesma coisa que você fez na seção anterior usando fetch_feed(). Isso mesmo, o widget chama o SimplePie da mesma forma. O problema é que ele também inclui um cabeçalho de feeds, com link para a URL do feed e tudo o mais. Isso não é uma ideia tão boa, não é verdade? Se você quer exibir as últimas atualizações de seu blog, de um site de notícias, do Twitter, ou do que for, não vai querer incluir um link para o feed RSS, em si, no topo da listagem! Talvez você queira incluir um link para o site, em si, mas não para o feed. Espero que isso seja alterado pelo WordPress no futuro, mas as coisas funcionam assim já há um bom tempo. Então quer dizer que você nunca deve usar um widget de feeds? Talvez isso seja um exagero, porque outras pessoas perceberam esse problema e lançaram plug-ins que remediam a situação. Consulte o Capítulo 9 para ver algumas recomendações de plug-ins de RSS bacanas que podem oferecer a solução que você precisa. Na verdade, modificar você mesmo o código de parsing de RSS deve ser a última alternativa, a não ser que você realmente precise fazê-lo. É preferível adicionar uma área para widgets e então adicionar a ela o widget de feeds adequado. Isso signifi ca que você pode facilmente adicionar coisas ao redor, mas naturalmente vai ter maior controle se programar, você mesmo, a coisa toda. Como sempre, escolha a solução que se adapta melhor ao seu projeto.
MÚLTIPLOS FEEDS COM SIMPLEPIE Com a adição do SimplePie você pode criar múltiplos feeds, e não estou me referindo à capacidade de exibir diversos blocos de feed na mesma página. Estou falando da capacidade de reunir uma porção de feeds e combinar todos eles para apresentar o conteúdo. No SimplePie, essa funcionalidade muitas vezes é chamada de multifeeds (essa informação será muito útil quando você estiver buscando soluções na documentação do SimplePie). No exemplo a seguir, realizo um teste rápido usando o SimplePie para listar o conteúdo de dois feeds de acordo com a data, mas limitando a saída a apenas 10 itens.
281
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS
- enable_order_by_date(true); foreach ($feed->get_items(0, 10) as $item){ printf('
Manchetes Interessantes
- %s
', $item->get_permalink(), $item->get_title()); printf('%s
', $item->get_date('j F Y at g:i a')); } ?>
Você está definindo os dois feeds em um array dentro de fetch_feed() em vez de simplesmente colocar a URL do feed individual, como fez quando queria exibir apenas um único feed. Você pode acrescentar vários feeds a esse array, se quiser. Depois disso, adicionamos uma configuração order_by_date para organizar os itens por data, retirada da documentação do SimplePie: $feed->enable_order_by_date(true);
Você poderia fazer isso também para o exemplo com um único feed, mas se estiver exibindo um único feed, provavelmente o item mais recente será exibido no topo por padrão, então isso seria um tanto redundante. Depois disso, há o loop foreach novamente, começando pelo primeiro item (0) e seguindo até o décimo (10), e depois disso o loop é encerrado e você terá 10 itens. Repito que o SimplePie é imenso, mas esse é um bom começo. No momento da escrita deste livro, a seção de ajuda no Codex do WordPress tem relativamente pouco conteúdo, considerando-se que o recurso fetch_feed() foi adicionado na versão 2.8, mas tenho certeza de que, à medida que o tempo passa, mais artigos e exemplos serão incluídos. Enquanto isso, use a documentação do SimplePie para ver o que você pode fazer com esse parser de RSS.
ENVIANDO E-MAIL COM WORDPRESS Se você quiser que o WordPress envie e-mails por você, pode usar a função wp_mail(). Pode ser qualquer coisa, desde uma verificação para confirmar que alguma ação foi executada (ou não) em seu site, até uma lista de notificação completa para mensagens de “Meu blog foi atualizado!”. A função wp_mail() é relativamente fácil de usar. Partindo do pressuposto que você ativaria o código abaixo com alguma função, ele enviaria um e-mail para [email protected] com o assunto “Smashing Party!” (algo como “Ótima Festa!”) e o conteúdo (em formato de texto) “Thanks for the smashing party the other night. TTFN!” (algo como “Obrigado pela excelente festa na noite passada. Até logo!”). A Figura 14-2 exibe o resultado disso.
282
CAPÍTULO 14: FUNCIONALIDADES ADICIONAIS Você pode até mesmo anexar arquivos e enviar e-mails em HTML em vez de usar o padrão de texto simples. Você pode aprender mais sobre o assunto no Codex em http://codex. wordpress.org/Function_Reference/wp_mail. Como sempre, é importante observar algumas regras na hora de enviar e-mails a partir de páginas da Web: Não envie spam. Fica feio para você e
todo mundo sai perdendo. Cuidado com o excesso de e-mails. Isso
pode fazer você entrar em alguma lista negra. Certifique-se de que o seu código funciona. Afinal, qualquer problema pode enviar centenas de mensagens duplicadas, abusando da capacidade do seu servidor e criando todo tipo de problemas para você. Evite riscos de segurança. Certifique-se de que uma pessoa mal-intencionada não vá conseguir enviar spam por meio de sua solução de e-mail. Pode ser qualquer coisa, desde enviar uma quantidade absurda de e-mails, até simplesmente irritar todo mundo clicando mil vezes no botão “Enviar”. Avise todo mundo. Os usuários gostam de saber o que está acontecendo, sobretudo quando seus endereços de e-mail estão envolvidos. Em outras palavras, não deixe de explicar como você vai usar os endereços de e-mail de seus usuários e o que eles podem esperar de você. Em se tratando de e-mails, o melhor é não ter surpresas.
ADICIONANDO UM FORMULÁRIO DE LOGIN
Figura 14-2: Um e-mail simples enviado a partir do WordPress
Figura 14-3: Formulário de login simples
Às vezes, pode ser prudente ter um formulário de login do WordPress (Figura 14-3) um pouco mais à mão, além de simplesmente acessar o formulário em sua própria página, conforme o padrão (em wp-login.php, a partir de sua instalação de WordPress). Se o seu site depende de recursos que exigem login, naturalmente não há problema em adicionar um formulário de login, digamos, no cabeçalho ou na barra lateral.
283
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS O exemplo a seguir parte do pressuposto de que você quer colocar seu formulário de login na barra lateral, o que em geral é feito usando uma ul, por isso o código seria colocado em uma li separada. No entanto, talvez você queira que ele apareça no cabeçalho e não na barra lateral e, nesse caso, você provavelmente deve colocar o código dentro de um div para poder aplicar o estilo adequadamente. Para criar um formulário de login, você só precisa de wp_login_form().Login
Esqueceu sua senha? /wplogin.php?action=lostpassword">Recuperar senha
Admin
O que você tem aqui é uma cláusula if que realiza uma verificação, primeiramente, para determinar se você já fez login, ou se é um usuário de level_0 (o nível de usuário mais baixo no WordPress) ou de um nível superior. Talvez você reconheça esse nível da interface de admin, como correspondendo ao papel de assinante (Subscriber), assim, você não pode fazer virtualmente coisa alguma. Leia mais sobre os papéis no Codex (http://codex.wordpress.org/Roles_ and_Capabilities) e lembre-se de que há 11 níveis de usuário, o mais baixo deles sendo o nível 0 e o mais alto sendo 10.
Assim, a primeira verificação determina basicamente se você fez login, e, caso contrário, o site irá exibir um formulário de login usando wp_login_form(). Há algumas configurações para as template tags de wp_login_form(), que determinam os rótulos que devem ser chamados e coisas do tipo. Essas configurações são relativamente simples, mas você pode aprender mais consultando o Codex em http://codex.wordpress.org/Function_ Reference/wp_login_form. Seguindo adiante, a cláusula else é o que é exibido quando o usuário já fez login. Nesse exemplo, eu gero uma lista com um link para o Dashboard em wp-admin, e outro link para escrever uma nova postagem, e por fim um link para sair. Isso pode ser um tanto redundante a não ser que você tenha desativado a barra de admin que aparece no topo do WordPress para usuários que fizeram 284
CAPÍTULO 14: FUNCIONALIDADES ADICIONAIS login. Além disso, você deve provavelmente incluir verificações para certificar-se de não incluir links para páginas de admin onde o usuário não poderá fazer nada, que é exatamente o que acabei de fazer. Afinal de contas, um usuário com privilégios de Subscriber (nível 0, lembra?) não pode escrever uma nova postagem, de modo que um link para a tela de postagem é inútil para ele. Seria prudente incluir uma verificação semelhante à primeira usando current_user_can(), ou talvez uma verificação mais longa usando a lógica if-else. Repito que esse exemplo serve apenas para mostrar o funcionamento básico do recurso. Lembre-se de não incluir formulários de login em seu design a não ser que eles sejam necessários. Afinal, por que exibir um formulário de login e provocar os mal-intencionados a tirar proveito de sua instalação de WordPress se você não precisa dele? Além disso, não há sentido exibir um formulário de login se o visitante não puder fazer nada com ele, e nesse caso trata-se de um desperdício de espaço de tela. Use os formulários de login quando eles forem importantes.
BLOGS PARA IMPRESSÃO Às vezes, os leitores preferem imprimir um artigo ou entrada de blog em papel, para ter mais conforto. Você deve facilitar a impressão de conteúdo se achar que seu site pode se beneficiar disso. Comece incluindo um link simples com o texto “Imprimir esta página”. Isso pode ser feito facilmente com um pouco de JavaScript, sem precisar personalizar coisa alguma ou usar bibliotecas de script. Imprimir esta página
Isso é tudo; o navegador tentará imprimir a página. É muito simples, mas talvez seu site não seja muito amigável para impressão, sobretudo se você tiver um grande cabeçalho e várias colunas. É por isso que você deve criar um CSS para impressão. Tecnicamente, você não precisa realmente adicionar outra folha de estilo, mas pode ser uma boa ideia separar o conteúdo exclusivo para impressão do conteúdo normal, para exibição na tela. Comece criando uma folha de estilo chamada print.css e examine seu tema para determinar o que deve ou não ser incluído. Provavelmente, a barra lateral e o rodapé serão desnecessários na hora da impressão, por isso remova ambos: #sidebar, #footer { display:none; }
Pronto! Esse exemplo parte do princípio de que sua barra lateral tem a ID #sidebar e de que o rodapé tem a ID #footer, e geralmente esse é o caso. Agora, certifique-se de que o conteúdo, em si, tenha uma aparência minimamente apresentável no papel: #content { width:100%; margin:0; padding:0; float:none; background: #fff; color: #222; } a:link, a:visited { color: #000; }
285
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS Para isso, use texto em preto, fundo em branco, largura total e exclua margens flutuantes e preenchimento. Eu também acrescentei um código para garantir que os links sejam exibidos em preto (não há necessidade para as pseudoclasses :active ou :hover, obviamente). Eu poderia ficar aqui para sempre falando sobre coisas que você pode incluir em seu CSS de impressão. Pode ser uma boa ideia certificar-se de que o título tenha uma aparência agradável, e talvez você não queira incluir aqueles 637 comentários de cada postagem na versão para impressão. Basta ocultar os elementos que você não quer que apareçam no papel e aplicar adequadamente seus estilos aos demais. É muito simples. Talvez você também queira configurar todos os tamanhos de fonte para pontos (pt) em vez de pixels ou em (eme), para usar uma linguagem que a impressora é capaz de compreender. A propósito, falando em impressão, talvez você possa adicionar estilos de quebras de página aos títulos e, possivelmente, a elementos como blocos de citação e listas. Tudo depende de como você quer apresentar seu site para impressão. Agora, só falta incluir o CSS em header.php:
Adicione o CSS abaixo do código padrão de inclusão na seção head do arquivo. Talvez você tenha percebido que optei por usar 'stylesheet_directory' em vez de 'template_ directory' na hora de passar a URL da folha de estilo. Essa é uma opção puramente semântica, uma vez que você provavelmente quer que todas as suas folhas de estilo fiquem no mesmo lugar, e dessa forma print.css deve estar no mesmo local que style.css. Há inúmeras soluções para facilitar o processo de impressão de suas páginas. Eu gosto bastante do Printfriendly (http://www.printfriendly.com) que permite que você adicione botões facilmente. Há também um plug-in que pode ser útil. Se você quiser economizar tempo, dê uma pesquisada no site do Printfriendly para obter mais informações, especialmente nesta página: http://www.printfriendly.com/ button.
E MUITO MAIS... Expandir um site com funcionalidades necessárias é uma etapa óbvia e natural no desenvolvimento de um site. Em se tratando de WordPress, expandir um site muitas vezes significa que você vai precisar exibir ou promover conteúdo de alguma forma, ou adicionar possibilidades de interação, como é o caso do formulário de login. Para completar, o último capítulo mostra mais coisas incomuns que você pode fazer usando WordPress. Afinal, ele pode fazer muito mais do que criar blogs e sites tradicionais. O Capítulo 15 trata de utilidades incomuns do WordPress, para encher sua mente de possibilidades para essa fantástica plataforma de publicação.
286
15
UTILIZAÇÕES INCOMUNS DO WORDPRESS
VOCÊ JÁ SABE que o WordPress é capaz de criar blogs e outros sites editoriais. Você pode usá-lo para sites estáticos ou sites do tipo revista e para qualquer situação em que seja necessário publicar texto, imagens ou diferentes tipos de conteúdo multimídia. Mas por que parar por aí? O WordPress pode ser usado para projetos ainda mais distantes de suas raízes blogueiras, como este capítulo irá mostrar. Com o WordPress, você pode construir sites que os desenvolvedores definitivamente não previam no início. Espero que as adaptações da plataforma
discutidas aqui ajudem você a ver o potencial pleno do sistema. Você vai ver como o WordPress pode ser usado para criar um quadro de vagas ou uma página de perguntas frequentes (FAQ) e/ou base de conhecimento, como usar o WordPress para comércio eletrônico, e muito mais. Além disso, há uma infinidade de coisas que você pode fazer com WordPress, e espero que este capítulo seja uma inspiração para que você coloque sua mente para funcionar e pense em mais coisas que podem ser feitas usando essa maravilhosa plataforma de publicação.
CAPÍTULO 15
SMASHING WORDPRESS
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS
TRABALHANDO COM CONTEÚDO ENVIADO PELOS USUÁRIOS Simplesmente porque o WordPress funciona muito bem como CMS para sites grandes e pequenos, não significa que você só possa usá-lo para isso. Você pode permitir que seus usuários enviem outros conteúdos além dos comentários, e fazer algo com esse material em paralelo ao seu conteúdo normal. Você pode separar o conteúdo enviado pelos usuários do restante, ou misturá-lo a qualquer que seja o tipo de conteúdo que você está produzindo. Tecnicamente, para isso você precisa que seus usuários se inscrevam para enviar conteúdo, usando os recursos padrão do WordPress. Um tema popular que traz essa função incluída é o P2, que pode ser encontrado em http://wordpress.org/extend/themes/p2 e é mostrado na Figura 15-1. Esse tema é inspirado no Twitter e é utilizado para comunicação interna em diversas empresas, inclusive na Automattic.
Figura 15-1: WPDevel, o blog oficial da equipe de desenvolvimento do WordPress, usa o tema P2
Para demonstrar apenas uma das diversas formas que você pode trabalhar com conteúdo enviado pelos usuários, o primeiro exemplo deste capítulo aplica o conceito a um quadro de vagas de emprego que você poderia hospedar em um site já existente (com alguns ajustes mínimos), ou simplesmente construir como projeto autônomo.
SOBRE O QUADRO DE VAGAS DE EMPREGO Você provavelmente já viu esse tipo de site, onde indivíduos e empresas podem publicar vagas de emprego ou currículos. Esse exemplo usa postagens de WordPress para armazenar cada oferta de emprego e para classificá-las de acordo com as principais categorias. Para descrever mais precisamente o emprego, vamos usar tags. Cada postagem é marcada com tags que indicam a empresa que publica a vaga, entre outras informações. 288
CAPÍTULO 15: UTILIZAÇÕES INCOMUNS DO WORDPRESS Até aqui tudo bem. Essa utilização é, na verdade, bem próxima do propósito inicial do WordPress, embora não seja um blog. O problema surge quando você quer permitir que os usuários publiquem, eles mesmos, as vagas, sem que você precise fazer isso pessoalmente. É verdade que, para isso, você poderia simplesmente dar um nome de usuário para cada usuário (e até mesmo exibir o formulário de inscrição), mas será que é uma boa ideia ter um monte de gente mexendo na interface de admin do WordPress? Eu diria que não. Essa não é uma solução muito limpa ou amigável para os usuários, já que o que eles querem é simplesmente preencher um formulário detalhando a vaga de emprego, enviá-lo e esperar pela aprovação da equipe do site. E é exatamente assim que esse exemplo funciona. Você emprega um plug-in para essa funcionalidade, que oferece uma página específica contendo o formulário em questão. Ao fim do processo, você terá um site em que os usuários podem publicar vagas de emprego por meio de um formulário, de modo que essas vagas serão armazenadas como postagens de WordPress para a aprovação da equipe do site. As vagas aprovadas (postagens publicadas) serão classificadas em categorias (dependendo do tipo de emprego) e marcadas com as tags adequadas. Esses dados serão obtidos, na medida do possível, a partir do formulário de envio, sem modificar plug-ins, de modo que qualquer coisa que não seja facilmente incluída precisará ser incluída manualmente. A ideia é construir esse quadro de vagas de forma rápida e rasteira, lançar o site com a ajuda do WordPress, e então continuar o desenvolvimento após o lançamento. É hora de começar.
O CONCEITO O código do design e do tema não é tão importante nesse projeto, por isso vamos ser diretos. Vamos simplesmente exibir as vagas em um fluxo de postagens. Você poderia separá-las em colunas, se quisesse, mas, por hora, apenas uma saída simples é o suficiente. Em termos de arquivos de modelo, o exemplo usa um loop específico para a página inicial (loop-home.php) e, naturalmente, um modelo de cabeçalho (header.php) e um de rodapé (footer.php), respectivamente. Além disso, é claro que você tem uma folha de estilo (style.css) para aplicar estilos específicos. Todas as listagens, de categorias a tags, podem ser gerenciadas a partir de um modelo index.php, uma vez que esse é o arquivo de fallback para tudo. Você pode até mesmo incluir o erro 404 em index.php, se quiser. Para acelerar o processo, você vai construir esse projeto sobre o Notes Blog, como um tema filho. É isso mesmo; você não vai precisar se preocupar com os fundamentos e pode mergulhar de cabeça na tarefa de uma vez. Acho que eu já devo ter mencionado que essa é justamente a beleza dos tema filhos, não é mesmo? Então, o que você vai construir? Um tema simples para um quadro de vagas, que irá exibir as últimas ofertas de emprego disponíveis, como mostra a Figura 15-2. Trata-se de um conceito, muito mais do que de um produto finalizado, obviamente, mas isso deve ser o suficiente para ajudar você a começar. 289
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS
Figura 15-2: Um quadro de vagas simples adicionado ao tema Notes Blog
Os modelos de Cabeçalho e Rodapé O arquivo header.php padrão do Notes Blog não suporta cabeçalhos personalizados no momento da escrita deste livro (embora provavelmente não vá demorar muito pra isso acontecer), por isso há boas chances de que você adicione seu próprio arquivo de modelo header.php ao tema, caso queira usar um. Nesse caso, porém, vou deixar isso de lado, para economizar espaço, e a essa altura tenho certeza de que você já tem condições de copiar e colar o código para criar seu próprio arquivo header.php. Quanto ao rodapé, você não fará alteração alguma a não ser possivelmente alguma alteração de estilo, usando style.css. O fato de que o rodapé Notes Blog possui quatro áreas para widgets por padrão significa que você pode exibir as últimas vagas usando plug-ins com suporte a widgets (usando o widget de texto, por exemplo) para promoções. No futuro, talvez você precise de um rodapé mais personalizado, mas esse é o suficiente, no momento.
Página Inicial Para facilitar as coisas, você cria loop-home.php para a página inicial, pois essa é a primeira coisa que o Notes Blog vai procurar. O modelo loop-home.php é relativamente simples. Adicione o parâmetro job-listing a post_class() para aplicar estilos personalizados. O loop não gera qualquer saída de conteúdo, apenas o título contendo o link para a vaga e alguns metadados que podem ser úteis nas listagens. Isso é basicamente tudo. O código ficará assim: max_num_pages > 1 ) : ?>← Older posts', 'notesblog' ) ); ?>→', 'notesblog' ) ); ?>
Lembre-se de que loop-home.php só vai ser usado quando alguém visitar a página inicial do site, por isso, se você quiser que as outras listagens tenham a mesma aparência e comportamento, vai precisar alterá-las também.
Visualização de Postagem Individual e Todas Aquelas Listagens Na visualização de postagem individual, as vagas provavelmente devem se parecer menos com uma postagem de blog e mais com uma oferta de emprego de verdade. Isso não é tão diferente assim de uma postagem de blog tradicional, mas esse é um lugar onde é uma boa ideia “desblogar” um pouco o jargão. Em outras palavras, elimine tudo que tiver uma terminologia “blogueira”, desde os comentários (a não ser que você queira essa funcionalidade) até os links 291
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS permanentes e rótulos de categorias. Crie uma página que se pareça com todo o resto e então acrescente alguns elementos adicionais, como os listados abaixo: Vagas relacionadas são uma expansão óbvia para qualquer oferta de emprego. Afinal,
você quer que as pessoas usem o site. Atualizações mais recentes para cada categoria específica também podem incentivar o visitante a mergulhar mais fundo no site. Tags podem, em si, parecer uma coisa tipicamente “blogueira”, por isso talvez seja uma boa ideia usar um nome diferente para elas. De qualquer forma, exibir as tags da oferta de emprego é uma forma de permitir que o visitante encontre mais vagas semelhantes, caso esteja interessado em uma tag específica. Informações de contato são, naturalmente, essenciais para qualquer oferta de emprego, por isso deve ser um campo obrigatório no formulário de envio de vaga. Além disso, destaque essa informação na postagem; em geral, um container com fundo diferente é o suficiente. Consulte o Capítulo 10 para saber mais sobre como fazer o WordPress se parecer menos com uma plataforma de blog e mais com um CMS. A mesma abordagem de “desblogamento” se aplica às outras listagens de seu site. Você provavelmente deve dar ao modelo archive.php uma aparência semelhante à da listagem de empregos da página inicial, por exemplo. Apenas lembre-se de que archive.php é um arquivo de fallback para todos os arquivos, por isso se você tiver outro tipo de conteúdo além de vagas de emprego em sua instalação, a melhor opção é trabalhar com os modelos específicos de cada categoria. Consulte o Capítulo 4 para saber mais sobre arquivos de modelo e sobre quais são carregados em que situação. A funcionalidade de busca pode ser um pouco complicada se você estiver misturando postagens de emprego com conteúdo tradicional. Há boas chances de que você queira usar algumas conditional tags para alterar a saída dependendo dos resultados, mas você pode resolver o problema simplesmente aplicando os estilos adequados em CSS. Lembre-se de que post_class() gera classes específicas para cada categoria, por isso, no mínimo, você poderia chegar aos resultados da busca específica dessa forma, separando as postagens de empregos do restante do conteúdo.
Finalmente, a folha de estilo A folha de estilo começa da mesma forma que começaria em qualquer outro tema, mas você verá que a referência a 'template' aponta para a pasta do Notes Blog, uma vez que esse é o seu modelo – afinal, trata-se de um tema filho. Você também vai começar com uma importação de CSS, uma vez que a folha de estilo do modelo é um bom ponto de partida. No entanto, isso é opcional. O restante é simples, e consiste principalmente em algumas alterações de estilo no CSS do Notes Blog. Duas coisas chamam atenção. Primeiramente, há div.job-listing que obviamente está conectado ao parâmetro job-listing, usado com post_class() em loop-home.php. Assim, podemos localizar o estilo com precisão sem precisar listar todas as categorias que são listagens de vagas e devem receber esse tratamento geral. Em segundo lugar, dentro do título Hack em style.css você vai encontrar um trecho de código referente ao plug-in TDO Mini Forms. Vamos falar disso em breve. Aqui está o arquivo style.css:
292
CAPÍTULO 15: UTILIZAÇÕES INCOMUNS DO WORDPRESS /* Theme Name: Notes Job Board (construído a partir do Notes Blog) Theme URL: http://notesblog.com/themes/blog/job-board/ Description: Notes Job Board é um tema filho usando Notes Blog. Version: 1.0 Tags: light, two-columns, right-sidebar, fixed-width, threaded-comments, sticky-post, translation-ready, custom-background, custom-menus Author: Thord Daniel Hedengren Author URL: http://tdh.me/ Template: notes-blog Get support and services for the Notes Blog theme: http://notesblog.com Created and managed by Thord Daniel Hedengren: http://tdh.me */ @import url('../notes-blog/style.css'); div#blog { border: 10px solid #0ad; } div#top-navigation { margin-bottom: 20px; border-color: #0ad; border-bottom-width: 10px; } a:link, a:active, a:visited { color: #0cf; } a:hover, div#header h1 a:hover, div.homecol h1 a:hover, h2:hover { color: #f90; } div.job-listing { padding: 10px; background: #effffe; border: 1px dotted #0ad; border-width: 1px 0; font-family: Helvetica, Arial, sans-serif; } span.meta-category-job { font-size: 11px; text-transform: uppercase; } span.meta-category-job a {color: #fff; padding: 5px 5px 4px 5px; background: #f90; text-decoration: none; } span.meta-category-job a:hover { background: #444;; } div.job-listing h2 { font-size: 18px; font-weight: bold; margin: 5px 0; } div.job-postmeta { font-size: 12px; text-transform: uppercase; color: #666; } div#copy { background: none; padding:0; } /* HACK */ li#tdomf-form-1 { padding: 10px; background: #666; color: #bfbfbf;: } li#tdomf-form-1 a { color: #fff !important; } li#tdomf-form-1 h2.widget-title { margin-bottom: 10px; color: #fff; } li#tdomf-form-1 form input#content-title-tf, li#tdomf-form-1 form textarea { width: 230px !important; }
293
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS Prontinho. Você acaba de construir um quadro de vagas básico! Agora, você precisa do conteúdo enviado pelos usuários, ou ao menos da funcionalidade necessária para que o quadro de vagas receba o conteúdo.
RECEBENDO AS VAGAS Há inúmeras formas de receber o conteúdo das listagens de vagas, de fato. A forma mais fácil de fazer isso seria fazer as pessoas enviarem as vagas para você por e-mail e então você mesmo adicionaria o conteúdo, mas isso seria chato e trabalhoso. O melhor é usar um plug-in para que os anunciantes insiram os dados diretamente em um rascunho de postagem, que os administradores podem aprovar. Você pode usar um plug-in para fazer isso, chamado TDO Mini Forms (http:// wordpress.org/extend/plugins/tdo-mini-forms/). Essa não é a única opção disponível; outra excelente alternativa é o Gravity Forms, que também oferece ótimos complementos para recursos premium, mas o TDO Mini Forms é suficientemente simples, além de ser gratuito, por isso experimente essa opção antes de decidir se ela serve ou não para o seu propósito. De qualquer forma, a única coisa que nos interessa a essa altura é ter um plug-in que permita aos usuários, que neste caso são pessoas que estão anunciando ou procurando vagas de emprego, enviar conteúdo para o WordPress, para ser armazenado em forma de rascunho nas categorias. Por isso, o que você quer é construir um formulário que permita enviar os seguintes dados: Tipo de anúncio de emprego (o usuário pode escolher a partir de duas categorias: Vagas
Disponíveis ou Buscando um Emprego) Responsável pela oferta (o responsável deverá fornecer um nome, e-mail e, opcionalmente, uma URL para sua página da Web). Título da oferta (o título pretendido) Texto da postagem (o conteúdo da postagem) Informações de contato (sem isso a oferta de vaga seria meio inútil, não é mesmo?) E isso é tudo, embora você possa também considerar a possibilidade de usar uma proteção contra spam. O plug-in TDO Mini Forms pode gerenciar isso com facilidade, mas você pode preferir desenvolver ou usar outras soluções. Se estiver usando o TDO Mini Forms para construir essa solução, você pode especificar que as postagens sejam salvas como rascunhos e anexar as informações do responsável ao conteúdo da postagem. Assim, você não precisará criar uma conta de WordPress para qualquer pessoa que enviar um anúncio. Alternativamente, você pode forçar os anunciantes a se registrarem antes que eles possam acessar a página de “anuncie uma vaga”. Se fizer isso, eles usarão as informações do usuário fornecidas ao WordPress, e o TDO Mini Forms oferece suporte a isso também. Se você forçar os anunciantes a se inscreverem, poderá facilmente criar arquivos para todas as ofertas publicadas por cada usuário, por exemplo, o que pode ser útil. Isso significa também que você pode marcar alguns anunciantes como confiáveis, ignorando o estágio de aprovação e publicando automaticamente seus anúncios.
294
CAPÍTULO 15: UTILIZAÇÕES INCOMUNS DO WORDPRESS Você pode fazer isso da forma como preferir. O mais importante é que você possa fazer os anunciantes e as pessoas em busca de trabalho enviarem o conteúdo diretamente para o WordPress (como rascunhos) para que você possa facilmente gerenciar as vagas listadas.
DESENVOLVIMENTO ADICIONAL E depois disso, qual o próximo passo? Esse quadro de vagas rodando em WordPress é totalmente funcional, mas ainda pode melhorar muito. As primeiras coisas que você talvez precise considerar é uma forma de cobrar pelos anúncios de vaga, e uma forma de controlar o período de tempo pelo qual elas podem ser visualizadas. Afinal, há uma porção de quadros de vagas que cobram pelo serviço, e talvez você queira oferecer um serviço pago, de modo que anexar um serviço de pagamento como PayPal ou algo do tipo seria o próximo passo natural. Para controlar o período de tempo pelo qual uma postagem é exibida, você pode executar um script que altera automaticamente o status de uma postagem de “published” (publicada) para “draft” (rascunho), mas a melhor alternativa é provavelmente adicionar um trecho de código no topo de cada postagem para exibir uma mensagem do tipo “esta oferta de emprego está desatualizada” ou até mesmo ocultar as informações da vaga ou redirecionar o visitante. Você pode facilmente fazer isso usando PHP e algumas conditional tags. Outras melhorias poderiam envolver maior controle quando um anunciante envia uma oferta de emprego. Isso poderia incluir anexos de imagem, tags e localização geográfica. Essa última parte pode ser gerenciada com uma taxonomia personalizada ou usando campos personalizados. Assim, você pode facilmente fazer consultas por ofertas de emprego em diferentes localidades. Talvez você também prefira separar totalmente as vagas de emprego do restante do seu conteúdo, se estiver acrescentando a funcionalidade de quadro de vagas a um site já ativo. Um post type personalizado para as vagas pode resolver facilmente esse problema para você; apenas certifique-se de que seu método para receber as informações sobre vagas, como o TDO Mini Forms, no exemplo acima, funcione com seus post types personalizados. Também é possível usar postagens fixas (sticky) para dar destaque a algumas vagas, para aqueles anunciantes generosos que querem mais exposição. Você pode simplesmente aplicar o estilo desejado nas postagens fixas (fonte maior, cores mais chamativas, bordas, etc.) e deixar que elas fiquem no topo das postagens exibidas, o que talvez não seja tão divertido no design apresentado para esse exemplo, uma vez que ele se baseia apenas em listagens de links. Outra solução seria ter um loop separado que consulta apenas postagens marcadas como sticky, e exibe independentemente essas postagens. Isso significaria que você teria controle total sobre elas, naturalmente. Não há dúvidas de que é possível melhorar muito esse conceito de quadro de vagas. A ideia principal desse exemplo é mostrar a você que o WordPress pode ser usado para criar um site desse tipo. Agora, fica a seu critério (ou o de alguma outra pessoa) tornar o site grandioso e fenomenal. Boa sorte! Agora, vamos à próxima seção, que fala de outro conceito não blogueiro; assim, de um quadro de vagas, passamos a falar sobre uma base de conhecimento. A diferença não é tão grande quanto seria de se esperar.
295
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS
USANDO O WORDPRESS COMO UMA BASE DE CONHECIMENTO DO TIPO FAQ Empresas que querem ter sua própria base de conhecimento no formato “perguntas frequentes”, ou FAQ (do inglês, “Frequently Asked Questions”), podem se beneficiar muito do WordPress. O conceito é simples, na verdade. Tudo gira ao redor de postagens enviadas pelos usuários, tags e/ou categorias. Graças aos comentários, é possível ter uma conversa sobre determinada questão enviada por um usuário e, quando a questão é solucionada, o administrador pode movê-la para a parte do site dedicada à base de conhecimento. Eis os recursos essenciais: Problemas enviados pelos usuários de um plug-in; cada problema é, na verdade, uma
postagem. Duas categorias principais: Perguntas Frequentes (FAQ) e Base de Conhecimento
(Knowledge Base). Postagens marcadas com tags (as postagens são problemas, lembra?) para facilitar a busca por palavra-chave. Uma taxonomia personalizada para a Base de Conhecimento. O fluxo de utilização do site seria o seguinte: 1. Um usuário envia um problema usando um formulário no site. O problema é salvo como uma postagem e marcado como rascunho, usando um plug-in. 2. Um administrador publica o problema na categoria FAQ. 3. Agora, é possível comentar sobre o problema. Se um administrador responder, seus comentários serão destacados, mas qualquer um pode responder se quiser. Se você desativar os comentários dos usuários, deve incluir alguma forma para que o usuário que enviou o problema possa fazer perguntas adicionais sobre o mesmo problema sem precisar enviar uma nova postagem. 4. Quando o problema é solucionado, um administrador adiciona a postagem à categoria da Base de Conhecimento (Knowledge Base). 5. Todas as postagens da categoria Base de Conhecimento são marcadas com as tags adequadas dentro da taxonomia personalizada de tags (Knowledge Base Tagging) da Base de Conhecimento. Isso significa que você pode gerar uma nuvem de tags (ou qualquer outra coisa) apenas com base nas tags dentro da categoria da Base de Conhecimento. O objetivo da taxonomia Knowledge Base Tagging é permitir que os usuários naveguem pelos problemas já solucionados em busca de soluções para seus problemas específicos. Isso funciona em conjunto com a função de tags, que também inclui postagens de FAQ (que ainda não foram solucionadas). Essa abordagem pode ser bastante útil. Por fim, há também a navegação por categorias, que significa que é muito fácil criar essas duas seções – FAQ e Base de Conhecimento – dentro do site.
296
CAPÍTULO 15: UTILIZAÇÕES INCOMUNS DO WORDPRESS ADICIONANDO A FUNCIONALIDADE O design, em si, para o tema usado neste exemplo, é bastante simples, por isso vou me concentrar no que realmente importa. Você pode desenvolver esse projeto a partir de praticamente qualquer tema que quiser. Primeiramente, você precisa construir sua nova taxonomia. Você pode ler mais sobre isso no Capítulo 6; este é o código que você vai usar no arquivo functions.php para o tema filho. add_action( 'init', 'kbase', 0 ); function kbase() { register_taxonomy( 'knowledge_base', 'post', array( 'hierarchical' => false, 'label' => 'Knowledge Base Tags', 'query_var' => true, 'rewrite' => true ) ); }
Pronto. Agora, você tem outro campo de tags na interface de admin do WordPress para marcar a postagem que quiser (ver Figura 15-3). Você só vai usar isso para as postagens marcadas com o status “Knowledge Base”, conforme descrito anteriormente.
Figura 15-3: Tags para a Base de Conhecimento
297
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS Configurada a taxonomia, o próximo passo é começar a receber os problemas. Esse processo foi descrito no exemplo anterior, do quadro de vagas, por isso consulte a seção anterior para escolher entre as soluções apresentadas. O plug-in TDO Mini Forms funcionará bem para receber seus problemas, por isso você pode optar por utilizar esse plug-in, ou qualquer outra solução que preferir. Talvez você queira criar um modelo home.php para dar destaque aos mais recentes problemas enviados ou adicionados à Base de Conhecimento (que exibiriam as últimas postagens em cada uma das categorias, simplesmente), além de promover ou oferecer o formulário para envio de um problema. Pessoalmente, eu adicionaria uma imensa caixa de busca e uma nuvem de tags mostrando quais são as tags mais frequentes na taxonomia da Base de Conhecimento. Isso pode ser feito passando o nome da taxonomia para wp_tag_ cloud(), assim:
O parâmetro da taxonomia lê o nome, e não o rótulo, da sua taxonomia personalizada. Aplique à nuvem de tags o estilo que quiser, e você terá uma série de palavras-chave obtidas apenas a partir da taxonomia da Base de Conhecimento, o que, por sua vez, quer dizer que apenas problemas já solucionados serão exibidos. Isso é basicamente tudo, na verdade. Depois de adicionar o recurso de envio e a taxonomia, você só precisa exibir as postagens mais recentes de cada categoria e tentar fazer os usuários realmente usarem a ferramenta de busca para encontrar um problema antes de enviar o mesmo problema novamente.
MELHORIAS ADICIONAIS Embora seja fácil colocar um site de FAQ/Base de Conhecimento no ar com WordPress, há muitas formas de melhorá-lo. O primeiro passo é garantir que os usuários entendam que devem pesquisar e navegar pelo site antes de enviar um problema, caso contrário há boas chances de que você acabe com um monte de conteúdo duplicado. Você quer que seus visitantes usem a busca, e isso significa dar um destaque maior a essa funcionalidade. Infelizmente, se o WordPress tem uma fraqueza, essa fraqueza é a busca, por isso pode ser uma boa ideia usar um serviço externo, como o Google Custom Search Engine (http://google. com/cse) ou alguma variante disso que possa facilmente ser integrada ao seu site para adicionar a funcionalidade de busca. Há também diversos plug-ins que melhoram a busca, e você também pode brincar com eles. Consulte o Capítulo 9 caso ainda não tenha um favorito. Aqui vão algumas outras ideias sobre como melhorar esse projeto: Inscrição e edição. Permita que as pessoas se inscrevam para que possam editar suas
próprias perguntas, obter um arquivo de autor, e assim por diante. Talvez você queira até mesmo forçar a inscrição, para dificultar o spam. Use um post type personalizado. Se você precisa implementar essa solução em um site já existente, seria uma boa ideia fazê-lo com um post type personalizado em vez de usar postagens tradicionais. Esse método seria igualmente fácil de implementar, como você verá mais adiante, neste capítulo. Avaliação. Permita que os usuários avaliem suas respostas, dando notas aos comentários quando a postagem estiver no modo FAQ, e dando notas para a solução do problema, de fato, depois que ele for movido para a Base de Conhecimento. No segundo caso, você vai
298
CAPÍTULO 15: UTILIZAÇÕES INCOMUNS DO WORDPRESS precisar de um plug-in que permita avaliar a postagem, e não os comentários. O Capítulo 9 oferece algumas sugestões nesse sentido. Problemas relacionados. Exiba automaticamente outros problemas semelhantes, usando um plug-in de postagens relacionadas. Usando essa rota, o usuário talvez encontre uma resposta para sua pergunta. Aprimore ainda mais a busca. Usando JavaScript, você pode fazer seus usuários encontrarem mais facilmente a resposta para problemas comuns. Use o tipo de campo de busca que pergunta se você quis dizer XYZ quando digitou XPT. Altere a página inicial. Quanto melhor for a exposição dos problemas, mais rapidamente os usuários vão encontrá-los, e já que esse é o objetivo principal, você deve alterar a página inicial para atender a esse propósito da melhor forma possível. Assinaturas e alertas. Ofereça formas para que seus usuários possam assinar o conteúdo das atualizações e problemas solucionados. Há diversas formas de gerenciar isso, e uma vez que o WordPress oferece um feed RSS para praticamente qualquer coisa, tenho certeza de que eles são a resposta. Certifique-se de que seus usuários compreendam isso, para que possam assinar apenas o conteúdo no qual estão interessados. O conceito da base de conhecimento é outra forma de usar o WordPress para criar um site que não é um blog. Outra forma de fazer isso é usar o WordPress para criar uma loja on-line.
WORDPRESS E COMÉRCIO ELETRÔNICO Nem preciso dizer que você pode usar o WordPress para vender alguma coisa. A forma mais simples disso é ter um blog ou site tradicional com WordPress que funcione como “backend”, e usar seu alcance para vender produtos. Você pode adicionar links afiliados, o que basicamente significa que, sempre que você incluir um link para a Amazon com sua URL afiliada e alguém comprar algo, você ganha uma comissão. Na verdade, se você comprou este livro seguindo um link em algum dos meus sites, eu ganhei um trocado. Obrigado! Porém, quando a maioria de nós pensa em comércio eletrônico, ou e-commerce, estamos pensando em algo maior que simples links afiliados – carrinhos de compras, distribuição digital, pagamentos recebidos por contas de PayPal e coisas do tipo. Você pode ter tudo isso, com certeza, e o Capítulo 9 inclui uma porção de ideias que podem facilitar a implementação dessas coisas, desde simples integrações até funcionalidades completas de carrinho de compras.
USANDO O WORDPRESS PARA CRIAR UMA LOJA NA WEB Você talvez esteja se perguntando se pode rodar uma loja on-line usando WordPress. A resposta resumida é sim; você poderia se quisesse, e se não tivesse produtos demais. A resposta mais longa, no entanto, é a de que provavelmente não será tão simples implementar um site de compras, mas não deixe que isso impeça você de fazê-lo, uma vez que não há qualquer razão para seu site não funcionar perfeitamente, se você estiver preparado para expandir o WordPress com plug-ins, trabalhar com campos personalizados e então pensar em uma forma de conectar seu carrinho de compras ao PayPal e outras soluções de pagamento.
299
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS Isso é meio desanimador, não é mesmo? Relaxe, não é tão ruim quanto parece: existem plug-ins capazes de fazer grande parte do trabalho para você. Porém, comparados a outros sistemas de comércio eletrônico disponíveis, os plug-ins disponíveis deixam a desejar. É difícil recomendar o WordPress para aplicações de comércio eletrônico, a não ser que você tenha um negócio no seu tempo livre ou esteja vendendo um número pequeno de produtos. Dito isso, nada impede você de anexar qualquer um dos muitos scripts de carrinho de compras disponíveis por aí ao seu tema. A maioria deles provavelmente funcionará sem grandes problemas, e aí você só precisaria descobrir como cobrar pelas suas mercadorias. Por sorte, empresas como PayPal (e muitas outras) facilitaram esse processo, por isso você pode capitalizar seu blog ou site de WordPress com uma loja, vendendo os produtos que quiser. Apenas certifique-se de que você sabe onde está se metendo. Estamos falando de vendas, e não apenas de publicação de conteúdo.
VENDENDO PRODUTOS DIGITAIS Mercadorias digitais, como e-books, são um caso completamente à parte. Nada impede que você implemente uma solução de pagamento por um arquivo digital e, depois de receber o pagamento, disponibilize o arquivo. Na verdade, isso não tem praticamente nada a ver com o WordPress, uma vez que o que importa é verificar o pagamento e direcionar o cliente para o arquivo em questão. Adicionar esse tipo de solução ao seu blog é muito fácil se você usar um serviço de terceiros, como o E-junkie (www.e-junkie.com), para gerenciar o pagamento e a entrega de arquivos, embora essa solução fique com uma parte do dinheiro que você recebe. Basta configurar um link e o seu provedor cuida do resto; funciona como em um programa de afiliados, mas com a vantagem de que você fica com uma parcela maior do dinheiro, já que o produto é seu. Você pode fazer o mesmo por conta própia, ou usando os plug-ins e scripts necessários. No entanto, é difícil fugir do fato de que você precisa realmente cobrar pelos seus produtos, o que significa gerenciar os pagamentos. Teoricamente, você mesmo pode gerenciar os pagamentos. Eu não recomendo essa abordagem, até porque as pessoas se sentem mais seguras quando reconhecem a entidade que está gerenciando seu dinheiro. Produtos digitais podem se encaixar perfeitamente em qualquer site. Embora o WordPress não seja um Magento, ele serve muito bem para vender e-books, MP3, arquivos de design ou o que quer que você queira vender para ganhar algum dinheiro.
DESENVOLVENDO PARA COMÉRCIO ELETRÔNICO Então, você decidiu usar o WordPress como base para vender seus produtos, grandes ou pequenos, muitos ou poucos, não importa. Agora, você precisa decidir como pode configurar o site para dar a ele a melhor potência com a maior facilidade de gerenciamento possíveis. Embora você possa usar postagens ou páginas para seu site, é uma boa ideia considerar os post types personalizados. Nem sempre é necessário separar os produtos que você quer vender do restante da infraestrutura do site, mas se for, ou possa ser no futuro, a melhor solução são os post types personalizados. A próxima seção explica como usar post types personalizados para conteúdo de produtos ou para virtualmente qualquer site.
300
CAPÍTULO 15: UTILIZAÇÕES INCOMUNS DO WORDPRESS
CONSTRUINDO UM DIRETÓRIO DE PRODUTOS Adicionar um diretório de produtos (ou qualquer tipo de diretório, como classificados de imóveis ou listagens de pessoas, por exemplo) a um site de WordPress é muito fácil graças aos post types personalizados. Não importa se você tem 10 produtos ou mais de 500, é importante separá-los do restante do conteúdo. O tipo de informações por produto que você precisa armazenar é obviamente específico para suas necessidades, por isso este exemplo traz apenas o básico. Crie um post type personalizado para livros, que no exemplo será chamado de Books. Cada produto individual é na verdade um tipo de livro, armazenado sob a forma de
postagem no post type Books. O exemplo inclui suporte a categorias, que serão categorias de livros, para melhorar a classificação. Esse exemplo não oferece suporte a tags (mas você poderia incluir, se quisesse). As tags ficaram de fora para simplificar o exemplo. Na maioria dos casos, é uma boa ideia permitir a marcação com tags, pois isso pode servir para classificar produtos por fabricante ou coisas do tipo. Aliás, por que livros? Bem, eu achei que era uma boa ideia usar este código para fazer algo útil e criei uma listagem de produtos para meus livros em http://tdh.me. É sempre bom usar um exemplo real. Você pode adotar este código para seu próprio site, assim como tudo neste livro, e como a maioria das coisas que eu programo.
CRIANDO O POST TYPE PARA LIVROS O Capítulo 10 aborda os post types personalizados, por isso, se estiver em dúvida sobre o que eles são e como funcionam, é uma boa ideia recapitular antes. Para criar o post type Books, basta adicionar o código a seguir ao arquivo de modelo functions.php ao seu tema: register_post_type('books', array( 'label' => _ _('Books'), 'singular_label' => _ _('Book'), 'public' => true, 'show_ui' => true, 'capability_type' => 'post', 'hierarchical' => false, 'taxonomies' => array('category'), 'has_archive' => true, 'rewrite' => array('slug' => 'books'), 'query_var' => false, 'supports' => array( 'title', 'editor',
301
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS 'author', 'thumbnail', 'excerpt', 'custom-fields', 'comments' ) ));
O código é relativamente direto: ele registra o post type como 'books' e configura rótulos adequados para que o post type tenha uma boa aparência na interface de admin, como mostra a Figura 15-4. Faça com que o post type seja public, e faça-o se comportar como uma postagem, usando a configuração capability_type, certifique-se de que ele ofereça suporte a categorias e páginas de arquivos e que tenha links permanentes atraentes. (Essa última já está incluída nas configurações padrão, mas eu tenho a tendência de incluí-la assim mesmo.) Por fim, o parâmetro supports contém um array de caixas que esse post type oferecerá, na interface de admin. O restante são valores padrão; mais uma vez, se precisar de uma recapitulação, consulte o Capítulo 10.
Figura 15-4: Escrevendo uma postagem do tipo Books
Agora, só precisamos adicionar postagens ao post type Books e teremos um post type novo em funcionamento!
PÁGINA DE LIVROS Há duas formas de criar uma página contendo todos os produtos do seu post type personalizado ('books', neste exemplo). Uma delas é criar uma página no WordPress e usar um modelo de página para adicionar um loop personalizado, para exibir as postagens de livros da forma que você quer. O segundo método é usar o arquivo de modelo para listagens. Neste exemplo, vamos usar a segunda forma, ou seja, o arquivo usado será archive-books.php (o arquivo archive-[post type] tem prioridade sobre archive.php). Eu poderia simplesmente adicionar algumas 302
CAPÍTULO 15: UTILIZAÇÕES INCOMUNS DO WORDPRESS conditional tags a archive.php ou até mesmo a index.php para fazer a mesma coisa, mas esse método é mais limpo. Um problema comum que ocorre com post types personalizados é uma postagem não ser exibida. Isso acontece porque o WordPress não inclui os post types personalizados no loop, por padrão. Se você quiser exibir postagens de post type específico, como 'books', em um modelo, precisa usar query_posts('post_type=books') para dizer ao WordPress para buscar essas postagens. Obviamente, você pode adicionar diversos post types juntos, simplesmente usando um array, por isso se quiser exibir 'books' e postagens normais, use: query_post( 'post_type => array( 'post', 'books' ) ' )
Obviamente, você poderia usar WP_Query também (mostrado em um exemplo mais adiante) uma vez que ele se comporta da mesma forma que query_posts(). Consulte o Codex para saber mais sobre query_posts():http://codex.wordpress.org/Function_ Reference/query_posts.
Voltemos à página de arquivos dos livros. Uma vez que não tenho tantos livros assim, quero que cada livro (cada postagem do tipo Books) tenha um espaço amplo em minha página de listagem. Isso significa que vamos programar um loop e usar um campo personalizado para exibir a capa (com um fallback, caso ainda não haja um), e então usar um trecho para atrair os leitores. Nesse caso, eu usaria o recurso de imagem de destaque caso ele ainda não tenha sido implementado para outros propósitos no site, por isso vamos usar um campo personalizado com a URL da imagem. Aqui está meu arquivo archive-books.php:>max_num_pages > 1 ) : ?>← Older posts', 'notesblog' ) ); ?>→', 'notesblog' ) ); ?>
Esse é um loop relativamente comum, que se parece muito com o loop do Notes Blog (se precisar de um roteiro mais detalhado do código, consulte o Capítulo 4). Há apenas duas diferenças dignas de nota. A primeira delas é post_class(), que recebeu o parâmetro books-archive. Isso é usado para aplicar estilo; você verá isso na folha de estilo, e a única coisa que o parâmetro faz é adicionar a classe books-archive à saída de post_class(). A segunda diferença é a verificação da capa do livro. O código tem alguns campos personalizados simples em ação. Primeiramente, precisamos armazenar o conteúdo da chave book_cover em $books-cover. Aí, então, verificamos se $bookscover contém algo, o que significa, obviamente, que armazenamos algo ali – precisamente, a URL da imagem da capa do livro. Se $bookscover contiver algo, o código vai gerar uma saída, caso contrário, uma imagem usada como marcador. Essa é uma utilização simples dos campos personalizados; você pode torná-la ainda mais fácil no “backend”, empregando um plug-in como o More Fields (ver Capítulo 9), mas para os propósitos do exemplo, isso já serve. O estilo também é bastante óbvio, mas ainda assim, aqui está ele: 304
CAPÍTULO 15: UTILIZAÇÕES INCOMUNS DO WORDPRESS div.books { margin: 20px 0 40px 20px; clear:both; } /* 640 px - from div.post */ div.books-archive { float:left; margin-bottom: 10px; padding-bottom: 10px; border-bottom: 1px dotted #efefef; } div.books-cover { float:left; width: 190px; } div.books-cover img { padding: 5px; border: 1px solid #efefef; } div.books-content { float: right; width: 440px; }
Isso é tudo bem simples. Vale a pena ressaltar que os post types personalizados não receberão as tradicionais classes de postagem ou página a partir de post_class(), em vez disso, receberão uma classe com base no nome do post type. Assim, nesse caso, recebi books a partir de post_class(), ou seja, preciso aplicar a esse post type um estilo idêntico ao da classe de postagens, se quiser que as postagens em Books se comportem como as postagens normais. Nesse caso, isso significa apenas algumas margens e coisas do tipo. O restante deve ser bem autoexplicativo; você também encontrará a classe books-archive aqui. E isso é tudo. Consegui adicionar uma página de livros ao meu site, como mostra a Figura 15-5, que exibe cada livro como uma postagem em um post type personalizado. Agora, posso facilmente atualizar essa página com novos livros sem precisar editar uma Página – basta acrescentar uma nova postagem ao post type Books, e pronto.
Figura 15-5: Página de livros, simples e pronta para receber um pouco de atenção especial
305
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS EXIBINDO OS PRODUTOS Postagens que pertencem a um post type personalizado não são exibidas, por padrão, no fluxo normal de atualizações. Você pode alterar isso facilmente usando query_posts() ou WP_Query (que se comporta da mesma forma que query_posts(), como você talvez lembre), mas no caso de um diretório de produtos, isso não faz muito sentido. No entanto, você ainda precisa exibir seus produtos, e é possível fazer isso de diversas formas. As seções seguintes oferecem algumas sugestões, que podem ser combinadas entre si.
Adicione um Loop A solução mais versátil para exibir seus produtos é adicionar um loop que gere uma saída de conteúdo a partir do post type personalizado para o seu tema. Poderia ser algo como:have_posts()) : $my_query->the_post(); ?>
- " title="">
Tenho certeza de que você reconhece o loop. Esse loop simplesmente exibe todas as postagens que pertencem ao post type books como um link em uma lista de itens (sim, todos eles, por isso posts_per_page está configurado para -1 em WP_Query). Quer fazer algo ainda mais impressionante? Então por que não utilizar um JavaScript mais sofisticado para criar um slider bacana e dar destaque aos seus produtos? Existem alguns plug-ins de postagens em destaque que também poderiam ser usados para isso, se você conseguir fazê-los funcionarem com um post type personalizado, e provavelmente alguns plug-ins que simplesmente usam o que quer que você use para alimentá-los. Assim como qualquer outro loop, as únicas limitações são a sua própria imaginação e suas habilidades para fazer o resultado ter uma aparência agradável.
Use Gráficos e Links Se você tem boas imagens de produtos ou material promocional de qualidade, pode ser uma boa ideia aproveitar ao máximo esses recursos para fazer os visitantes se interessarem pelos seus produtos. A forma mais fácil de chamar atenção para produtos na maioria dos sites é adicionar links com elementos gráficos para as áreas para widgets disponíveis (geralmente na barra lateral), conduzindo seus visitantes às diversas páginas de produtos. No meu caso, faço isso principalmente a partir de postagens, mas também a partir de áreas para widgets. Essa solução é provavelmente mais adequada a diretórios de produtos menores, com poucas atualizações e adições, assim, você não precisará colocar muitos produtos em 306
CAPÍTULO 15: UTILIZAÇÕES INCOMUNS DO WORDPRESS destaque ao mesmo tempo. Se suas necessidades são maiores, a opção de loop mostrada anteriormente é preferível.
Uma Simples Entrada de Menu Às vezes, a melhor solução é a mais óbvia. Uma entrada de menu apontando para sua página de produtos pode não ser tão visual, gráfica ou dinâmica quanto um loop que exibe os últimos produtos, mas é eficiente, além de ser algo que seus usuários provavelmente esperam encontrar. Não esqueça de criar um link para a página de produtos no menu, caso possua uma!
CONSTRUINDO UM SITE DE LINKS Um site de links pode ser usado para diversos propósitos, por isso os exemplos desta seção são mais genéricos do que os das seções anteriores. A ideia é usar as postagens como links, que podem ser classificados por categorias e tags. Porém, você não vai simplesmente inserir um link no campo da postagem, e sim usar o campo de título como título do link, e então armazenar a URL de destino em um campo personalizado. Aí, então, você pode usar o campo de trecho (excerpt) para exibir descrições, detalhes ou o que mais se encaixar em seu projeto. Mas você precisa começar pelo princípio. Aqui estão as suas premissas: Toda postagem do blog é um link em seu banco de dados de links. Você usa o campo de título para salvar o título do link (por exemplo, Google). Você armazena a URL de destino em um campo personalizado chamado 'URL' (por
exemplo, www.google.com). Você categoriza seus links usando uma determinada quantidade de categorias (por
exemplo, Mecanismos de Busca ou Web mail). Você marca seus links com as tags apropriadas (por exemplo, gratuito, EUA, ou fontes). Você usa the_excerpt() em vez de the_content() para descrições de links, principalmente para manter suas possibilidades em aberto para o futuro. Agora, podemos começar. Comece armazenando a URL em um campo personalizado. Para isso, basta criar um novo campo personalizado na tela Write post da interface de admin do WordPress e atribuir a ele o nome 'URL'. A ideia é colocar a URL no campo de valor para cada postagem, e então criar um link com o título que aponte para a URL. Em seguida, você vai precisar alterar um pouco o loop. (Para um projeto assim, você provavelmente deve criar um novo tema que se adapte aos objetivos, mas este exemplo usa o tema padrão.) Use o seguinte código dentro do loop:id="post-">ID, URL, true); ?>"
307
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS rel="bookmark" title="">Arquivado em
Desculpe, mas este link está corrompido. Por favor, avise o administrador!
Está corrompido: Arquivado em
Não é uma forma muito bonita de modificar, eu sei, mas o conceito é bem simples. Certifique-se de que haja uma URL enviada para o campo personalizado 'URL'. É isso que esta linha faz:
Se ela retornar true, o código que você quer será exibido, contendo o título com o link e tudo o mais. Em seguida está o título com o link, de fato, que aponta para a origem, obviamente. Afinal, essa era a ideia.ID, URL, true); ?>" rel="bookmark" title="">
Obviamente, você vai executar echo no conteúdo do campo personalizado 'URL' que, se tudo der certo, será uma URL válida (não há verificação para isso, apenas se há algo armazenado ali). A função get_post_meta() primeiramente pede a ID da postagem, em seguida o nome do campo personalizado (que é 'URL'), e então ela pergunta se deve retornar o conteúdo como uma string ou como um array (você quer uma string, daí o valor, true). Executando echo nesse código, você terá seu link e pronto – temos um título de postagem com link! O loop continua, e você faz tudo isso outra vez.
308
CAPÍTULO 15: UTILIZAÇÕES INCOMUNS DO WORDPRESS A não ser que você esqueça de adicionar uma URL ao campo personalizado. Então, a verificação mencionada acima irá passar por cima da cláusula else, que simplesmente gera uma saída de título de postagem tachado, e uma mensagem avisando aos interessados que a URL está corrompida. Há também um link de edição, acrescentado como boa prática; talvez você queira incluir esse link também nos resultados bem-sucedidos. O restante é relativamente básico, com the_excerpt() exibindo o que quer que você coloque no campo de trecho (ou o conteúdo, de fato, caso você tenha cometido um erro), assim como as categorias, as tags e a data. E isso é tudo, essa é a base para usar o WordPress como gerenciador de links. É claro que você pode refinar um pouco esse método, essencialmente com soluções estéticas que você pode resolver dentro do tema
ALTERNATIVA: FORMATO DE POSTAGEM LINK Outra opção seria usar o formato de postagem link. Essa é uma solução menos avançada do que a anterior, mas pode ser uma opção melhor, dependendo de seus objetivos para o site de diretório de links. O formato de postagem link busca o primeiro link de sua postagem e permite que você brinque com ele. Para usar o formato de postagem link, primeiramente você precisa ativá-lo em functions.php: add_theme_support( 'post-formats', array( 'link' ) );
Obviamente, você pode expandir esse array com mais formatos de postagens, se quiser. A beleza dos formatos de postagem está no fato de que eles são muito fáceis de verificar. Você pode usar a conditional tag has_post_format() para verificar o formato de postagem link, o que pode também ser uma forma alternativa de aplicar estilos às postagens, naturalmente. if ( has_post_format( 'link' ) { echo 'Ei, veja só! É um link!' }
Se quiser usar formatos de postagens, você pode atualizar o código no primeiro exemplo como preferir. Para saber mais sobre formatos de postagem, consulte o Capítulo 4.
ALGUMAS IDEIAS DE UTILIZAÇÃO Por que você deveria usar o WordPress para criar algo que, à primeira vista, parece um simples diretório de links? A facilidade de gerenciamento do WordPress, assim como suas diversas capacidades de feeds e classificação, fazem da plataforma uma excelente opção para essa utilização. Some a isso a capacidade de permitir que os usuários enviem seus próprios links ou de fazer eles se inscreverem, e você tem uma base sólida para começar. Você pode até mesmo permitir que outros sites incluam os links mais recentes de uma determinada categoria ou tag usando feeds RSS, embora você provavelmente deva alterar a saída do feed para que os títulos, nesses casos, também levem aos destinos especificados nos campos personalizados 'URL'.
309
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS Como aproveitar ao máximo esses recursos? Obviamente, as possiblidades são infinitas. Sites de links orientados para um nicho são populares, mas você pode tornar a coisa mais atraente usando plug-ins. Por que não permitir que as pessoas votem ou comentem os links, por exemplo? Assim, você pode incentivar as contribuições dos usuários e aproveitá-las ao máximo, criando listas, rankings, etc. Para um grupo fechado, essa pode ser uma ótima forma de compartilhar recursos e artigos na Web, e, além disso, trata-se de uma boa alternativa a todos os scripts de diretório de links disponíveis por aí. Afinal, poucas plataformas oferecem a facilidade do WordPress, com a opção permanente de integrar novos recursos ao site. Aproveitando as vantagens dos temas e plug-ins, não há limites para o que você pode acabar fazendo com um site assim. Você também pode simplesmente usar o site para compartilhar e salvar links de que você gosta, categorizando e marcando o conteúdo com tags. Afinal, é isso que o delicious.com faz, por isso, com certeza, você pode achar isso útil.
MISTURANDO POSTAGENS DE LINK COM CONTEÚDO TRADICIONAL Talvez você queira misturar esse tipo de título com link ao seu conteúdo tradicional. Você sabe do que estou falando: aquele tipo de site onde o título da postagem aponta para a postagem, de fato, e não para outro lugar. Nesse caso, a solução seria usar uma espécie de aparte para links. Na verdade, isso é bem fácil de criar. Basta reutilizar o código e deixar que o conteúdo dos campos personalizados faça o trabalho por você. Algo semelhante ao código abaixo já resolveria o problema.id="post-">" rel="bookmark" title="Link Permanente para ">
by
310
CAPÍTULO 15: UTILIZAÇÕES INCOMUNS DO WORDPRESS '); ?> Publicado em |
Há algumas pequenas mudanças em comparação ao código usado no exemplo original. Isso porque, na verdade, você quer exibir as postagens com o link no título quando não houver um valor no campo personalizado 'URL', mas quando houver, você quer fazer as coisas da mesma forma que fez antes. Essa versão omite algumas categorias e coisas do tipo, e contém div.linkage, adicionado para facilitar o estilo (embora você também possa usar estilos de post_class() na maioria dos casos). Esse código irá fazer toda postagem que contiver algo no campo personalizado 'URL' ter um link integrado ao título, apontando para aquela URL, e não para a postagem em si. É relativamente fácil adicionar isso a qualquer tema. Obviamente, tudo isso ficaria bem mais limpo se você usasse formatos de postagem (do inglês, "post formats"), uma vez que seria possível simplesmente usar has_post_format() e verificar o formato de postagem link, conforme descrito anteriormente. Portanto, é possível criar um site centrado em links usando WordPress. Mas e quanto a uma galeria? A resposta é sim, naturalmente.
EXPLORANDO A GALERIA Hoje, é muito fácil usar o WordPress para imagens – ao menos para a maior parte dos sites. A nova funcionalidade de mídia, com o shortcode [gallery], facilita a inclusão de álbuns de fotos. Porém, o que você faz se é aquele tipo de usuário que quer publicar centenas, talvez milhares de fotos no longo prazo, e quer ter uma galeria de fotos tradicional em seu site? É claro que existem sites de compartilhamento de imagem, mas às vezes você quer fazer as coisas do seu jeito, no seu próprio site. É possível fazer isso usando WordPress. Neste exemplo, você vai usar postagens e categorias para criar uma galeria de fotos. Primeiramente, atribua à galeria de fotos a categoria Gallery (em inglês, neste exemplo). Você pode ter diversas categorias usando o mesmo tratamento, mas neste exemplo vamos criar uma só. A ideia é que cada postagem seja um álbum de fotos, em si. Assim, sua festa de aniversário e todas as fotos onde você aparece apagando as velinhas e abrindo presentes ficariam em uma mesma postagem, por exemplo, com um título adequado e até mesmo tags. As tags são ótimas para classificação, por isso você categoria pode usá-las como quiser. Se não quiser misturar as postagens de galeria de fotos às post com imagens post com imagens postagens normais, mas ainda assim quiser usar tags, você precisa criar uma taxonomia personalizada para marcar suas fotos com post com imagens tags. Assim, você não terá postagens misturadas nos diversos arquivos de tags. Figura 15-6: Modelo de galeria 311
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS Então, como este exemplo funcionaria? A Figura 15-6 é um esboço conceitual para a forma como as postagens se relacionam com a categoria Gallery. Você tem uma categoria Gallery e cada postagem é um álbum de fotos. Você pode gerenciar o conteúdo da forma que quiser. A forma mais simples seria simplesmente fazer o upload das imagens em uma postagem e incluí-las como galeria de miniaturas, usando o shortcode [gallery]. No entanto, você poderia incluir também uma descrição, quem sabe como um trecho, e então usar essas informações para navegação, assinatura de feeds, e exibição dentro de the_content() no arquivo do tema. Ou você pode simplesmente escrever algo abaixo da galeria de fotos; o resultado é o mesmo. O que importa, no caso das postagens, é que elas sempre tenham imagens anexadas se estiverem incluídas na categoria Gallery. Quando você faz o upload de imagens usando o gerenciador de mídia do WordPress enquanto escreve ou edita uma postagem específica, as imagens são anexadas àquela postagem. Essa conexão é necessária tanto para o shortcode [gallery] quanto para a exibição de miniaturas na página de arquivos da categoria, que, nesse caso, é a seção de galerias de fotos dentro do seu site. Uma última coisa, antes de seguirmos para o código: certifique-se de que suas configurações de mídia sejam adequadas para o design e para a configuração da seção de galerias. Para saber mais sobre esse assunto, consulte o Capítulo 13, que também aborda questões como o estilo do shortcode [gallery], e muito mais.
MODELO DA CATEGORIA A essa altura você já tem postagens como álbuns de fotos, cada qual contendo uma (mas provavelmente mais que isso) imagem, e já está exibindo essas imagens usando o shortcode [gallery]. Em seguida, crie a seção Gallery em seu site, usando um arquivo de modelo de categoria. Há diversas formas de fazer isso, mas a mais fácil seria descobrir a ID da categoria Gallery, analizando o campo de URL na tela de edição, na interface do WordPress (ver Figura 15-7).
Figura 15-7: Como encontrar a ID de categoria
312
CAPÍTULO 15: UTILIZAÇÕES INCOMUNS DO WORDPRESS Para este exemplo, faça de conta que a ID da categoria é 140, por isso seu arquivo de modelo terá o nome de category-140.php. Na seção Gallery, você quer exibir uma miniatura para representar cada álbum (que corresponde a uma postagem, lembra?), e há duas formas de fazer isso. Se quiser mais controle, você pode simplesmente escolher uma das miniaturas e configurá-la como um campo personalizado, de modo que ela será exibida nas listagens de álbuns. Porém, essa é outra coisa que você precisaria modificar, por isso recomendo simplesmente que você selecione uma das fotos anexadas e use-a como uma miniatura ilustrativa que leva ao álbum. A forma como você prefere exibir sua foto fica a seu critério. O código a seguir mostra a solução mais básica, que simplesmente pega um loop tradicional e altera a forma como a postagem é exibida. Mais adiante, neste capítulo, vamos fazer algumas coisas mais legais. Mais uma vez, pode ser uma boa ideia consultar o Capítulo 13 para recapitular a configuração básica de imagens antes de começar a aplicar estilos.Welcome to the Gallery
1, 'post_type' => 'attachment', 'status' => 'publish', 'post_mime_type' => 'image', 'post_parent' => $post->ID ); $images = &get_children($args); foreach ( (array) $images as $attachment_id => $attachment ) { ?>
313
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS
O que está acontecendo aqui é o seguinte: você está usando get_children() para desenterrar os anexos das postagens. Uma vez que o loop oferece uma porção de postagens, você pode usar isso para mostrar a categoria onde se encontra, por exemplo. Esta é a parte interessante: 1, 'post_type' => 'attachment', 'status' => 'publish', 'post_mime_type' => 'image', 'post_parent' => $post->ID ); $images = &get_children($args); foreach ( (array) $images as $attachment_id => $attachment ) { ?>
Os argumentos passados para get_children() informam que apenas uma imagem por loop deve ser obtida, com a configuração de valor 'numberposts', uma vez que você não quer exibir todos os anexos para cada postagem, e sim exibir uma única imagem, como miniatura. Você quer apenas anexos, quer que sejam publicados, eles devem obrigatoriamenrte ser imagens, graças a 'post_mime_type' (já que um vídeo não se encaixaria, por exemplo), e por fim quer que a postagem em si seja o pai. Tudo isso está armazenado em $args pelo array. Tudo isso é carregado em get_children() e então associado a $images, que você usa dentro do array em foreach, abaixo. Isso será executado apenas uma vez, nesse caso, porque
314
CAPÍTULO 15: UTILIZAÇÕES INCOMUNS DO WORDPRESS você quer associar apenas uma imagem por anexo à postagem em si. A partir daqui, tudo fica fácil, com um div que passa uma classe especial pelo post_ class() para facilitar alterações de estilo. A parte wp_get_attachment_image() executa o echo da imagem que pertence à ID de anexo que você obteve a partir de foreach, acima, e em seguida gera a versão em miniatura. O último parâmetro que não é passado se refere à exibição de ícones de mídia, algo que você não quer usar nesse caso. Assim, o resultado final é a miniatura com um link para a postagem (ver Figura 15-8).
Figura 15-8: Visualização de miniaturas Imagem cedida por http://livinghyboria.com
Você precisa trabalhar um pouco com estilos para que a seção fique minimamente apresentável. O código abaixo foi o que usei no site Living Hyboria (http:// livinghyboria.com), do qual retirei o seguinte trecho: div.gallerypost { float:left; margin: 0 0 10px 10px; padding: 10px; background: #e8e8e8; } div.gallerypost:hover { background: #800; } div.gallerypost img.attachment-thumbnail { width: 120px; height: 120px; }
Lembre-se de que talvez você deva mudar o número de postagens exibidas, se estiver exibindo muitas miniaturas. O padrão de 10 postagens por página provavelmente parecerá um pouco vazio, por isso pode ser melhor usar algo próximo de 40, usando query_posts() imediatamente antes do loop:
315
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS ?>
Digamos que você queira adicionar uma breve descrição a cada álbum (lembrando que cada álbum é uma postagem) e listar tudo com a miniatura à esquerda e a descrição à direita. O exemplo a seguir torna a miniatura clicável, assim como o título, que é exibido acima da descrição. O código inclui até mesmo algumas tags, porque eu adoro tags. O código reside no mesmo modelo que o exemplo anterior, por isso o código alterado dentro do loop é exibido aqui:> 1, 'post_type' => 'attachment', 'status' => 'publish', 'post_mime_type' => 'image', 'post_parent' => $post->ID ); $images = &get_children($args); foreach ( (array) $images as $attachment_id => $attachment ) { ?>
Com esse código, você está exibindo a miniatura da mesma forma que antes. Também está obtendo the_title() e integrando um link a isso, e a descrição é obtida usando the_ excerpt(), assim, você pode oferecer aos usuários a possiblidade de assinar um feed RSS da seção Gallery, por exemplo. Essa solução, ilustrada na Figura 15-9, oferece uma visão mais completa do que simplesmente largar uma miniatura em um grid, para cada álbum.
SOBRE OS ÁLBUNS Neste exemplo, cada postagem é um álbum de fotos, contendo todas as imagens exibidas na galeria de miniaturas usando o shortcode [gallery]. Uma vez que seus uploads de imagem em uma determinada postagem são tratados como anexos, você pode navegar até a página de 316
CAPÍTULO 15: UTILIZAÇÕES INCOMUNS DO WORDPRESS anexo (se quiser que o shortcode [gallery] exiba esse link) e visualizar cada página individualmente, com direito ao seu próprio link permanente e tudo o mais.
Figura 15-9: Listagem simples com miniatura e descrição Imagem cedida por http://livinghyboria.com
Você provavelmente precisará alterar o estilo da visualização de postagem individual para adaptá-lo aos seus álbuns. Há diversas formas de fazer isso, e talvez a saída de post_ class() seja o suficiente. Se você quiser exibir, por exemplo, the_excerpt() abaixo da galeria, precisará adicionar isso. Você pode fazê-lo facilmente, adicionando uma tag condicional para realizar uma verificação em uma categoria específica; se ela retornar true irá exibir the_excerpt(), caso contrário não.
Você também pode adicionar um arquivo de modelo para anexos (attachment.php ou image.php, se quiser mergulhar fundo) e alterar o estilo do modelo como quiser. Isso facilitaria muito na hora de adicionar links de navegação e links para o álbum original. Falamos disso em mais detalhes no Capítulo 13, por isso consulte esse capítulo para saber mais sobre como trabalhar com imagens. Outro fator a considerar é se cada imagem deve oferecer a funcionalidade de comentário. Uma vez que cada anexo é, na verdade, uma postagem com uma classificação diferente, essa funcionalidade é possível. Isso significa também que é possível usar inúmeros plug-ins, entre eles plug-ins de avaliação, por isso que tal deixar que as pessoas avaliem suas imagens? Há muitas possibilidades aqui. Uma dessas possibilidades é evitar inteiramente a página de anexo, usando uma forma alternativa de exibir as imagens. Isso geralmente significa usar o efeito Lightbox. Esse efeito também é abordado no Capítulo 13, e para ver recomendações de plug-ins que podem ajudar a implementar essa técnica, consulte o Capítulo 9. 317
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS Não importa como você decide exibir os álbuns e as fotos em si, provavelmente seja uma boa ideia usar um estilo levemente diferente do que você usa em suas postagens comuns. É sempre uma boa ideia ajudar o visitante a saber onde está, dentro de um site.
OUTRAS UTILIDADES Os exemplos anteriores concentraram-se em adicionar uma seção de galeria para qualquer site que publique muitas imagens. Pode ser o seu blog pessoal ou um site de notícias com a cobertura de um evento; as galerias devem ser usadas sempre que houver muitas imagens envolvidas. Uma vez que o WordPress oferece suporte a galerias também entre postagens, com uma pequena adição ao shortcode [gallery], é relativamente fácil criar um álbum na categoria Gallery e então incluir essa galeria específica usando o shortcode [gallery] e o identificador da postagem. Você só precisa passar a ID da postagem para o shortcode [gallery], assim: [gallery id="952"]. Isso exibiria uma galeria de miniaturas como se você estivesse simplesmente passando [gallery] na postagem com a ID em questão. Nada impede que um site expanda sua funcionalidade de galerias para envolver mais categorias e, conforme mencionado no início desta seção, taxonomias personalizadas para obter mais opções de classificação. Na verdade, adicionar uma taxonomia separada para marcar fotos com tags pode ser uma ótima ideia se você não gosta muito de misturar o conteúdo normal com as fotos. O Capítulo 6 contém todas as informações de que você precisa para criar suas próprias taxonomias. Por fim, há também a possibilidade de que as galerias que você publica sejam o conteúdo principal de seu site. Existe uma grande variedade de designs para galerias por aí, com excelentes designs baseados em CSS, ou temas de WordPress (ou qualquer outra coisa, na verdade). Você pode construir esse tipo de site sobre essa premissa, e até mesmo adicionar um elemento de votação, graças aos inúmeros plug-ins disponíveis. Uma vez que os anexos são postagens, tudo que você pode fazer com uma postagem pode ser acessado quando uma imagem é visualizada como anexo. Naturalmente, isso não funciona tão bem quanto usar sobreposições com o efeito lightbox ou ferramentas semelhantes. Se você precisasse construir uma galeria de imagens, provavelmente evitaria o código personalizado para uma categoria e, em vez disso, usaria as galerias como o padrão para a exibição de suas postagens. Nesse tipo de site, a anomalia seria uma postagem de blog/notícia, por isso você usaria o tratamento personalizado para esse post type, e não o contrário. Você pode categorizar ou marcar o conteúdo com tags da forma que desejar e aproveitar ao máximo as possibilidades de the_excerpt(), assim como fez no exemplo da descrição entre os trechos de código do arquivo de modelo de galeria. Na verdade, seria muito fácil levar esse conceito para a página inicial de um site, caso você quisesse exibir uma miniatura.
E AS IMAGENS EM DESTAQUE? Dependendo do tipo de site que está desenvolvendo, talvez você queira usar o recurso de imagens em destaque (featured images) para representar a galeria, ou simplesmente usar uma miniatura, como no exemplo anterior. Na verdade, se você publica apenas galerias, essa pode ser uma solução ainda melhor, uma vez que é mais fácil manter o controle sobre o que é exibido. No entanto, a maioria dos sites contém um grande volume de conteúdo, e há uma boa chance de que você não queira limitar as imagens em destaque às galerias. Nesse caso, escolher uma única miniatura é uma excelente solução. 318
CAPÍTULO 15: UTILIZAÇÕES INCOMUNS DO WORDPRESS FORMATO DE POSTAGEM GALERIA Outra coisa que você deve manter em mente é o formato de postagem galeria (Gallery). Se você ativar esse formato (ver Capítulo 6), pode não apenas alterar ainda mais os estilos de suas postagens de galeria, graças à nova classe gerada por post_class(), mas também pode executar verificações usando conditional tags (como has_post_format()). Essa é definitivamente uma alternativa a ser considerada, sobretudo se seu site é relativamente simplificado, com todo o conteúdo em uma mesma categoria principal, e tudo o que você realmente precisa fazer é alterar o estilo de acordo com o conteúdo da postagem. Os formatos de postagem são uma forma excelente de ter mais controle sobre o conteúdo sem dividí-lo em muitas categorias. Use-os com sabedoria.
UM BREVE ADENDO: OUTRAS UTILIDADES PARA O WORDPRESS Você pode fazer praticamente qualquer coisa com WordPress se quiser. Aqui vão algumas últimas recomendações para inspirar você a continuar criando.
PÁGINA DE EVENTOS E CALENDÁRIO É tão fácil criar um site com WordPress que ele se tornou uma plataforma muito popular para construir sites de eventos. Você pode facilmente classificar coisas como palestrantes e oficinas usando post types personalizados e manter as páginas de informação como Páginas; o blog, naturalmente, fica para suas postagens normais. Esse tipo de configuração é muito fácil de gerenciar, o que explica sua popularidade. A maior decisão em termos de sites de eventos diz respeito à funcionalidade de programação e inscrição. A programação pode ser gerenciada com um serviço de calendário hospedado, mas há diversos plug-ins de calendário disponíveis que podem se ajustar às suas necessidades. Quanto às inscrições, há muitos serviços na Web que oferecem soluções unificadas, que gerenciam tudo, da inscrição ao pagamento, o que é muito útil. Para oferecer ainda mais funcionalidade, dê uma olhada em plug-ins como wp-eCommerce e nos diversos carrinhos de compras disponíveis; eles já foram usados para tudo, de WordCamps a eventos menores, e podem ser uma opção melhor para você.
INTRANETS E COLABORAÇÃO O WordPress, como você já sabe, é muito fácil para os autores trabalharem. Isso faz dele uma plataforma adequada para intranets em que as equipes precisam se comunicar com toda a organização e entre si. Seja com um blog informal para manter todo mundo na empresa informado, ou com uma grande fonte de informação colaborativa durante projetos, a facilidade de uso que o WordPress oferece faz dele uma excelente escolha. Para conseguir todo o poder das intranets maiores, você talvez precise levar o WordPress um pouco mais longe, com plug-ins adicionais e outras ferramentas que ajudem a plataforma a se comunicar com todos os outros sistemas da intranet. Se você precisa de um blog coletivo mais colaborativo, não deixe de conferir o tema P2 (http://wordpress.org/extend/themes/p2), um tema baseado no Twitter, no qual 319
PARTE IV: RECURSOS E FUNCIONALIDADES ADICIONAIS os usuários podem publicar atualizações curtas e longas a partir da página inicial. Algumas empresas usam esse tipo de configuração para comunicação interna, dentro de uma intranet fechada ou usando um plug-in para manter a confidencialidade do conteúdo. Embora o WordPress não seja um wiki, há alguns plug-ins capazes de adicionar também essa funcionalidade. Decidir se o WordPress é a melhor solução pra sua intranet vai depender de suas necessidades; para comunicação ao estilo blog, obviamente ele é perfeito, mas para outras utilidades, você deve avaliar as necessidades da empresa e partir daí.
COMUNIDADES E FÓRUNS Com o advento do plug-in BuddyPress (http://buddypress.org), o WordPress se tornou uma opção viável para comunidades. Graças ao BuddyPress, agora é mais fácil do que nunca criar um site focado nos membros, fazer os usuários se comunicarem em grupos e até mesmo expandir o WordPress para hospedar blogs e fóruns se você quiser. E o melhor é que praticamente qualquer site de WordPress pode ser expandido com a funcionalidade BuddyPress, graças ao pacote de modelos do BuddyPress (http://wordpress.org/ extend/plugins/bp-template-pack/), um plug-in que ajuda você a “converter” seu tema para se adaptar ao BuddyPress. Para os fóruns, o BuddyPress inclui uma versão do bbPress (http://bbpress.org). O futuro do bbPress ainda é um tanto incerto, mas há boas chances de que, no momento em que você estiver lendo este livro, ele já não seja mais um sistema de fóruns autônomo, e sim um plug-in para WordPress. Essa é uma ideia interessante, sem dúvida. Existem também outros plug-ins, mas você definitivamente deve considerar sua capacidade de lidar com o tráfego e com o carregamento de elementos mais pesados. Caso essas soluções não atendam às suas necessidades, você sempre pode recorrer a sistemas de fórum externos, como o Vanilla (http://vanillaforums.org/), que se integra bem com o banco de dados do usuário de WordPress, se você quiser. Sem dúvida, há muita coisa acontecendo na plataforma WordPress, em termos de expansão da funcionalidade para membros (há uma infinidade de plug-ins dedicados apenas ao conceito de membros) e recursos de comunidade.
BANCOS DE DADOS Tudo mudou depois dos post types personalizados. O fato de você poder adicionar diversas camadas superiores de gerenciamento de conteúdo com apenas algumas linhas de código torna o WordPress extremamente versátil. Isso significa também que você pode construir bancos de dados extensos, com qualquer tipo de informação que quiser, e usar o WordPress como intermediário, possivelmente atuando apenas como interface de usuário. Some-se a isso o fato de que você tem feeds RSS para praticamente tudo dentro do WordPress, e tem uma plataforma capaz de facilmente distribuir suas atualizações para outros sistemas. É ousado dizer isso, mas os post types personalizados realmente fazem as possibilidades parecerem infinitas. Evoluímos muito desde as postagens e páginas, não é verdade?
320
CAPÍTULO 15: UTILIZAÇÕES INCOMUNS DO WORDPRESS SITES ESTÁTICOS Existem ainda os sites estáticos, que não precisam de notícias em destaque ou atualizações frequentes. Por que você deveria usar o WordPress para criar um site desse tipo? Não é mais fácil simplesmente modificar os arquivos de HTML? Talvez, mas se você estiver criando um site estático para um amigo ou cliente, desenvolver o site usando WordPress pode economizar muitas dores de cabeça. Talvez trate-se de um site inteiramente constituído por páginas, sem postagens ou categorias ou nenhum elemento personalizado, apenas um punhado de páginas simples que transmitem ao visitante a mensagem do site. Se você usar WordPress, qualquer pessoa será capaz de atualizar essas páginas. Ninguém precisará chamar você porque o mercadinho da esquina mudou seu horário de funcionamento ou importuná-lo para que acrescente uma nova página sobre o novo escritório na cidadezinha vizinha. Sites estáticos simples criados com WordPress podem levar um pouco mais de tempo para desenvolver, mas economizam muitas edições inoportunas no longo prazo. Talvez isso não seja o que você quer, se estiver cobrando seus cliente por hora de trabalho, por exemplo, mas faça o favor (a eles e a si mesmo) de entregar o melhor produto possível desde o início. Com certeza, você vai se sentir melhor.
VOCÊ PODE CONSTRUIR O QUE QUISER Bem, talvez não qualquer coisa – até o WordPress tem limites –, mas praticamente isso. O WordPress é uma plataforma extremamente versátil, e a maioria dos sites centrados em conteúdo funcionam perfeitamente com um trabalho mímimo de personalização do sistema. Graças à flexibilidade dos temas e à expansibilidade oferecida pelos plug-ins, você realmente pode fazer quase tudo com o WordPress. Toda a ideia por trás deste capítulo é ajudar você a adotar esse pensamento. Sempre que começo a pensar em um novo projeto, seja ele um site pessoal ou algo para um cliente, fico brincando com o conceito em minha mente até chegar a uma conclusão sobre como concretizá-lo da forma mais rápida possível. Na maioria dos casos, o WordPress é a solução para fazer isso. Embora você talvez não seja capaz de construir tudo usando WordPress, vai descobrir que a maioria das suas ideias pode ser concretizada usando essa adorável plataforma.
321
ÍNDICE
ÍNDICE SÍMBOLOS E CARACTERES NUMÉRICOS
WP e-Commerce, 198–9 WP-Mail SMTP, 201–2 WP No Category Base, 196–8 anatomia, 167 desvantagens, 188 funcionalidade para, 173–9 fundamentos básicos, 168–70 hospedagem, 187 incorporação, 170–4 multisites, 185–7 suporte a widget para, 178–85 arquivo functions.php, 28–9, 189 assinatura, 204–5 backups, 17 como alternativa ao loop, 56 comparação com campos personalizados, 133–4 comparação com temas, 163–4 criação, 26 desnecessários, 213–4 durante a instalação, 15–6 efeito lightbox, 266 ferramentas de exportação/importação, 18 feeds RSS, 236–5 galerias, 267 ganchos de ação com, 142–3 gerenciamento de comentários BackType Connect, 202–3 com sistemas de gerenciamento de conteúdo, 226 CommentLuv, 202–3 Cookie for Comments, 202–3 Disqus Comment System, 202–3 Get Recent Comments, 202–3 IntenseDebate Comments, 202–3 ReplyMe, 202–3 integração com Facebook Connect, 87 localização, 27 manutenção, 129–30 mecanismos de busca/mecanismo de busca otimização, 205–7 media, 195–7 mobile, 204–6 para conteúdo, 194–6 para funcionalidade especial, 132–3 para logins, 22–3, 257 para mover diretórios, 15–6 para randomizar elementos de imagem, 267 redes sociais Add to Any, 203–4 botões de envio, 239–41 comentários, 241–3 Facebook, 230–1 Lifestream, 203–4 SexyBookmarks, 204–5 ShareThis, 203–4 Simple Social Bookmarks, 204–5 Sociable, 203–4 Tweet Old Post, 204–5
& (E comercial), 34–5 _ _ () arquivo, 155–6 404 (páginas de erro) com publicidade, 253–4 funcionalidade adequada, 117–8 modelo sem loop, 40 sobre, 81–2, 101–4, 255–6
A add_action() arquivo, 96 Add Custom Field (botão), 63
add_editor_style() arquivo, 90 add-ons (complementos) administrativos Advertising Manager, 200–1 Branded Admin, 197–8 Broken Link Checker, 198–9 Custom Post Type UI, 201–2 Editorial Calendar, 201–2 Fast Secure Contact Form, 197–8 FeedWordPress, 200–1 Google Analyticator, 198–9 Google Analytics for WordPress, 198–9 Maintenance Mode, 197–8 Members, 201–2 Members Only, 200–1 More Fields, 199–200 No Self-Pings, 196–7 Pods, 199–200 Post Editor Buttons, 200–1 Pretty Link, 199–200 Random Redirect, 200–1 Redirection, 199–200 Revision Control, 201–2 Shockingly Big IE6 Warning, 197–8 Sidebar Login, 197–8 TDO Mini Forms, 198–9 Theme My Login, 197–8 TinyMCE Advanced, 200–1 Viper’s Video Quicktags, 200–1 Widget Context, 201–2 Woopra Analytics Plug-in, 200–1 WordPress Download Monitor, 199–200 WordPress Simple PayPal Shopping Cart, 198–200 WordPress.com Stats, 198–9 wp-db-backup, 17 WP-DB-Backup, 197–8 WP-Mail SMTP, 201–2 WP-DB-Backup, 197–8
323
ÍNDICE Twitter, 234–5 Twitter for WordPress, 203–4 Twitter Tools, 203–4 Wickett Twitter Widget, 203–4 sobre, 193 spam Akismet, 201–2 CAPTCHA, 202–3 Really Simple CAPTCHA, 202–3 TypePad AntiSpam, 201–2 WP-Hashcash, 202–3 WP-SpamFree Anti-Spam, 201–2 tema da interface de admin como, 214–6 temas filhos como alternativa, 192 usabilidade, 106–7 utilizações incomuns calendário, 319–20 conteúdo enviado pelos usuários, 291–4 fotos, 317 inscrição dos usuários, 289 para sites de compras, 299–300 páginas de eventos, 319–20 sites de links, 310–1 validade, 190–2 add_theme_support() arquivo, 53, 89–90 Add to Any, 203–4 Advertising Manager, 200–1 Akismet, 201–2 alertas, bases de conhecimento FAQ, 298–9 alertas com plug-ins, 194 Align RSS Images, 204–5 All in One SEO Pack, 205–6 ampersand (&), 34–5 anexos, 17, 262 anúncios em postagens sticky, 139 Apache .htaccess, 22–3 aprovação para plug-ins, 187
assinaturas bases de conhecimento FAQ, 298–9 feeds RSS, 134–5, 158–162 plug-ins, 204–5 assistente de importação, 19 assistentes, importação, 19 ativação de plug-ins, 186–7 atualizações automáticas/upgrades backups, 15–6 plug-ins, 184–5, 187 temas, 115, 118–9 atualizações de status, 52–3 atualizações/upgrades alterações no banco de dados, 14 automáticos, 15–6, 115, 118–9, 184–5, 187 com temas filhos, 122, 125 desvantagens, 15–6 melhorias de segurança, 11–2, 21–2 PHP Hypertext Preprocessor, 184–5 plug-ins, 187 sobrescrever, 26 Automattic (fabricante do WordPress), 242–3, 253–4, 288 autorun para plug-ins, 186–7 AutoThumb, 196–7
B BackType Connect, 202–3 backups de hospedagem na Web, 17 alternar, 18–22 externas, 240–1 instaladores, 11–3 soluções de comentários, 241–4 plug-ins, 187 backups antes/duante a instalação, 15–7, 21–2 do WordPress, 15–7 WordPress Codex, 20–1 bancos de dados com Multisites, 186–7 como componente do blog, 15–6 desinstalação de plug-ins, 176–8 durante a instalação, 10–2, 14–6 gerenciamento integrado, 17 oportunidades, 320–1 plug-ins, 184 servidores externos, 10–2 sobrecarga, 57 tabelas, 15, 186–7 bancos de dados de gerenciamento integrados, 17 barreiras, 220–1 base de conhecimento FAQ, WordPress como, 295–9 bbPress, 212, 320–1 Better Search, 205–6 bibliotecas, JavaScript, 255–6 Bit.ly (encurtador de URL), 236 Blog Time, 207–8 bloginfo(), template tag, 30–3, 35, 79, 159–60 blogs. Ver também WordPress; tópicos específicos componentes, 15–7 configurações, 19, 41
$args array, 268 armazenamento backups, 17 imagens, 270 plug-in conteúdo, 173–4 arquivo archive.php, 291–2 arquivos, 22–3, 100, 132–3 arquivos de áudio, 52–3 arquivos de objeto de máquina, 153–6 arquivos de sistema, 27 arquivos de tag pública, 132–3 arquivos de usuários, 22–3 envio de conteúdo como base de conhecimento FAQ, 295–9 quadros de vagas de emprego, 288–96 tipos, 309–10 limitações de privilégios, 213–4 manuais, 227 arquivos do núcleo, 17, 26–7 arquivos index, 22–3 arquivos. Ver arquivos específicos arrays, 60–1 aside (formato), 52–3
324
ÍNDICE impressão, 285–6 instalação, 10–3 mover, 21–2 segurança, 22–3 temas, 27–9 template tags, 30–2 body_class(), template tag, 53, 78, 136–9 Booleans, 35–6 botões Add Custom Field, 62–3 de envio, 239–42 Facebook, 230–1 Post Editor, 200–1 Twitter, 232–4 botões/links de envio, 239–42 Branded Admin, 197–8 Breadcrumb Trail, 206–7 Broken Link Checker, 198–9 BuddyPress, 212, 320–1 busca bases de conhecimento FAQ, 298–9 quadros de vagas de emprego, 291–2 sobre tags, 133–4
C cabeçalhos imagens, 64–5 modelos, 290 no style.css, 70 personalização, 140–1 cache conteúdo, 238–40, 278–9 feeds RSS, 239–40 caixas com abas, 276–9 calendários, 201–2, 319–20 campos, personalização com plug-ins, 190–1 como alternativa a postagens sticky, 140–1 in design, 247 sobre, 62–5, 111–4 taxonomias, 151–2 usabilidade, 133–4 cancel_comment_reply_link(), 110–1 CAPTCHA, 202–3 Cascading Style Sheets (CSS) código, 51 classes, 53, 78, 137–8, 203–4 folhas de estilo, 73–6 limitações, 64 sliding doors (portas deslizantes), 249–52 categorias aplicar estilos com, 133–6 arquivos, 41 baseadas em design, 246 checklist, 213 IDs, 54–5 modelos, 312–3 para postagens, 144–5 postagens como, 311–2 taxonomias, 144–5
category.php (arquivo), 125–6, 133–4 category-X.php (arquivo), 133–4 citações, 52–3, 223-4 classes em estilo de body, 136–9 classificação conteúdo, 132–3 de temas, 118–20 ordem, 11–2 tags, 32–3, 35, 311–2 CMS. Ver sistemas de gerenciamento de conteúdo (CMS) código conditional tags, 37 design JavaScript, 256 postagens, 246–52 publicidade, 252–4 temas de admin, 258 em sistemas de gerenciamento de conteúdo, 214–5, 221, 223–6 funcionalidade caixas com abas, 276–8 e-mail, 282–4 feeds RSS, 280, 282 formulários de login, 284–5 impressão de blog, 285 HTML, 43, 220–21 imagens galerias, 264–5 randomização, 268, 268–9 instalação alteração de domínio, 15–6 criptografia SSL, 22–3 erros de conexão com o banco de dados, 10–1 header.php (arquivo), 21–2 idiomas, 10–1 locais de diretório, 14–6 Secret Keys, ordem de classificação, 11–2 wp-config-sample.php (arquivo), 10 loops arquivos de modelo, 41–2 básico, 40 campos personalizados, 64, 65 exemplos, 43, 45–9 formatos de postagem, 53 múltiplos, 57–62 postagens sticky, 49, 51 query_posts(), 54–6 omissão de versão, 78 plug-ins funcionalidade, 173–7 fundamentos básicos, 168–9 incorporação, 170–1 widgets, 178–83 redes sociais Facebook, 230–1 links de envio, 240–2 sintaxe, 30–5 Twitter, 232–4 shortcodes, 177–9 temas campos personalizados, 111–4 comentários, 85–7, 110–2 design, 75–6
325
ÍNDICE footer.php (arquivo), 87–9 functions.php (arquivo), 88–97, 103–6 header.php (arquivo), 75–8 index.php (arquivo), 79 layout, 74–5 loop.php (arquivo), 80–4 modelos, 101–4 páginas, 100–2 postagens, 75–6 resetar segmento, 74 sidebar.php (arquivo), 84 style.css, 73 widgets, 106–9 temas filhos, 123–5 temas, tópicos avançados design condicional, 156–9 estilos, 135–8 ganchos de ação, 142–4, 144–6 páginas de opções, 152–4 personalização de recursos, 140–1 taxonomias, 148–51 utilizações incomuns bases de conhecimento FAQ, 296–8 diretórios de produtos, 301–6 fotos, 313–7 quadros de vagas, 290–1, 293–4 sites de links, 307–11 código HTML, 43, 220–1 código malicioso, 27 colaboração, 319–21 colação, 11–2 com temas filhos, 128 comentários do instrutor, 111–12 comentários. Ver também add-ons, gerenciamento de comentários em redes sociais, 241–4 em temas, 108–12 no arquivo functions.php, 95–7 saída, 32–3 sobre, 132–3 CommentLuv, 202–3 comments.php (arquivo), 28–9, 70–1, 73, 85–7 comparação com taxas de consultoria e licenciamento, 212 compartilhamento de imagens, 270–74 compatibilidade reversa, 121, 178–9 compressão para a Web, 268–9 conditional tags como alternativa ao loop, 56 design, 156–9, 249 index.php (arquivo), 55 is_sticky(), 140–1 para títulos, 78 query_posts() com, 54 sobre, 37 configuração de site, 8 configurações alteração, 19 banco de dados, 11–2 no arquivo functions.php, 88–90 plug-ins, 173–7 configurações de largura, 104–5 conjunto de caracteres, 11–2
326
$content_width (arquivo), 104–5 conteúdo assinaturas de feed RSS, 134–5, 158–62 cache, 238–40, 278–9 controle, 247 controle do fluxo, 54 enviado pelos usuários, 288–96 estático, 100 largura, 104–5 plug-ins, 173–4, 194–6 randomização, 267–270 shortcodes, 178–9 tipos, 132–3 conteúdo editorial, 132–3, 201–2, 212 conteúdo em destaque imagens, 318 plug-ins para, 196–7 postagens, 44, 58–60 conteúdo estático, 15–7, 100, 132–3, 320–1 conteúdo externo ao WordPress, 225–7 $control_callback parâmetro, 183 Cookie for Comments, 202–3 credenciais, 22–3 credenciais da conta, 22–3 creenshot.png no lançamento de temas, 118–9 criptografia, 15–6, 22–3 cronjobs/tarefas agendadas, 238–40, 278–9 CSS (Cascading Style Sheets) classes, 53, 78, 137–8, 203–4 código, 51 folhas de estilo, 73–6 limitações, 64 sliding doors (portas deslizantes), 249–52 Custom Post Type UI, 201–2
D dados desinstalação, 184 personalização, 111–3, 133–4 tipos, 35–6 dados de postmeta, 95–6 dashboard_reminder() (função), 182 datas de postagens, 35–6 declaração, 155–6 declaração de widgets, 106–8 desativação de plug-ins, 186–7 “desblogar” o WordPress, 216–8 Desenvolvedor FAQ para o Diretório de plug-ins, 187 design condicional, 156–9 para múltiplos sites, 129–30 truques 404 páginas de erro, 255–6 alterações pessoais, 256–8 aprimoramento de sites, 258 bibliotecas JavaScript, 255–6 menus, 249–53 postagens, 246–9 publicidade, 252–4 sobre, 245 design, 129–30
ÍNDICE desinstalação de dados , 184 plug-ins, 176–8, 186–7 destacar comentários do autor, 111–2 destaque de autor, 111–2 desvantagens arquivos do núcleo, 26 atualizações/upgrades, 15–6 bancos de dados do WordPress, 15 compressão para a Web, 268–9 efeito lightbox, 266 galerias de imagens externas, 267 imagens, em movimento, 19 menus baseados em hover, 252–3 mudanças de serviço de hospedagem na Web, 19–21 plug-ins, 172, 187–8 query_posts(), 55 servidores de banco de dados externos, 10–2 tags na tradução de idiomas, 156–7 temas filhos, 128 dimensionar imagens, 262 diretórios de produtos, 300–7 Disable RSS, 204–5 Disqus Comment System, 202–3, 242–4 div.job-listing, 291–2 div#sidebar-container (arquivo), 85–6 div#site-header (arquivo), 79 domínios alterações, 14–6 encurtamento, 199–200 redirecionamento, 18, 19 $do_not_duplicate (array), 60–1 $do_not_duplicate (objeto), 59 Drupal, 212 dynamic_sidebar() (arquivo), 79, 85–6
E e-commerce, 299–301 echo (declarações), 155–6 economia do compartilhamento de imagens, 271–2 edit_comment_ link() (arquivo), 32–3 edit_post_link() (arquivo), 32–3, 35 editar bancos de dados, 14–5, 19 bases de conhecimento FAQ, 298–9 código, 162–4 desvantagens da substituição, 122 .htaccess, 27 para otimização de mecanismos de busca, 161–3 posts, 15–6, 22–3 editores, 22–3, 213–4 editor-style.css, 89–90 Editorial Calendar, 201–2 efeito lightbox, 265–66, 317 E-junkie, 300–1 elementos dinâmicos, 132–3 elementos obrigatórios em lançamentos de tema, 115, 118–9 em plug-ins, 168–9, 187 else (cláusula), 41
e-mail, 159–60, 282–4 endif loops, 41 endwhile loops, 41 envio para wordpress.org, 118–20 esboço, 132–5 escala de imagens, 262 escrever postagens, 22–3 estatísticas, 142–3 estilo folhas de estilo, 291–4 galerias, 263–7 postagens, 317 sobre, 134–41 estilo de body class, 136–9 estrutura modular, 212 Exec-PHP, 207–8
F Facebook, 230–1, 242–3 Facebook Connect, 87, 243–4 Fantastico, 11–3 Fast Secure Contact Form, 197–8 Featured Content Gallery, 196–7 $featured_query, 58–9 Feedburner, 159–60 feeds RSS assinaturas, 105–6, 134–5 atualização distribuição, 320–1 cache, 239–40 como envio de tema requisito, 118–9 com sistemas de gerenciamento de conteúdo, 226 em redes sociais networking lifestreaming, 236 sobre, 229 exibir, 278–82 parsers, 236, 237 sobre, 158–62 feeds RSS completos, 159–60 FeedWordPress, 200–1, 238–9 ferramentas de exportação/importação, 18–9 ferramentas de importação, 18–9 fetch_feed() array, 282 Flickr, 270–4 Footer Notes (plug-in), 173–7 footer.php (arquivo) código, 87–9 no arquivo index.php, 31–2, 71, 79 no tema Notes Blog, 73 sobre, 28–9, 290 format-aside (classe), 53 formato postagens, 52–3, 89–90, 133–4, 309–10, 319–20 temas, 117–8 fotos. Ver também imagens compartilhamento, 268–9 organização, 311–20 YouTube, 270–2
327
ÍNDICE frameworks (estruturas), 130, 142–3 funcionalidade com ganchos de ação, 142–3 com plug-ins, 167, 170–1, 173–9, 190–1 com temas filhos, 129–30 comentários, 241–3 como consideração do WordPress, 213–4 de base de conhecimento FAQ, 296–9 especializado, 132–3 planejamento, 192 substituição, 172 tópicos avançados caixas com abas, 276–9 e-mail, 282–4 formulários de login, 283–5 impressão de blog, 285–6 RSS feeds, 278–82 sobre, 275 funcionalidade de arrastar e soltar, 106–7 funcionalidade especial, 132–3 funcionalidade wiki, 320–1 funções “plugáveis”, 172 functions.php (arquivo) código, 88–97 com temas pais, 129–30 desvantagens, 164 ganchos de desenvolvedor, 83 indicações, 191–2 no arquivo index.php, 79 papel do tempo de carregamento, 153–4 plug-ins, 28–9, 189 temas filhos como alternativa, 192 shortcodes, 222–4 sobre, 103–7
Google Analytics for WordPress, 198–9 Google Custom Search Engine (listagens de resultados, 134–5 Google Feedburner, 159–60 Google XML Sitemaps, 205–6 GPL (licenciamento) gráficos, 261 Gravatar.com, 118–9, 241–2 instalação guiada, 8–9 plug-ins, 187 sobre, 115, 118–9 WordPress Codex idioma, 168–9
H have_posts() (arquivo), 42, 58–9 header.php (arquivo) ganchos de desenvolvedor, 83 no arquivo index.php, 31–2, 71 no tema Notes Blog, 73, 75–9 sobre, 28–9, 290 código, 21–2 HeadSpace2 SEO, 205–7 hierarquia, modelos, 99 home.php (arquivo), 55, 72 hospedagem de alternar, 18–22 backups, 17 externas, 240–1 instaladores, 11–3 plug-ins, 187 soluções de comentários, 241–4 .htaccess, 22–3, 27
I
G
imagens backups, 17 com sistemas de gerenciamento de conteúdo, 226 compartilhamento, 270–4 de fundo, 141, 249–52, 270 download, 19 em cabeçalhos, 64–5 em campos personalizados, 133–4 em destaque, 318 em diretórios de produtos, 306–7 em postagens, 112–3, 312–3 escala, 262 fotos compartilhamento, 268–9 organização, 311–20 YouTube, 270–72 galerias, 262–7 poluição, 274 randomização de elementos, 267–70 sobre, 261 vídeos, 17, 52–3, 226 imagens de fundo, 141, 249–52, 270 Include Tags There, 31–2 inclusão de conteúdo dos usuários, 293–4 index.php (arquivo) como fallback, 99 como foco, 72
galerias, 52–3, 262–67, 311–20 Gallery2, 267 ganchos com plug-ins, 189 de ação, 130, 142–6, 170, 257 de filtro, 170–1 em functions.php, 93–6 para desenvolvedores, 78, 83 ganchos de ação, 130, 142–6, 170, 257 ganchos de filtro, 170–171 GD Press Tools, 206–7 GD Star Rating, 195–6 gerador de strings aleatórias, 10 get_comments() (chamadas), 71, 216 get_footer()(chamadas), 71, 79 get_header()(chamadas), 71, 79 Get Recent Comments, 202–3 get_sidebar()(chamadas), 71, 79 get_template_part()(chamadas), 41, 79 Global Translator, 206–7 GNU (software de idiomas), 156–7 goo.gl (encurtador de URL), 236 Google AdSense, 253–4 Google Analyticator, 198–9
328
ÍNDICE em sistemas de gerenciamento de conteúdo, 216 em temas, 70–1, 79, 115 loops, 41, 55 sobre, 28–9 inglês como padrão, 9–11 inicialização do WordPress, 78 inscrição (sign-in) bases de conhecimento FAQ, 298–9 com Apache .htaccess, 22–3 envios de conteúdo pelo usuário, 288 formulários, 283–5 personalização, 257–8 unificado, 243–4 instalação de diretórios, 8, 13–4 de plug-ins, 187 de temas, 115 produto, 300–7 instalação backup, 15–7 bancos de dados, 10–2, 14–6 básica, 8–9 diretórios, 13–4 manual, 10–1 serviços de hospedagem, 15–7 sobre, 7–8 instalação básica, 8–9 “instalação em cinco minutos,” 8 instalação em um clique instalação/upgrades, 11–3 instalação manual, 10–1 instaladores, 11–3 IntenseDebate Comments, 202–3, 242–3 interface de admin ajustes, 213–5 checklist, 213 páginas de opções, 152–3 temas, 214–6, 258 interrupções, soluções de comentários hospedadas, 242–3 intranets, 319–21 is_front_page() (arquivo), 79 is_home() (arquivo), 79 is_singular()(arquivo), 84 is_sticky() (conditional tag), 140–1
J JavaScript bibliotecas, 255–6 efeito lightbox, 266 para respostas, 78 jQuery Lightbox, 196–7 jQuery, 255–6 kits para iniciantes, 227
L largura de banda, 270 LaunchPad (software de idioma), 156–7 layout, 70, 132–3. Ver também tópicos específicos de layout licenciamento GPL língua do WordPress Codex, 168–9
plug-ins, 187 sobre, 115, 118–9 informações plug-ins, 168–9, 173–4, 187 temas, 115 taxas, 212 Lifestream, 203–4 lifestreaming, 236–40 Lightbox Gallery, 195–7 Like (botão do Facebook), 230–1 links afiliados, 299–300 em diretórios de produtos, 306–7 sites, 307–12 enviar, 239–42 para miniaturas, 264 links afiliados, 299–300 links da página de autor, 22–3 Living Hyboria (site), 315–6 localização como consideração do WordPress, 213–4 idiomas, 81–2, 89–90 plug-ins, 173–4 tags, 72 logins bases de conhecimento FAQ, 298–9 com Apache .htaccess, 22–3 envio de conteúdo do usuários, 288 formulários, 283–5 personalização, 257–8 unificados, 243–4 loop.home.php (arquivo), 290 loop.index.php (arquivo), 32–3, 79 loop.php (arquivo), 41–2, 79–84, 125–6 loop-category.php (arquivo), 125–6 loops adquirir experiência, 66 alternativas, 56–7 com plug-ins, 190–2 compreensão, 40–2 em diretórios de produtos, 306–7 múltiplos, 57–63 personalização, 62–5, 112–3 publicidade, 252–4 sobre, 28–9, 38–39 utilização consulta de postagens, 54–6 formatos de postagem, 52–3 postagens sticky, 49–3 sobre, 42–9 loops básicos, 40
M Manage Themes (página), 28–9 manchetes, 112–3, 140–1 manchetes ao estilo de revistas, 112–3 manuais, 227 manuals, 227 manutenção programada, produtos de terceiros, 242–3, 267 MD5 treatment, 15–6
329
ÍNDICE footer.php (arquivo), 87–9 functions.php (arquivo), 88–97 ganchos de ação, 144–6 header.php (arquivo), 75–9 index.php (arquivo), 79 loop.php (arquivo), 80–4 listagens de galeria com miniaturas, 264 sidebar.php (arquivo), 84–6 style.css, 73–7 sobre, 72–3 tradução de idioma, 154–6 notesblog_above_footer()(arquivo), 87
Members, 201–2 Members Only, 200–1 menus em áreas para widgets, 221–2 em diretórios de produtos, 306–7 melhoria, 249–53 no arquivo functions.php, 89–1 personalização, 140–1 wp_nav_menu() (arquivo), 79 menus baseados em hover, 252–3 mercadorias digitais, 299–301 metadados para postagens, 112–3 microblogging, 234–5 mídia configurações, 262 plug-ins, 195–7 .mo (arquivos), 153–6 MobilePress, 204–5 mod_rewrite (instalação), 8 modelos e-commerce, 302–3 em temas, 70, 96–104 estilos, 135–6 página, 28–9 para categorias, 312–3 tags, 26, 30–7, 56, 171–2 modificando bancos de dados, 14–6 modo de manutenção, 197–8 MooTools, 255–6 More Fields, 199–200 mudança de URLs, 18 encurtadores, 234–6 indicadores na página inicial, 79 para feeds RSS, 159–62 Mullenweg, Matt (desenvolvedor), 212 multifeeds, 281 múltiplas áreas para widgets, 107–8 múltiplos idiomas, 153–7 múltiplos loops, 57–63 múltiplos sites sobre, 185–7 MySQL atualizações/upgrades, 184–5 bancos de dados durante a instalação, 10 durante mudanças de serviço de hospedagem na Web, 20–1 localização, 10–2 senhas, 15–6 usuários, 22–3 versão 4.0, 8
notesblog_above_post_title_listing()(arquivo), 83 notesblog_above_site() (arquivo), 78 notesblog_add_postmeta_below_title()(arquivo), 95–6, 145–6
notesblog_below_menu() (arquivo), 78 notesblog_below_post_title_listing()(arquivo), 83 notesblog_below_post_title_single()(arquivo), 145–6
notesblog_below_site() (arquivo), 87 notesblog_comment (arquivo), 86 notesblog_inside_head() (arquivo), 78 números inteiros, 35–6 nuvens de tags, 32–4
O objetos. Ver objetos específicos obter postagens, 55 ocultar elementos desnecessários, 213–5 opções específicas, 151–2 open source (produtos), WordPress como, 8 OpenID, 243–4 ordem de classificação ascendente, 35 ordem de classificação descendente, 35 otimização de mecanismos de busca (SEO) méritos do WordPress, 227 plug-ins, 205–7 sobre, 79, 161–3
P P2 (tema), 288, 319–20 padrão arquivos index, 22–3 configuração de largura do conteúdo, 104–5 idiomas, 9–11 reverter para, 15–6 usuários de admin, 22–3 UTF-8 (codificação de caracteres), 11–2 padrões com plug-ins, 173–4 como consideração do WordPress, 213–4 de idioma, 9–11 localização, 81–2, 89–90 localização com, 72 múltiplos, 153–7 padrões para o lançamento de temas, 115 page.php (arquivo), 28–9 página inicial, 290, 298–9
N navegação, 81–2, 89–90 navegação com lightbox, 265–66 NextGEN Gallery, 195–6 No Self-Pings, 196–7 Notes Blog (tema). Ver também temas comments.php (arquivo), 85–7 disponibilidade, 113–5
330
ÍNDICE páginas checklist, 213–4 edição, 22–3 estáticas, 100, 132–3, 217–9 méritos, 133–5 modelos, 28–37, 99, 100 para e-commerce, 302–6 para eventos, 319–20 personalização, 219–20 opções, 151–4 páginas de introdução em Flash, 190–1 páginas de opções, 151– 4 páginas/temas de eventos, 125–6, 319–20 parâmetros com edit_post_link()(arquivo), 32–3 com nuvens de tags, 34 com template tags, 31–3, 35 para feeds RSS, 161–2 plug-ins, 171 parar o WordPress, 71 parsers, 236–9, 278–9 pastas raíz, 13 PayPal, 295–6, 299–300 permalinks, 13, 159–60, 213–4 personalização cabeçalhos, 140–1 campos com plug-ins, 190–1 como alternativa a postagens sticky, 140–1 no design, 247 sobre, 62–5, 111–4 taxonomias, 151–2 usabilidade, 133–4 dados, 111–3, 133–4 de temas, 118–9 logins, 257–258 loops, 112–13 menus, 140–1 páginas, 219–20 planos de fundo, 89–90, 141 postagens, 134–5, 219–20, 298–301, 320–1 postagens sticky, 140–1 recursos, 140–1 shortcodes, 222–6 sites do tipo jornal, 132–3 taxonomias, 133–4, 219–20 widgets, 107–9 personalização de recursos, 140–1 PhotoQ Photoblog Plug-in, 196–7 PHP Hypertext Preprocessor atualizações/upgrades, 184–5 para randomizar elementos de imagem, 267 sobre, 26 tipos, 28–9 versão r. 7, 8 PhpMyAdmin, 15–7, 20–1 plug-ins administrativos, 196–202 plug-ins administrativas Advertising Manager, 200–1 Branded Admin, 197–8 Broken Link Checker, 198–9
Custom Post Type UI, 201–2 Editorial Calendar, 201–2 Fast Secure Contact Form, 197–8 FeedWordPress, 200–1 Google Analyticator, 198–9 Google Analytics for WordPress, 198–9 Maintenance Mode, 197–8 Members, 201–2 Members Only, 200–1 Monitor, 199–200 More Fields, 199–200 No Self-Pings, 196–7 Pods, 199–200 Post Editor Buttons, 200–1 Pretty Link, 199–200 Random Redirect, 200–1 Redirection, 199–200 Revision Control, 201–2 Shockingly Big IE6 Warning, 197–8 Sidebar Login, 197–8 TDO Mini Forms, 198–9 Theme My Login, 197–8 TinyMCE Advanced, 200–1 Viper’s Video Quicktags, 200–1 Widget Context, 201–2 Woopra Analytics Plug-in, 200–1 WordPress Download WordPress Simple PayPal Shopping Cart, 198–200 WordPress.com Stats, 198–9 WP-DB-Backup, 197–8 WP e-Commerce, 198–9 WP-Mail SMTP, 201–2 WP No Category Base, 196–8 anatomia desvantagens, 188 fundamentos básicos, 168–70 funcionalidade, 173–9 hospedagem, 187 incorporação, 170–4 multisites, 185–7 sobre, 167 suporte a widgets, 178–85 aprovação, 187 assinatura, 204–5 ativação, 186–7 backups, 17 com ganchos de ação, 142–3 com sistemas de gerenciamento de conteúdo, 226 como alternativa ao loop, 56 comparação com campos personalizados, 133–4 comparação com temas, 163–4 criação, 26 desinstalação, 176–8, 186–7 desnecessário, 213–4 durante a instalação, 15–6 efeito lightbox, 266 ferramentas de exportação/importação, 18 feeds RSS, 236–40 focado em conteúdo, 194–6 functions.php (arquivo), 28–9, 189 galerias, 267 gerenciamento de comentários BackType Connect, 202–3 CommentLuv, 202–3 Cookie for Comments, 202–3
331
ÍNDICE Disqus Comment System, 202–3 Get Recent Comments, 202–3 IntenseDebate Comments, 202–3 ReplyMe, 202–3 indicações, 190–2 integração com Facebook Connect, 87 localização, 27 manutenção, 129–30 mecanismos de busca/SEO, 205–7 mídia, 195–7 móvel, 204–6 para funcionalidade especial, 132–3 Para logins, 22–3, 257 para mover diretórios, 15–6 para randomizar elementos de imagem, 267 redes sociais Add to Any, 203–4 botões de envio, 239–41 comentários, 241–3 Facebook, 230–1 Lifestream, 203–4 SexyBookmarks, 204–5 ShareThis, 203–4 Simple Social Bookmarks, 204–5 Sociable, 203–4 Tweet Old Post, 204–5 Twitter, 234–5 Twitter for WordPress, 203–4 Twitter Tools, 203–4 Wickett Twitter Widget, 203–4 sobre, 193 spam Akismet, 201–2 CAPTCHA, 202–3 Really Simple CAPTCHA, 202–3 TypePad AntiSpam, 201–2 WP-Hashcash, 202–3 WP-SpamFree Anti-Spam, 201–2 tema da interface de admin, 214–6 temas filhos como alternativa, 192 usabilidade, 106–7 utilizações incomuns calendários, 319–20 envio de conteúdo pelos usuários, 291–4 fotos, 317 páginas de eventos, 319–20 para sites de compras, 299–300 registro do usuário, 289 sites de links, 310–1 wp-db-backup, 17 plug-ins de código e saída, 206–8 plug-ins em todo o site, 186–7 plug-ins móveis, 204–6 .po (arquivos), 153–7 Podcasting, 196–7 Pods, 199–200 PoEdit (language software), 156–7 poll widgets, 132–3 PollDaddy, 195–6 poluição com imagens, 268–9, 274 em bancos de dados, 177–8 em sites, 244 evitar, 13
interface de admin, 213–4 itens raramente usados, 278–9 menus, 249 plug-ins, 239–41 pontuação com sintaxe, 32–6 popular conteúdo/menus, 132–3, 140–1 Popularity Contest, 194 portable object template (POT) (arquivos), 153–7 post_class(), template tag, 49–51, 78, 134–7, 291–2 post_ID, template tag, 135–6 Post Editor Buttons, 200–1 postagens checklists, 213–4 com fotos, 311–20 com imagens, 19, 311–20 como categorias, 311–2 controle, 246–49 edição, 15–6 em bases de conhecimento FAQ, 295–9 em destaque, 44, 58–60 estilo, 134–5, 135–7 formato, 52–3, 89–90, 133–4, 309–10, 319–20 limitar, 55 metadados para, 112–3 número exibido, 315–6 para e-commerce, 300–1 personalização, 62–3, 134–5, 219–20, 320–1 postagens sticky, 49–53, 138–41 saída, 32–3 tags, 42–4 taxonomias, 144–5 verificações, 41 postagens sticky, 49–53, 138–41, 295–6 POT (portable object template) (arquivos), 153–7 precedência de classes body, 137–9 de postagens, 49, 139 de tags, 134–5 de temas, 125 Pretty Link, 199–200 privilégios de escrita, 10, 22–3 problemas de desenvolvimento, 116 produtos comerciais e-commerce, 299–300 envios de vagas de emprego, 295–6 temas, 115, 118–9, 125–6 programas de FTP, 10 promoções em áreas de widget, 220–1 Facebook, 230–1 no arquivo functions.php, 105–7 RSS feeds, 159–60 Twitter, 232–6 promoções especiais, 132–3, 159–60 Prototype, 256 publicidade, 252–4, 266, 293–6
Q quadros de vagas de emprego, 288–96 queries banco de dados, 191–2
332
ÍNDICE estilo, 34–5 feeds para RSS, 160–2 Query Posts, 207–8 query_posts(), 54–8, 60–1, 302–3
R RAND, ordenamento 35 Random Redirect, 200–1 randomizando elementos de imagem, 267–70 Readme, arquivos, 173–4, 187 Really Simple CAPTCHA, 202–3 Really Simple Syndication. Ver feeds RSS recursos de comunidade, 212, 320–1 redes sociais botões de envio, 239–42 comentários, 241–4 Facebook, 230–1, 242–3 importância, 244 lifestreaming, 236–40 logins, 243–4 plug-ins, 203–5 sobre, 229 Twitter, 232–6, 242–3 redirecionando nomes de domínio, 18–9 Redirection, 199–200 registro com .htaccess do Apache , 22–3 conteúdo enviado pelo usuário, 288 FAQ bases de conhecimento, 298–9 formulários, 283–5 lançando temas, 115–20 personalização, 257–8 unificado, 243–4 ReplyMe, 202–3 requisitos do sistema, 8, 184 resumos, feeds RSS, 159–60 revendo temas, 118–9 Revision Control, 201–2 rewind_posts() (arquivo), 57, 60–1 Robots Meta, 206–7 RSS Footer, 204–5
S saída e plug-ins de código, 206–8 Screen Options (configurações), 43 Scriptaculous, 255–6 Search Everything, 206–7 Search Unleashed, 205–6 search.php (arquivo), 28–9 Secret Keys, 10–1, 21–2 segurança no lado do servidor, 22–23 segurança atualizações/upgrades, 11–2 código malicioso, 27 criptografia, 15–6, 22–3 instalação, 21–3 omissão de versão no código, 78 Secret Keys, 10–1 semântica, 127
senhas desafios, 22–3 durante a instalação, 8 redefinir, 14–6 SEO. Ver otimização de mecanismos de busca (SEO) serviços externos backups de amarzenamento, 17 galerias de imagem, 267 servidores de banco de dados, 10–2 servidores alteração, 18–22 banco de dados, 10–2 sobrecarga, 57 set_post_thumbnail_size, 89–90 SexyBookmarks, 204–5 ShareThis, 203–4 Shockingly Big IE6 Warning, 197–8 shortcode redundante, 178–9 shortcode sem parsing, 178–9 shortcodes desinstalação, 177–9 galerias, 262–3, 311–4, 318 personalização, 222–6 Shortlink (link), 234–5 Shutter Reloaded, 196–7 Sidebar Login, 197–8 sidebar.php (arquivo) em temas, 84–6 no arquivo index.php, 31–2, 70–1, 79 no tema Notes Blog, 73 sobre, 28–9 Simple Social Bookmarks, 204–5 SimplePie RSS parser, 236, 238–9, 280 single. php (arquivo), 28–9, 72, 135–6 sintaxe, 25 sistemas de gerenciamento de conteúdo (CMS) plug-ins, 202–3 sobre, 26 WordPress como checklist, 213–4 conceitos básicos, 213–8 conteúdo externo ao WordPress, 225–7 páginas estáticas, 217–9 personalização, 218–20 recursos, 212–3 sobre, 127, 211 sistemas de login unificado, 243–4 sites aprimoramento, 258 do autor, 72 estáticos, 100, 132–3, 320–1 Gravatar, 118–9, 241–2 layout, 132–3 Living Hyboria site, 315–6 opções específicas, 151–2 W3Schools, 26 sites ao estilo de um jornal, 132–3 sites de compras, 299–1 skins para blogs, 27–9 slideshows, 273–4 sliding doors (portas deslizantes), 249–52
333
ÍNDICE filhos adquirir experiência, 130 como alternative ao plug-in, 192 frameworks (estruturas), 130 indicações, 127–8 múltiplos sites, 128–30 sobre, 121 vantagens, 122–7 functions.php, 103–7 fundamentos básicos, 70–2 inchado, 113–4, 142–3, 167, 190 interface de admin, 214–6 lançando, 115–20 localização do, 27 logins, 257 modelos, 96–104 pai, 122 sobre, 27–9, 69 tema Notes Blog arquivo comments.php, 85–7 arquivo footer.php, 87–9 arquivo functions.php, 88–97 arquivo header.php, 75–9 arquivo index.php, 79 arquivo loop.php, 80–4 arquivo sidebar.php, 84–6 disponibilidade de, 113–5 ganchos de ação, 144–6 listagens de galerias de miniaturas, 264 sobre, 72–3 style.css, 73–6 tradução, 154–6 temas, 115, 118–9 tópicos avançados descrição, 132–5 design condicional, 156–9 estilo, 134–41 ganchos de ação, 142–6 múltiplos idiomas, 153–7 otimização de mecanismos de busca (SEO), 161–3 páginas de opções, 151–4 personalização de recursos, 140–1 plug-ins, 163–4 RSS feeds, 158–62 sobre, 131 taxonomias, 145–52 tempo de carregamento, 162–4 usabilidade, 112–3 widgets, 106–9 temas de núcleo, 113–5 temas filhos. Ver também temas sobre, 121 adquirir experiência, 130 como alternativa aos plug-ins, 192 frameworks (estrururas), 130 indicações, 127–8 múltiplos sites, 128–30 vantagens, 122–7 temas inchados alternativas a, 167 com plug-ins, 190–2 sobre, 113–4, 142–3 temas pais, 122. Ver também temas temas premium, 115, 118–9, 125–6
Sociable, 203–4 social bookmarking, 240–1 software de fórum, 212, 320–1 spam com conteúdo enviado pelos usuários, 293–4 controle no serviço de hospedagem, 242–3 plug-ins, 201–3 SSL (criptografia), 22–3 sticky_class(), template tag, 49, 51, 138–9 strings de texto, 35–6 style.css com temas filhos, 122–5 in temas, 28–9, 70–1, 73–6, 115, 118–9 subpastas, 13 Subscribe2, 204–5 substituições, plug-ins como, 172 suporte a Atom (feeds RSS), 158–9 suporte a produtos, 212 suporte a temas, 118–9 SyntaxHighlighter Evolved, 206–7
T t.co (encurtador de URL ), 234–6 tabela de opções, 184 tabelas do banco de dados em plug-ins, 186–7 no WordPress, 15 tags baseadas em design, 246 checklist, 213 condicionais como alternativa ao loop, 56 design, 156–9, 249 index.php, 55 is_sticky(), 140–1 para títulos, 78 query_posts(), 53 sobre, 37 de fechamento, 71 localização, 72 modelos, 26, 30–7, 56, 171–2 para classificação, 133–4, 311–2 para plug-ins, 171–2 para postagens, 42–5 precedência, 134–5 taxonomias para, 144–5 tags de fechamento, 71 taxonomias base de conhecimento FAQ, 296–8 no design, 249 personalização, 133–4, 219–20 sobre, 145–52 taxonomy.php (arquivo), 144–5 TDO Mini Forms, 198–9, 291–4 temas adquirir exeriência, 120 arquivos do núcleo, 113–5 backups, 17 campos personalizados, 111–4 comentários, 108–12
334
ÍNDICE template tags integradas, 26
template_directory parâmetro, 31–2 tempo de carregamento código limpo, 153–4 efeitos de plug-in, 190–2, 213–4 feeds RSS, 278–9 imagens, 271–2 otimização, 162–4 serviços de terceiros, 268–9 terminologia, 217–8 testar temas, 117–8 textdomain (arquivo), 72, 89–90 the_content()(arquivo), 43, 45, 84 the_excerpt()(arquivo), 43–9, 84 the_meta() arquivo, 64–5 the_post() arquivo, 42 Theme My Login, 197–8 títulos doctype, 71 transcrição de chat, 52–3 trechos, RSS feeds, 159–60 troca de serviço de hospedagem, 18–22 Twitter API, 234 Twitter para WordPress, 203–4 Twitter Tools, 203–4 Twitterfeed, 234–5 TypePad AntiSpam, 201–2
U ul#sidebar (arquivo), 85–6 usabilidade de campos personalizados, 112–4, 133–4 do Drupal, 212 do Facebook Connect, 243–4 de plug-ins, 106–7, 172, 178–9, 186–7, 190–1 usuários de admin, 22–3 UTF-8 codificação de caracteres, 11–2
V Vanilla, 320–1 vídeos, 17, 52–3, 226 velocidade de publicação, 213–4 Vimeo, 271–2 Viper’s Video Quicktags, 200–1 vizualização de postagem individual, 291–2
W W3Schools site, 26 while (loop), 41, 59 Wickett Twitter Widget, 203–4 Widget Context, 201–2 Widget Logic, 207–8 widgets alterações, 14 com feeds RSS, 281 como dynamic_sidebar(), 79 como suporte a plug-ins, 178–85 declarações, 89–90 em functions.php, 91–4, 103–4
em sistemas de gerenciamento de conteúdo, 219–21 para enquetes, 132–3 para promoções especiais, 132–3 redes sociais, 231–4 riscos da instalação, 15–6 sobre, 106–9 suporte, 118–9 widgets de perfil, 231 widgets de texto, 220–1 widgets dinâmicos, 220–21 widgets no dashboard, 182–83 Woopra Analytics Plug-in, 200–1 WordPress Codex backups, 20–1 funções “plugáveis”, 172 JavaScript, 256 licenciamento idioma, 168–69 sobre, 26 template tags, 31–2 widgets, 93–4 WP_Query, 42 WordPress Download Monitor, 199–200 WordPress Mobile Edition, 205–6 WordPress Mobile Pack, 205–6 WordPress para múltiplos usuários, 8 WordPress Simple PayPal Shopping Cart, 198–200 WordPress. Ver também tópicos específicos admin (interface), 173–4 bancos de dados, feeds RSS, 238–9 banco de dados de opções, 173–7 encurtamento de URL, 234–5 inicialização, 78 instalação backup, 15–7 bancos de dados, 10–2, 14–6 básicos, 8–9 diretórios, 13–4 manual, 10–1 serviços de hospedagem, 15–7 segurança, 21–3 sobre, 7–8 lançamento de temas na comunidade, 115 omissão de versão no código, 78 utilizações incomuns como base de conhecimento FAQ, 295–9 conteúdo enviado pelos usuários, 288–96, 310–1 diretórios de produtos, 300–7 e-commerce, 299–301 galerias, 311–20 outras utilidades, 319–21 sites de links, 307–12 sobre, 287 WordPress.com Stats, 198–9 wp_add_dashboard_widget() (função), 183 WP-CMS Post Control, 213–5 wp-config.php (arquivo), 10–1, 17, 21–3, 26 wp-config-sample.php (arquivo), 10–1 wp-content (pasta), 17, 19, 27 wp-content/plug-ins/, 169, 186–7 wpcontent/themes/ (pasta), 122
335
ÍNDICE wp-content/themes/ (pasta), 128 WP-Cron (recurso), 238–9 WP-Cumulus, 207–8 wp-db-backup (plug-in), 17 WP-DB-Backup, 197–8 WP-DBManager, 207–8 WP e-Commerce, 198–9 wp_enqueue_script() (arquivo), 256 wp_footer() (chamada), 71, 87–8 WP Greet Box, 194 WP-Hashcash, 202–3 wp_head() (chamada), 71, 78, 87–8, 142–3 WP-Lifestream, 237–9 wp_list_comments() (arquivo), 86, 109–10 wp_mail() (arquivo), 282 WP-Mail SMTP, 201–2 wp_nav_menu()(arquivo), 79
WP No Category Base, 195–8 WP-PageNavi, 208 WP-Polls, 195–6 WP-PostRatings, 194 WP_Query (arquivo), 42, 58, 302–3 $wp_query object, 42, 58, 60–1 WP-SpamFree Anti-Spam, 201–2 WP Super Cache, 207–8 wp_tag_cloud()(arquivo), 34–5 WP_Widget (classe), 178–9 WPtouch, 205–6 wp-Typography, 207–8 Write Post (tela), 43, 45, 64
Y Yet Another Related Posts Plug-in, 194 YouTube, 270–2
336
96
CAPÍTULO 4: FUNDAMENTOS DOS TEMAS DE WORDPRESS 'max_depth' => $args['max_depth']))) ?>