Transformando código PHP em Widgets

Quando escrevi o tutorial de criação de um bloco de destaques, acabei com um pequeno problema na mão.

Esse tema usa o Widgets para controlar a barra lateral, porém, por padrão, o plugin não aceita que seja inserido código PHP.

Assim fiquei com o bloco de destaques somando um espaço enorme no topo, fazendo com que os leitores tenham que rolar muito a página até encontrar o conteúdo.

Eu teria duas opções para resolver o problema:

  1. Editar o tema para incluir o código antes ou depois da chamada dos Widgets.
  2. Criar um Widget com aquele código para poder usar.

A primeira opção seria complicada, pois eu perderia a flexibilidade e teria que colocar ou no início ou no fim da coluna.

Em nenhum dos casos, eu atenderia meu objetivo, já que ou empurraria a barra toda para baixo e não poderia deixar em primeiro lugar o que eu quero ou colocaria no final da barra, onde perderia sentido de ser.

Já a segunda opção seria a mais viável, se eu não estivesse sem tempo (e com um pouco de preguiça, para falar a verdade).

Vou criar este Widget, sim, mas mais para frente.

Tinha urgência de resolver o problema do local do blog.

Foi então que em uma rápida pesquisa achei o Widgetize Anything.

O funcionamento dele é quase idêntico aos text widgets, com a grande diferença que posso escrever códigos em PHP dentro dos mesmos.

Instalando:

Instalar é muito simples, basta:

  • baixar o plugin no link acima
  • descomprimir
  • colocar o arquivo dentro da pasta wp-content/plugins
  • ativar no painel do WordPress

Configurando:

A configuração é muito simples, basta definir quantos widgets você quer nas opções, coloquei 10 para deixar alguns de folga (estou usando 4), ter vários não aumenta o consumo de recursos (pelo menos não senti diferença), mas não é bom exagerar.

Usando:

Agora vamos a parte legal, usar o plugin.

O código PHP é executado possui algumas limitações, portanto não podemos usar exatamente o mesmo código apresentado antes, precisaremos fazer algumas alterações, como abaixo:

PHP:
echo '<ul>';
$des_posts = get_posts('category=42&amp;numberposts=5');
foreach($des_posts as $dpost) {
setup_postdata($dpost);
echo '<li><a href="' . get_permalink($dpost->ID) . '" rel="bookmark" title="Link para ' . $dpost->post_title .'">'. $dpost->post_title . '</a></li>';
};
echo '</ul>';
Widgetize Anything

Como podem notar no código as principais diferenças são:

  • Não dá para mesclar PHP com HTML.
  • Ao invés de usar funções que imprimam os valores diretamente, tive que jogá-las em um echo.
  • Tive que passar parâmetros para as funções.

O primeiro item não é possível, pois o plugin pega tudo que está escrito na parte do código e envia para o PHP executar, caso fizéssemos a mistura, correríamos grandes riscos de quebrar a execução, isso se chegasse a funcionar (nem testei).

Usando funções que imprimam valores diretos funcionaria, mas tornaria o código um pouco confuso.

Já a questão de passar os parâmetros para as funções é necessário, pois o WordPress não consegue tratar isso como um loop, se eu não tivesse feito essas alterações, ele pegaria o primeiro artigo do loop da página que está para executar as funções.

Mesmo com essas limitações, o plugin é de grande valia.

Já aproveitei para colocar 4 com os seguintes conteúdos:

  • Artigos em destaque.
  • Últimos artigos (não gostava do Widget Padrão).
  • Artigos da categoria SEO, para quem acompanhava o BrPoint poder localizar os artigos mais rápidamente.
  • O Top Commentators, para exibir a lista dos usuários que mais comentam e seus respectivos blogs.
Compartilhe e Guarde:
  • StumbleUpon
  • Enviar para o Ueba
  • Rec6
  • Enviar para o LinkK
  • Enviar para o DiHitt
  • Enviar para o LinkLoko
  • Enviar para o WebSapiens
  • Enviar para o LinkTo
  • Technorati
  • Enviar para o Imera
  • Faves
  • Google Bookmarks
  • MySpace
  • del.icio.us
  • Facebook
tabs-top

11 Comentários para “Transformando código PHP em Widgets”

  1. Lu disse:

    Não consigo simpatizar com os widgets. Estou usando no Desconexidades por falta de opção, mas ainda prefiro editar o código “na unha”, para ter certeza do que vai acontecer. Sem contar que sempre fico na dúvida se os widgets não deixam o blog mais lento…

  2. Bruno Alves disse:

    Lu, eu não conseguiria viver sem eles.

    Estou sempre mudando a lateral e fazer isso na mão é muito chato.

    Quanto ao desempenho, não sinto qualquer diferença.

    Abraço

  3. Muito bom! Trabalho com PHP já há algum tempo e achei o artigo muito interessante. Quanto ao desempenho também não senti diferença.

  4. Bruno Alves disse:

    André, obrigado.

    Abraço

  5. [...] quem utiliza o Sidebar Widgets, pode usar o Widgetize Anything e colocar o código abaixo: PLAIN TEXT [...]

  6. Bruno.

    Teus comentários estão com um monte de warnings:

    Warning: preg_match() [function.preg-match]: Empty regular expression in /home/brpointn/domains/brpoint.net/public_html/wp-content/plugins/avatar_blogblogs.php on line 45

    Warning: preg_match() [function.preg-match]: Empty regular expression in /home/brpointn/domains/brpoint.net/public_html/wp-content/plugins/avatar_blogblogs.php on line 46

    Warning: preg_match() [function.preg-match]: Empty regular expression in /home/brpointn/domains/brpoint.net/public_html/wp-content/plugins/avatar_blogblogs.php on line 47

  7. Bruno Alves disse:

    Jânio, valeu e desculpe a demora.

    Estava desenvolvendo um plugin.

    Tenho que aprender a não fazer isso em ambiente de produção…

    Abraço

  8. Anderssauro disse:

    não estou conseguindo fazer isso com o Top Commentators.
    coloquei os ‘echos’ mas mesmo assim dá erro.

  9. Dario disse:

    Nossa, exatamente o meu problema, eu tava tentando colocar os destaques com o Widgetize Anything e não estava dando certo, muito obrigado, abraços.

  10. Bruno Alves disse:

    Anderssauro, estou usando o seguinte código, para exibir o top commentators:

    [PHP]
    echo ‘

      ‘;
      ns_show_top_commentators();
      echo ‘

    ‘;
    [/PHP]

    Dario, que bom que ajudou.

    Abraços

  11. Rodrigo disse:

    Excelente artigo sobre o plugin do WordPress. E é por isso mesmo que peço ajuda. Não estou conseguindo usar o plugin, pois tenho o mal habito de mesclar html com php. Como é que eu insiro uma imagem com código php?

    Obrigado
    Rodrigo

Comente

XHTML: Você pode usar as tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>