Transformando código PHP em Widgets

junho 13, 2007 · Filed Under Wordpress 

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: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Rec6
  • StumbleUpon
  • ueba
  • linkk
  • dihitt
  • linkloko
  • websapiens
  • linkto
  • Technorati
  • Simpy
  • del.icio.us
  • Blue Dot



Artigos Relacionados

Comments

10 Comentários

  • At 2007.06.14 13:26, Lu said:

    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...

    • At 2007.06.14 14:05, Bruno Alves said:

      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

      • At 2007.06.14 15:09, André Ferrizzi said:

        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.

        • At 2007.06.14 15:37, Bruno Alves said:

          André, obrigado.

          Abraço

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

            • At 2007.06.25 12:22, Janio Sarmento said:

              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

              • At 2007.06.26 14:43, Bruno Alves said:

                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

                • At 2007.07.03 17:42, Anderssauro said:

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

                  • At 2007.07.04 11:10, Dario said:

                    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.

                    • At 2007.07.04 14:36, Bruno Alves said:

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

                      PHP:
                      echo '<ul>';
                      ns_show_top_commentators();
                      echo '</ul>';

                      Dario, que bom que ajudou.

                      Abraços

                      (Required)
                      (Required, will not be published)