<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Rafael Dohms &#187; Wordpress</title>
	<atom:link href="http://www.rafaeldohms.com.br/category/tecnologia/wordpress/pt/feed/pt/" rel="self" type="application/rss+xml" />
	<link>http://www.rafaeldohms.com.br</link>
	<description>Web Engineer</description>
	<lastBuildDate>Wed, 11 Aug 2010 15:33:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>pt</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Projeto &#8220;Eu desenvolvo seu plugin para Wordpress!&#8221;</title>
		<link>http://www.rafaeldohms.com.br/2009/03/11/desenvolvo-seu-plugin-para-wordpress/pt/</link>
		<comments>http://www.rafaeldohms.com.br/2009/03/11/desenvolvo-seu-plugin-para-wordpress/pt/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 13:28:23 +0000</pubDate>
		<dc:creator>Rafael Dohms</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[plug-in]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.rafaeldohms.com.br/?p=495</guid>
		<description><![CDATA[Com o crescimento continuo da importancia do Wordpress no mundo Blogger um item está cad vez mais em destaque, os plugins para wordpress. Muitos defendem que o Wordpress já não é mais um simples sistema de blog e que pode virar  muito mais, como um CMS e diversos outros usos, vejamos por exemplo o [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><div id=HOTWordsTxt name=HOTWordsTxt><p>Com o crescimento continuo da importancia do Wordpress no mundo Blogger um item está cad vez mais em destaque, os plugins para wordpress. Muitos defendem que o Wordpress já não é mais um simples sistema de blog e que pode virar  muito mais, como um CMS e diversos outros usos, vejamos por exemplo o Ministério da Cultura, cujo site é feito com base no WP.</p>
<p>O sistema, embora tenha diversas polêmicas sobre seu código, foi desenhado de forma a permitir diversos ganchos e pontos de conexão em sua API para podermos plugar nossos plugins, executando atividades nos mais diversos momentos da execução de um request, ou da exibição de um post. Algum tempo atrás me dediquei a escrever um <a href="http://www.rafaeldohms.com.br/2008/03/10/desenvolvendo-plugins-para-wordpress/pt/">artigo completo</a> sobre o desenvolvimento destes plugins, que é hoje o segundo post mais acessado no meu blog.</p>
<p>A algum tempo venho recebendo ideias e pedidos de pessoas que querem desenvolver plugins para seus blogs, eles tem um problema, inventam uma solução, mas esbarram no PHP ou no codigo fonte do WP e acabam deixando de lado. Muitas vezes já existe um plugin no repositório do WP que atende ao que é buscado, porém em alguns casos sua ideia tem um twist, uma diferença ou é simplesmente original, e nessas horas você precisa de alguma ajuda.</p>
<p>Venho querendo pegar projetos pontuais e pequenos para fazer, já que projetos grandes acabam de vez com meu tempo livre e me ocupam por muito tempo. Portanto estou abrindo aqui um espaço para <strong>ajudar estas pessoas</strong> aqui, e estarei disponibilizando uma oportunidade para <strong>criar plugins</strong> para os outros.</p>
<p>Esta iniciativa possui tres planos:</p>
<ol>
<li><strong>Plano Open Source</strong>: Você contribui com a ideia do plugin, eu desenvolvo ele, divulgo aqui no blog e publico no repositório do link. O código fica aberto a todos e o crédito do plugin é dividido entre você e eu.</li>
<li><strong>Plano Pago</strong>: Você me fornece com o briefing do plugin, eu desenvolvo o plugin e lhe entrego todo o código para você usar ou divulgar como quiser. O plugin carregará apenas o seu nome nos créditos.</li>
<li><strong>Plano Combinado</strong>: Este plano é uma mistura dos dois acima, novamente a ideia é sua, mas neste caso o código não é aberto (open source), pertencendo apenas a você, porém o crédito é novamente dividido entre você e eu. Neste caso o custo de desenvovimento é reduzido.</li>
</ol>
<p><em>O preço dos plugins será feito sobe encomenda de acordo com o nivel de complexidade do mesmo e de outros fatores, e será divulgado após o contato inicial para o orçamento. Somente no caso do Plano Open Source não existe nenhum custo</em>.</p>
<p><strong>Vou desenvolver os plugins dentro do tempo livre</strong> que tiver então os prazos serão negociados cuidadosamente para evitar maiores problemas. Para acompanhar todo esse serviço, estarei utilizando o Redmine, um gerenciador de projetos, por isso vejam ele aqui:</p>
<p><a href="http://dev.rafaeldohms.com.br/" target="_blank">DMS Systems &#8211; Gerenciador de Tarefas</a></p>
<p>Usem esta página [<a href="http://dev.rafaeldohms.com.br/wiki/wp-plugins/Open-Source_Plugin_Ideas" target="_blank">http://dev.rafaeldohms.com.br/wiki/wp-plugins/Open-Source_Plugin_Ideas</a>] para cadastrar suas ideias de plugins Open Source, ou este email [<a href="mailto:rafael+plugins@rafaeldohms.com.br">rafael+plugins@rafaeldohms.com.br</a>] para pedir orçamentos de plugins nos planos Pago e Combinado</p>
<p><strong>Observação!</strong> É importante notar que cadastrar sua ideia não tras garantia de que seu plugin será escolhido e desenvolvido, tudo irá depender do meu tempo livre e da quantidade de plugins que apareça por ai.</p>
</div><div id="st_tags"><a href="http://www.rafaeldohms.com.br/tag/php/pt/" rel="tag">PHP</a>, <a href="http://www.rafaeldohms.com.br/tag/plugin/pt/" rel="tag">plugin</a>, <a href="http://www.rafaeldohms.com.br/tag/wordpress/pt/" rel="tag">Wordpress</a><br /></div><!-- google_ad_section_end -->	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<p>&copy; Rafael Dohms for <a href="http://www.rafaeldohms.com.br">Rafael Dohms</a>, 2009. |
	  <a href="http://www.rafaeldohms.com.br/2009/03/11/desenvolvo-seu-plugin-para-wordpress/pt/">Permalink</a> |
	  <a href="http://www.rafaeldohms.com.br/2009/03/11/desenvolvo-seu-plugin-para-wordpress/pt/#comments">4 comments</a><br>
	  Want more on these topics ? Browse the archive of posts filed under <a href="http://www.rafaeldohms.com.br/category/dev/pt/" title="View all posts in Desenvolvimento" rel="category tag">Desenvolvimento</a>,  <a href="http://www.rafaeldohms.com.br/category/php/pt/" title="View all posts in PHP" rel="category tag">PHP</a>,  <a href="http://www.rafaeldohms.com.br/category/tecnologia/wordpress/pt/" title="View all posts in Wordpress" rel="category tag">Wordpress</a>,  <a href="http://www.rafaeldohms.com.br/category/tecnologia/wordpress/plug-in/pt/" title="View all posts in plug-in" rel="category tag">plug-in</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.rafaeldohms.com.br/2009/03/11/desenvolvo-seu-plugin-para-wordpress/pt/feed/pt/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>BlogBlogs Userinfo Plugin: correção de bug</title>
		<link>http://www.rafaeldohms.com.br/2008/04/28/blogblogs-userinfo-plugin-correcao-de-bug/pt/</link>
		<comments>http://www.rafaeldohms.com.br/2008/04/28/blogblogs-userinfo-plugin-correcao-de-bug/pt/#comments</comments>
		<pubDate>Mon, 28 Apr 2008 18:33:40 +0000</pubDate>
		<dc:creator>Rafael Dohms</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[plug-in]]></category>

		<guid isPermaLink="false">http://www.rafaeldohms.com.br/?p=187</guid>
		<description><![CDATA[Hoje pela manhã identifiquei um antigo bug do plugin que causava instabilidade no cache e algumas vezes erros de &#8220;carregando pra sempre&#8221;.
Rapidamente eu corrigi o problema e lancei a versão 0.85 que corrige este bug. Decidi lançar isso logo antes de continuar o desenvolvimento das versões novas que vem por ai, já que o Manoel [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><div id=HOTWordsTxt name=HOTWordsTxt><p>Hoje pela manhã identifiquei um antigo bug do plugin que causava instabilidade no cache e algumas vezes erros de &#8220;carregando pra sempre&#8221;.</p>
<p>Rapidamente eu corrigi o problema e lancei a versão 0.85 que corrige este bug. Decidi lançar isso logo antes de continuar o desenvolvimento das versões novas que vem por ai, já que o Manoel esta anunciando novidades no <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a>, vou ficar na cola para aproveitar isso no plugin.</p>
<p>Façam o download: <a href="http://wordpress.org/extend/plugins/bbuinfo-blogblogs-user-info-plugin/">http://wordpress.org/extend/plugins/bbuinfo-<a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a>-user-info-plugin/</a><br />
ou usem o novo painel do WordPress para fazer a atualização automática.</p>
<p style="text-align: center;"><em><strong>Recomendo que TODOS atualizem!</strong></em></p>
</div><div id="st_tags"></div><!-- google_ad_section_end -->	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<p>&copy; Rafael Dohms for <a href="http://www.rafaeldohms.com.br">Rafael Dohms</a>, 2008. |
	  <a href="http://www.rafaeldohms.com.br/2008/04/28/blogblogs-userinfo-plugin-correcao-de-bug/pt/">Permalink</a> |
	  <a href="http://www.rafaeldohms.com.br/2008/04/28/blogblogs-userinfo-plugin-correcao-de-bug/pt/#comments">One comment</a><br>
	  Want more on these topics ? Browse the archive of posts filed under <a href="http://www.rafaeldohms.com.br/category/tecnologia/wordpress/pt/" title="View all posts in Wordpress" rel="category tag">Wordpress</a>,  <a href="http://www.rafaeldohms.com.br/category/tecnologia/wordpress/plug-in/pt/" title="View all posts in plug-in" rel="category tag">plug-in</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.rafaeldohms.com.br/2008/04/28/blogblogs-userinfo-plugin-correcao-de-bug/pt/feed/pt/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Desenvolvendo plugins para WordPress</title>
		<link>http://www.rafaeldohms.com.br/2008/03/10/desenvolvendo-plugins-para-wordpress/pt/</link>
		<comments>http://www.rafaeldohms.com.br/2008/03/10/desenvolvendo-plugins-para-wordpress/pt/#comments</comments>
		<pubDate>Mon, 10 Mar 2008 12:40:10 +0000</pubDate>
		<dc:creator>Rafael Dohms</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[plug-in]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.rafaeldohms.com.br/2008/03/10/desenvolvendo-plugins-para-wordpress/pt/</guid>
		<description><![CDATA[Uma peça chave do sucesso do WordPress é justamente sua capacidade de aceitar plugins e widgets, além , é claro, dos milhares de programadores que desenvolvem os mais diversos plugins que fazem de tudo um pouco.
Algum tempo atrás fui abordado pelo Manoel Lemos do BlogBlogs para discutirmos uma missão, criar um plugin para o WordPress, [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><div id=HOTWordsTxt name=HOTWordsTxt><p>Uma peça chave do sucesso do WordPress é justamente sua capacidade de aceitar plugins e widgets, além , é claro, dos milhares de programadores que desenvolvem os mais diversos plugins que fazem de tudo um pouco.</p>
<p>Algum tempo atrás fui abordado pelo Manoel Lemos do <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a> para discutirmos uma missão, criar um plugin para o WordPress, baseado na API do site. Comecei entao minha saga atrás de como desenvolver um plugin. O material estava lá, espalhado em vários sites, mas estava lá.</p>
<p>Então agora com o sucesso do BBUinfo e na véspera de novos projetos, decidi tentar consolidar este conhecimento adquirido e focar ele no público brasileiro. Vou procurar mostrar o caminho das pedras de como começar e onde buscar os dados necessário para integrar seu código ao do WP.</p>
<p>O WP, como eu disse, foi desenhado com plugins em mente. Sua estrutura possui diversos componentes desenhados para que seu plugin se &#8220;encaixe&#8221; no ponto certo (attach points ou hooks) e na hora certa. Mas para isso é importante observar alguns passos, para melhor desenhar seu plugin.</p>
<p>Os passos a seguir são a minha recomendação de como desenvolver um plugin, e evitar maiores problemas e dificuldades. Para poder acompanhar melhor o código produzido, vou estar criando com vocês o meuPrimeiroPlugin, que será descrito passo a passo abaixo.</p>
<p class="step">Passo 1: Planejamento</p>
<p>No desenvolvimento de qualquer sistema o primeiro passo deve sempre ser uma análise e planejamento do que será feito, com plugins, embora pequenos, isto se mantém.Como em sistemas é importante identificar neste momento o que se deseja fazer, qual o objetivo do plugin. Levantar entradas e saídas, dados externos e suas fontes, enfim, definir de forma geral o que o plugin faz, com que dados ele faz isso e como obter os dados necessários.Faça perguntas como:</p>
<ul>
<li>Preciso de um banco de dados?</li>
<li>Preciso acessar dados externos por webservice ou uma API?</li>
<li>Vou mostrar algo visual para o usuário?</li>
<li>O que pretendo fazer?</li>
<li>Qual o nome darei ao plugin?(se você consegue definir o nome, sabe o que quer)</li>
</ul>
<p>Um bom exercício para este momento é utilizar o <a href="http://wordpress.org/extend/plugins/about/readme.txt">padrão de arquivo readme</a> do WP e já iniciar a escrita da descrição resumida e detalhada do plugin, pois este será seu guia. (<a href="http://wordpress.org/extend/plugins/about/validator/" target="_blank">você pode validar o arquivo aqui</a>)</p>
<blockquote class="exemplo"><p><em><strong>meuPrimeiroPlugin</strong></em></p>
<p>Este plugin, desenhado para o aprendizado de como desenvolver plugins, executa ações básicas e didáticas, mas sem muito uso. Para mostrar todos os limites, o plugin fará as seguintes ações:</p>
<ol>
<li>Acrescentará ao final de cada comentário o texto: &#8220;O conteúdo deste comentário é de responsabilidade de:  {AUTOR}&#8221;</li>
<li>Criará uma tabela nova que irá armazenar uma contagem de visitas a cada post, e mostrará esta contagem logo ao final do POST.</li>
<li>Substituir a palavra XXX por um link</li>
</ol>
<p><strong>Exemplos</strong></p>
<ul>
<li>Arquivo <a href="http://www.rafaeldohms.com.br/wp-content/uploads/readme.txt" title="readme.txt">readme.txt</a></li>
<li>Meu brainstorm (idéias para o plugin):<br />
<a href="http://www.rafaeldohms.com.br/wp-content/uploads/brainstorm.gif" title="Brainstorm do MPP"><img src="http://www.rafaeldohms.com.br/wp-content/uploads/brainstorm.thumbnail.gif" alt="Brainstorm do MPP" /></a><a href="http://www.rafaeldohms.com.br/wp-content/uploads/brainstorm.jpeg" title="Brainstorm do MPP"><br />
</a></li>
</ul>
</blockquote>
<blockquote class="produto"><p><strong>Produtos desta etapa</strong><br />
Arquivo readme.txt, arquivo com &#8220;brainstorm&#8221; (tente um mindmap, como acima)</p></blockquote>
<p class="step">Passo 2: Projeto</p>
<p>Esta etapa segue os padrões de projetos de sistema, mas com algumas adições específicas do WordPress. Como base sugiro que use a linguagem UML para definir seu projeto e faça um diagrama de MER (base de dados).</p>
<p>Embora não seja obrigatório, a criação do  plugin como um objeto, é recomendável e mais fácil de manter do que código estruturado, além claro de ser uma &#8220;prática recomendada&#8221; para o PHP5. Outra grande vantagem nesta orientação é que como os métodos são chamados de dentro do objeto a preocupação com &#8220;nomes coincidentes&#8221; é nula, sendo reduzida apenas ao nome do objeto que deve ser único.</p>
<p>Então defina o seu objeto com métodos que se identifiquem com as diversas ações que o plugin vai executar, por exemplo: adicionarAssinatura(), pegarDadosExternos(), salvarDados()&#8230;</p>
<p>Agora entra o ponto onde o WordPress traz toda sua mágica com os seus &#8220;hooks&#8221;, ou ganchos.</p>
<blockquote class="def"><p><em><strong>Ganchos do WordPress</strong></em></p>
<p>Para facilitar que se ligue o plugin às ações doWP, são definidos ganchos em sua programação, ou seja, em pontos específicos do funcionamento do plugin, são disponibilizados pontos onde as funções podem se &#8220;pendurar&#8221;. Desta forma caso deseje criar um plugin, que deve executar determinada função no momento em que um comentário é salvo, você usaria o gancho &#8220;comment_post&#8221;.</p>
<p>Estes ganchos são divididos em 2, ações e filtros.</p>
<ul>
<li><strong>Ações</strong>  são eventos disparados em momentos exatos durante a execução do WordPress.</li>
<li><strong>Filtros</strong> são lançados no momento de gravação ou apresentação de um texto para que seja possível modificá-lo.</li>
</ul>
<p>Outros Links: <a href="http://adambrown.info/p/wp_hooks/version/2.3.2" target="_blank">Todos Hooks de todas versões do WP</a></p></blockquote>
<p>Para definir os ganchos você pode se perguntar &#8220;Em que momento devo fazer isso?&#8221; para cada ação e então verificar a lista de ganchos de <a href="http://codex.wordpress.org/Plugin_API/Action_Reference">ações</a> e <a href="http://codex.wordpress.org/Plugin_API/Filter_Reference">filtros</a> para achar qual lhe atende.</p>
<blockquote class="exemplo"><p><em><strong>meuPrimeiroPlugin</strong></em><br />
Neste caso podemos usar os seguintes pontos para anexar nossas funções:</p>
<ol>
<li><strong>Instalar:</strong> ligada ao <strong>&#8220;register_activation_hook&#8221;</strong> que é executado na ativação de um plugin no menu</li>
<li><strong>Desinstalar:</strong> Estas funções foram bastante <a href="http://weblogtoolscollection.com/archives/2008/01/12/uninstalling-conundrum-part-2/" target="_blank">discutidas</a>, mas ainda não existe um hook fixo.</li>
<li><strong>Inicializar:</strong> Esta deve ser executada logo no início, para isso temos o filtro <strong>&#8220;init&#8221;</strong></li>
<li><strong>Aba de opções:</strong> para fazer a aba precisamos de dois pontos, a ação &#8220;admin_menu&#8221; e o <strong>&#8220;add_options_page&#8221;</strong>.</li>
<li><strong>Contar Visita:</strong> poderia ser melhor,mas o filtro <strong>&#8220;the_content&#8221; </strong>garante a contagem na hora mais certa.</li>
<li><strong>Inserir texto no comentário:</strong> Para isso o filtro <strong>&#8220;get_comment_text&#8221;</strong> é perfeito</li>
<li><strong>Substituir palavras:</strong> este é bem direto também, vamos usar o filtro <strong>&#8220;the_content&#8221;</strong></li>
</ol>
<p>Juntamente com este raciocínio, fiz o mapeamento da classe e do que seria necessário na base de dados:</p>
<p align="center"><strong>Diagrama de classe do plugin</strong></p>
<p style="text-align: center"><img src="http://www.rafaeldohms.com.br/wp-content/uploads/diagrama_classe.png" alt="Diagrama de classe do MPP" /></p>
<p align="center"><strong>MER do Banco</strong></p>
<p><img src="http://www.rafaeldohms.com.br/wp-content/uploads/mer.gif" alt="MER do MPP" /></p></blockquote>
<blockquote class="produto"><p>Produtos desta etapa: diagrama de classe do seu plugin, um MER do banco de dados e uma lista de possíveis pontos de inserção (ganchos).</p></blockquote>
<p class="step">Passo 3: Desenvolvendo</p>
<p>Com o caminho a sua frente devidamente mapeado, agora podemos nos aprofundar no código, além de conhecer algumas possibilidades que o WP traz embutidas em si mesmo.</p>
<p>O ideal é que seu plugin caiba dentro de um arquivo só, mas caso isso não seja possível, recomenda-se que todos arquivos sejam jogados dentro de uma pasta com o mesmo nome do plugin. O nome do plugin também pode (recomenda-se) ser o nome de seu arquivo principal, isso irá lhe facilitar usar funções &#8220;on activation&#8221; disparadas na ativação do plugin. Portanto teremos a seguinte estrutura para nosso exemplo:</p>
<p style="text-align: center"><img src="http://www.rafaeldohms.com.br/wp-content/uploads/folder-screen.jpg" alt="Pasta do MPP" /></p>
<p>A primeira coisa que deve aparecer em nosso arquivo meuPrimeiroPlugin.php é o cabeçalho. Este cabeçalho é usado pelo WP para mostrar os dados de seu plugin na página de administração de plugins, então é muito importante manter estes dados corretos, o cabeçalho segue o padrão abaixo:</p>
<pre class="brush: php;">
/*
Plugin Name: Nome do Plugin
Plugin URI: http://Endereço_da_pagina
Description: Descrição simples e curta do plugin
Version: A versão atual do plugin, ex.: 1.0
Author: Nome do Autor do Plugin
Author URI: http://Endereço_do_site_do_autor
*/
</pre>
<p>Após isso podemos começar a definir a classe. A definição segue o padrão normal de um objeto em PHP (4 ou 5). Aqui vamos seguir uma orientação PHP5 por sua enorme vantagem e pelo <a href="http://developers.slashdot.org/article.pl?sid=07/07/14/0646216" target="_blank">&#8220;fim&#8221;</a> do PHP</p>
<blockquote class="def"><p>O site do WP possui muito <a href="http://codex.wordpress.org/WordPress_Coding_Standards" target="_blank">material sobre padrões de codificação</a>, e eu recomendo uma leitura, mas são padrões bem estabelecidos que muitos programadores já devem usar normalmente.</p></blockquote>
<p>Como vimos no passo anterior montamos um diagrama de classe e nesse diagrama já identificamos as funções que precisamos desenvolver em nosso plugin, portanto a seguir vou seguir passo a passo deste arquivos criando e explicando cada uma destas funções, e no final comentarei sobre os ganchos que serão colocados fora do escopo do objeto e porque.</p>
<p class="function_declaration">Função Inicializar</p>
<p>Esta função serve para centralizar todas as ações que devem ser sempre tomadas para integrar o plugin com o WP, sejam elas ações de adição/remoção de filtros/ações ou instanciação de objetos, cópias de variáveis globais, enfim, todas ações que serão executadas sempre que o WP carregar.</p>
<pre class="brush: php;">
public static  function inicializar(){
global $wpdb;

//Definir ganchos
add_filter(&quot;get_comment_text&quot;, array(&quot;meuPrimeiroPlugin&quot;,&quot;exonerarComentarios&quot;));
add_filter(&quot;the_content&quot;, array(&quot;meuPrimeiroPlugin&quot;,&quot;contarVisita&quot;));
add_filter(&quot;the_content&quot;, array(&quot;meuPrimeiroPlugin&quot;,&quot;processarSubstituicao&quot;));
add_action('admin_menu', array('meuPrimeiroPlugin','adicionarMenu'));

//Mapear objetos WP
meuPrimeiroPlugin::$wpdb = $wpdb;

//Outros mapeamentos
meuPrimeiroPlugin::$info['plugin_fpath'] = dirname(__FILE__);

}
</pre>
<p>Como podemos ver, no caso do meuPrimeiroPlugin, estamos cadastrando as outras funções com seus devidos filtros, ou seja, os ganchos que irão executá-las e copiando o objeto $wpdb para dentro do nosso script, podendo agora ser referenciado como: <em>meuPrimeiroPlugin::$wpdb</em> que é melhor que ficar sempre usando &#8220;global&#8221; no início da função. Além disso aproveita-se para obter a localização do plugin, usando a constante <strong>__FILE__</strong> do PHP que define o caminho até o arquivo onde esta.</p>
<blockquote class="def"><p><strong>$wpdb</strong><br />
Este objeto sempre presente no WordPress é responsável pela sua conexão com a base de dados, ele pode executar queries, buscar dados,  e realizar diversas funções relacionadas a base de dados. Veja aqui a lista de métodos [aqui]</p></blockquote>
<p class="function_declaration">Função Instalar</p>
<p>Esta função é mapeada para ser executada no momento que o plugin é ativado na aba de plugins do WordPress. Como nosso plugin utiliza dados que serão salvos e lidos de bases de dados é necessário que elas sejam criadas antes de seu uso, o momento de ativação é excelente para isso, porém o plugin pode ser ativado e desativado diversas vezes (quando se faz upgrade do WordPress por exemplo) e não podemos simplesmente criar a tabela sempre, por isso observe o comando para criar apenas caso não exista.</p>
<pre class="brush: php;">	public static function instalar(){

if ( is_null(meuPrimeiroPlugin::$wpdb) ) meuPrimeiroPlugin::inicializar();

//Criar base de dados
$sqlContador = &quot;CREATE  TABLE IF NOT EXISTS `&quot;.meuPrimeiroPlugin::$wpdb-&amp;gt;prefix.&quot;mpp_post_visitas` (
`id_post` INT NOT NULL ,
`visitas` INT NULL ,
PRIMARY KEY (`id_post`) )&quot;;

$sqlPalavras = &quot;CREATE  TABLE IF NOT EXISTS `&quot;.meuPrimeiroPlugin::$wpdb-&amp;gt;prefix.&quot;mpp_substituicao` (
`idmpp_substituicao` INT NOT NULL AUTO_INCREMENT ,
`orig_palavra` VARCHAR(255) NULL ,
`subst_palavra` VARCHAR(255) NULL ,
PRIMARY KEY (`idmpp_substituicao`) )&quot;;
meuPrimeiroPlugin::$wpdb-&amp;gt;query($sqlContador);
meuPrimeiroPlugin::$wpdb-&amp;gt;query($sqlPalavras);

//Criar opções
add_option(&quot;mpp_texto_exonerar&quot;,&quot;O conteúdo deste comentário é de responsabilidade de: &quot;);
}</pre>
<p>Neste caso, de forma puramente didática, criei uma opção para armazenar o texto que será inserido nos comentários. Esta opção foi criada apenas para mostrar como elas podem ser utilizadas. Estas <strong>opções são gravadas na tabela de opções do próprio WordPress</strong> e acessadas com estes métodos: <em>add_option, update_option, delete_option, get_option</em>.</p>
<p>Note que no ínicio da função chamo a função de inicialização, isso é importante pois no ato em que a função de instalação é chamada o gancho &#8220;init&#8221; ainda não foi chamado e por isso não temos nossa conexão com o banco por exemplo. Isto causaria erros na ativação do plugin.</p>
<blockquote><p><strong>Dica:</strong><br />
Se você receber um aviso &#8220;cannot redeclare class&#8221; na ativação do plugin, 9 em 10 vezes o erro não esta na declaração do plugin e sim omitido pelo WordPress, em sua função de captura de erros, que infelizmente possui algumas falhas, como essa.</p>
<p>Para ver o erro verdadeiro vá até o arquivo <em>wp-admin/plugin.php</em> e comente as linhas 14 e 15, mostradas abaixo:</p>
<pre class="brush: php;">
wp_redirect(add_query_arg('_error_nonce', wp_create_nonce('plugin-activation-error_' . $plugin), 'plugins.php?error=true&amp;amp;plugin=' . $plugin)); // we'll override this later if the plugin can be included without fatal error
ob_start();
</pre>
</blockquote>
<p class="function_declaration">Função Desinstalar</p>
<p>Esta função não possui um hook para ser executada de forma automática, mas é uma função que recebeu muita atenção nos últimos tempos em diversas discussões pela internet. Nossa aba de opções deve implementar uma chamada a esta função, mas em breve o WordPress deve implementar um hook para ela.</p>
<p>Sua função é bem direta e simples, remover tudo que foi criado pela função de instalação. Por isso não é possível ligar ela ao ato de &#8220;desativar&#8221; o plugin, pois o usuário perderia suas preferências a cada vez que fizesse upgrade do WordPress (é recomendado que se desative os plugins para tal).</p>
<pre class="brush: php;">	public static function desinstalar(){

//Remover bases de dados
$sqlContador = &quot;DROP TABLE `&quot;.meuPrimeiroPlugin::$wpdb-&amp;gt;prefix.&quot;mpp_post_visitas`&quot;;
$sqlPalavras = &quot;DROP TABLE `&quot;.meuPrimeiroPlugin::$wpdb-&amp;gt;prefix.&quot;mpp_substituicao`&quot;;

meuPrimeiroPlugin::$wpdb-&amp;gt;query($sqlContador);
meuPrimeiroPlugin::$wpdb-&amp;gt;query($sqlPalavras);

//Remover opções
delete_option(&quot;mpp_texto_exonerar&quot;);
}
</pre>
<p>Como podemos ver apenas é feito um DROP nas tabelas e a remoção da opção que foi criada na própria tabela do WordPress.</p>
<p class="function_declaration">Função adicionarMenu</p>
<p>Esta função indica ao WordPress que ao montar o menu da administração ele deve <strong>inserir uma nova aba</strong> que aponta para uma função de nosso plugin.</p>
<pre class="brush: php;">	public static function adicionarMenu(){
add_options_page('meuPrimeiroPlugin - Gerenciamento','meuPrimeiroPlugin',10,__FILE__,array(&quot;meuPrimeiroPlugin&quot;,&quot;abaOpcoes&quot;));
}</pre>
<p>A sintaxe deste comando é a seguinte:</p>
<p><em>add_menu_page(titulo_da_pagina, titulo_do_menu, nivel_de_acesso, arquivo, [função]); </em></p>
<p>O <a href="http://codex.wordpress.org/User_Levels" target="_blank">nível de acesso</a> diz respeito as permissões do usuário, o arquivo é o arquivo de nosso plugin (<em>__FILE__</em>) e a função é a função de nossa classe em formato de <a href="http://br.php.net/manual/pt_BR/function.call-user-func.php" target="_blank">call_user_func</a></p>
<p class="function_declaration">Função abaOpcoes</p>
<p>Esta função é a que setamos no exemplo anterior para ser <strong>executada quando o usuário clicar na nossa aba do menu</strong>. Neste caso fiz uma implementação simplificada, onde uma mesma função mostra o menu e executa as operações de salvar e atualizar as opções.</p>
<p>Para salvar as opções fazemos inserções usando novamente o $wpdb-&gt;query(). Esta operação é executada sempre que o array de POST (dados enviados pelo form) possuir algum conteúdo.</p>
<p>Para mostrar o formulário utilizei uma implementação simplificada de templates, onde tenho um arquivo .tpl externo com o layout do menu e chaves especiais ({PALAVRAS},{STATS}&#8230;) que são substituídas pelo conteúdo que quero gerar. Você pode usar outra técnica e até usar código espageti com HTML no meio de seu plugin, depende da sua facilidade e organização. Para gerar o conteúdo dinâmico, faço diversas queries no banco buscando os dados que são necessários.</p>
<pre class="brush: php;">    public static function abaOpcoes(){

//Predefinidos
$templateVars['{UPDATED}'] = &quot;&quot;;
$templateVars['{ERROS}'] = &quot;&quot;;

//Executar operações definidas
if (count($_POST) &amp;gt; 0){
$ins = meuPrimeiroPlugin::$wpdb-&amp;gt;query(&quot;INSERT INTO &quot;.meuPrimeiroPlugin::$wpdb-&amp;gt;prefix.&quot;mpp_substituicao
(idmpp_substituicao,orig_palavra,subst_palavra)
VALUES
(NULL,'&quot;.$_POST['orig'].&quot;','&quot;.$_POST['subst'].&quot;')
&quot;);
$templateVars['{UPDATED}'] = '&amp;lt;div id=&quot;message&quot; class=&quot;updated fade&quot;&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;';
if ($ins){
$templateVars['{UPDATED}'] .= &quot;Dados atualizados!&quot;;
}else{
$templateVars['{UPDATED}'] .= &quot;Erro ao atualizar dados!&quot;;
}
$templateVars['{UPDATED}'] .= &quot;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&quot;;
}

//Ler arquivo de template usando funções do WP
$admTplObj = new FileReader(meuPrimeiroPlugin::$info['plugin_fpath'].&quot;/admin_tpl.htm&quot;);
$admTpl = $admTplObj-&amp;gt;read($admTplObj-&amp;gt;_length);

//pegar palavras
$resultados = meuPrimeiroPlugin::$wpdb-&amp;gt;get_results( &quot;SELECT orig_palavra,subst_palavra FROM &quot;.meuPrimeiroPlugin::$wpdb-&amp;gt;prefix.&quot;mpp_substituicao&quot; );
foreach($resultados as $res){
$palavras .= &quot;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;&quot;.$res-&amp;gt;orig_palavra.&quot; -&amp;gt;&amp;lt;/b&amp;gt; &quot;.$res-&amp;gt;subst_palavra.&quot;&amp;lt;/li&amp;gt;&quot;;
}
$templateVars['{PALAVRAS}'] = $palavras;

//pegar estatisticas
$resultados = meuPrimeiroPlugin::$wpdb-&amp;gt;get_results( &quot;SELECT post_title,visitas FROM &quot;.meuPrimeiroPlugin::$wpdb-&amp;gt;prefix.&quot;mpp_post_visitas
LEFT JOIN &quot;.meuPrimeiroPlugin::$wpdb-&amp;gt;prefix.&quot;posts AS posts ON mpp_post_visitas.id_post = posts.ID&quot; );
foreach ($resultados as $res){
$stats .= &quot;&amp;lt;dt&amp;gt;&quot;.$res-&amp;gt;post_title.&quot;&amp;lt;/dt&amp;gt;&quot;;
$stats .= &quot;&amp;lt;dd&amp;gt;&quot;.$res-&amp;gt;visitas.&quot; Visitas&amp;lt;/dd&amp;gt;&quot;;
}
$templateVars['{STATS}'] = $stats;

//Substituir variáveis no template
$admTpl = strtr($admTpl,$templateVars);

echo $admTpl;

}
</pre>
<p>Observe o uso da classe <em><strong>FileReader</strong></em> para leitura do arquivo .tpl. Esta classe é nativa do WordPress portanto a preferência de se utilizar ela ao invés de utilizar funções como fopen ou similares. É importante lembrar que o <strong>WordPress possui  diversas classes disponíveis em suas pastas</strong>, e é uma boa idéia ver se existe alguma para executar a operação que você procura.</p>
<p class="function_declaration">Função contarVisita</p>
<p>Como foi dito esta função  é convocada pelo gancho &#8220;the_content&#8221; sempre que o conteúdo de um post for resgatado do banco para exibição. Então para fazer uma simples contagem de visualizações de um post, sem entrar em muitos detalhes, filtros por IP nem nada do tipo, apenas fazemos uma inserção no banco, em nossa tabela de contagem.</p>
<pre class="brush: php;">

public static function contarVisita($post_texto){
global $post;

$sql = &quot;INSERT INTO &quot;.meuPrimeiroPlugin::$wpdb-&amp;gt;prefix.&quot;mpp_post_visitas (id_post,visitas) VALUES ('&quot;.$post-&amp;gt;ID.&quot;',1)
ON DUPLICATE KEY UPDATE visitas=visitas+1&quot;;
meuPrimeiroPlugin::$wpdb-&amp;gt;query($sql);

return $post_texto;
}</pre>
<p>Note neste caso que a função recebe um parâmetro que chamei de $post_texto. Sempre que uma função usa o gancho &#8220;the_content&#8221; ela <strong>receberá o conteúdo do post como parâmetro</strong>. Ao final da função este conteúdo, alterado ou não, deve ser <strong>retornado com uma chamada return</strong>, caso contrário o blog não exibirá o conteúdo do post.</p>
<p>Para o comando de SQL caso interesse usei o ON DUPLICATE KEY UPDATE, que verifica se já existe um registro para o post e faz a atualização do mesmo, caso contrário cria o novo registro. Ela é bem útil para não ser necessário fazer um select para decidir se devemos usar um INSERT ou UPDATE.</p>
<p class="function_declaration">Função processarSubstituicao</p>
<p>Esta função, também ligada ao &#8220;the_content&#8221; efetua a troca das palavras que cadastrarmos, por outras que forem escolhidas. É interessante notar que podemos ter várias funções ligadas a um mesmo gancho e elas serão executadas na ordem que os ganchos são designados, por isso a importância ressaltada na função anterior, onde o parâmetro deve ser retornado no final.</p>
<p>Para fazer a substituição usei um método simples também, busquei no banco os pares (palavra original =&gt; nova palavra)  e montei um array de &#8220;tradução&#8221;. Usando a função strtr do PHP eu passo este array e o texto do post e a função se encarrega de fazer a troca e me devolver o texto alterado.</p>
<pre class="brush: php;">
public static function processarSubstituicao($post_texto){

//Montar array de palavras para substituirmos
$resultados = meuPrimeiroPlugin::$wpdb-&amp;gt;get_results(&quot;SELECT orig_palavra,subst_palavra FROM &quot;.meuPrimeiroPlugin::$wpdb-&amp;gt;prefix.&quot;mpp_substituicao&quot;);

foreach($resultados as $res){
$aTraducao[$res-&amp;gt;orig_palavra] = $res-&amp;gt;subst_palavra;
}

$post_text = strtr($post_texto,$aTraducao);

return $post_texto;
} </pre>
<p class="function_declaration">Função exonerarComentarios</p>
<p>Finalmente esta função será a responsável por incluir um texto ao final do comentário para nos exonerar das palavras do seu autor. Para isto usamos o gancho get_comment_text que é similar ao get_content acima, mas se refere ao comentário.</p>
<pre class="brush: php;">    public static function exonerarComentarios($cmt_texto){
global $comment;

$anexo = &quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;&quot;.get_option('mpp_texto_exonerar').$comment-&amp;gt;comment_author.&quot;&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&quot;;

$cmt_texto .= $anexo;

return $cmt_texto;
}</pre>
<p>Como antes, recebemos o texto como parâmetro e devemos retornar ele ao final para evitar quebrar outros plugins ou ocultar comentários .</p>
<p><strong>Nota:</strong> Quando desenvolvi meu primeiro plugin de WordPress, usei o gancho get_comment_ID e não fiz o retorno do meu parâmetro ao final. Resultado, todos plugins executados após este quebravam, pois não recebiam um ID e sim uma string vazia.</p>
<p>Usando o contexto global, a variável $comment é um objeto que representa todos os dados do comentário atual, por isso como pode ser visto acima, posso acessar o nome do autor, para agregá-lo à mensagem, que foi buscada da tabela de opções pela chamada get_option. Ao final tudo isso é concatenado ao texto no comentário que segue em frente para outros plugins, ou é simplesmente mostrado.</p>
<p class="function_declaration">Código remanescente</p>
<p>Para inicializar nosso plugin o código abaixo é inserido solto em nosso arquivo, para que seja executado diretamente quando o arquivo for incluso, já que tudo que esta no escopo da classe não é executado sem sua instanciação.</p>
<pre class="brush: php;">
$mppPluginFile = substr(strrchr(dirname(__FILE__),DIRECTORY_SEPARATOR),1).DIRECTORY_SEPARATOR.basename(__FILE__);
/** Funcao de instalacao */
register_activation_hook($mppPluginFile,array('meuPrimeiroPlugin','instalar'));
/** Funcao de inicializacao */
add_filter('init', array('meuPrimeiroPlugin','inicializar'));
</pre>
<p>Nestes ganchos determinamos a execução da função instalar na ativação do plugin e da init na inicialização do WordPress. Para o gancho de ativação definimos a variável $mppPluginFile que determina a pasta onde o plugin esta, e para isso o plugin deve estar em uma sub-pasta de plugin e não na raiz. Com esta combinação de funções e as constantes DIRECTORY_SEPARATOR (barra invertida ou não), e o __FILE__, saimos com algo como &#8220;mpp/meuprimeiroplugin.php&#8221; ou seja, pasta e arquivo necessários para a detecção de ativação.</p>
<p class="step">Divulgando seu plugin</p>
<p>Para divulgar seu plugin o primeiro e mais importante passo é adicionar ele no repositório do WordPress. Isso é uma excelente ferramenta, pois além de fornecer um repositório SVN que pode lehe ajudar a melhor controlar seu desenvolvimento ele permite que o usuário de seu plugin  possa ser notificado de novas versões diretamente na página de plugins.</p>
<p>Divulgue o seu plugin no repositório oficial do WordPress: <a href="http://wordpress.org/extend/plugins/" target="_blank">http://wordpress.org/extend/plugins/</a> usando  o link <a href="http://wordpress.org/extend/plugins/add/" target="_blank">http://wordpress.org/extend/plugins/add/</a>. A única exigência é que o plugin deve ser licenciado como GPL (<a href="http://wordpress.org/extend/plugins/about/" target="_blank">detalhes</a>)</p>
<p class="step">Conclusão</p>
<p>Espero que com este artigo (que atrasou mais do que devia) muitos usuários de WordPress e desenvolvedores da comunidade possam embarcar no desenvolvimento de novos plugins e que todos tenham uma noção do poder que o blog oferece permitindo tamanha integração de forma tão simplificada e acessível.</p>
<p>O plugin criado neste exemplo esta 100% funcional e pode até ser usado, mas use-o para aprender e vá muito mais longe. Abaixo deixo os links para download caso lhes interesse.</p>
<p>Com o atraso do artigo estamos na beira do WordPress 2.5, mas tudo indica que além da carinha nova da administração, não haverá impactos no processo descrito acima, e inclusive este exemplo já funciona na nova versão e foi testado aqui com ela.</p>
<p align="center"><strong><a href="http://www.rafaeldohms.com.br/myprojects/codeexamples/meuprimeiroplugin.rar" target="_blank">Download o meuPrimeiroPlugin</a></strong></p>
<p align="center">não esqueçam: se quiserem agradecer, contribuam com uma graninha ou um presente da lista ao lado&#8230;.</p>
</div><div id="st_tags"><a href="http://www.rafaeldohms.com.br/tag/desenvolvimento/pt/" rel="tag">desenvolvimento</a>, <a href="http://www.rafaeldohms.com.br/tag/php/pt/" rel="tag">PHP</a>, <a href="http://www.rafaeldohms.com.br/tag/tutorial/pt/" rel="tag">tutorial</a>, <a href="http://www.rafaeldohms.com.br/tag/wordpress/pt/" rel="tag">Wordpress</a><br /></div><!-- google_ad_section_end -->	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<p>&copy; Rafael Dohms for <a href="http://www.rafaeldohms.com.br">Rafael Dohms</a>, 2008. |
	  <a href="http://www.rafaeldohms.com.br/2008/03/10/desenvolvendo-plugins-para-wordpress/pt/">Permalink</a> |
	  <a href="http://www.rafaeldohms.com.br/2008/03/10/desenvolvendo-plugins-para-wordpress/pt/#comments">64 comments</a><br>
	  Want more on these topics ? Browse the archive of posts filed under <a href="http://www.rafaeldohms.com.br/category/dev/pt/" title="View all posts in Desenvolvimento" rel="category tag">Desenvolvimento</a>,  <a href="http://www.rafaeldohms.com.br/category/php/pt/" title="View all posts in PHP" rel="category tag">PHP</a>,  <a href="http://www.rafaeldohms.com.br/category/tecnologia/wordpress/pt/" title="View all posts in Wordpress" rel="category tag">Wordpress</a>,  <a href="http://www.rafaeldohms.com.br/category/tecnologia/wordpress/plug-in/pt/" title="View all posts in plug-in" rel="category tag">plug-in</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.rafaeldohms.com.br/2008/03/10/desenvolvendo-plugins-para-wordpress/pt/feed/pt/</wfw:commentRss>
		<slash:comments>64</slash:comments>
		</item>
		<item>
		<title>BlogBlog UserInfo Plugin goes PHP5!</title>
		<link>http://www.rafaeldohms.com.br/2007/11/22/blogblog-userinfo-plugin-goes-php5/pt/</link>
		<comments>http://www.rafaeldohms.com.br/2007/11/22/blogblog-userinfo-plugin-goes-php5/pt/#comments</comments>
		<pubDate>Thu, 22 Nov 2007 09:30:31 +0000</pubDate>
		<dc:creator>Rafael Dohms</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[plug-in]]></category>
		<category><![CDATA[bbuinfo]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.rafaeldohms.com.br/2007/11/22/blogblog-userinfo-plugin-goes-php5/pt/</guid>
		<description><![CDATA[Após muito ponderar sobre a compatibilidade do plugin, tomei uma decisão não radical, mas bem objetiva. Seguindo a filosofia do goPHP5 o BBUInfo não mais suportará a versão 4 do PHP, e trará todas as novidades e melhorias do PHP5 para seu rol de features.
Porque você se pergunta? Durante o atual ciclo de desenvolvimento do [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><div id=HOTWordsTxt name=HOTWordsTxt><p><a href="http://gophp5.org" title="Support GoPHP5.org"><img src="http://gophp5.org/sites/gophp5.org/buttons/goPHP5-100x33.png" alt="Support GoPHP5.org" align="right" height="33" width="100" /></a>Após muito ponderar sobre a compatibilidade do plugin, tomei uma decisão não radical, mas bem objetiva. Seguindo a filosofia do goPHP5 o <strong>BBUInfo não mais suportará a versão 4 do PHP</strong>, e trará todas as novidades e melhorias do PHP5 para seu rol de features.</p>
<p>Porque você se pergunta? Durante o atual ciclo de desenvolvimento do plugin fiz algumas mudanças e comecei a observar pontos onde o trabalho de gerar código comptativel com as duas versões estava me custando tempo e performance. Primeiramente o novo foco orientado a objetos do plugin sofreu por não poder utilizar variáveis privadas e publicas, e logo após quando procurava melhorar a verificação por erros no retorno do BB, as funções XML do PHP5 deixaram para trás o PHP4, que me gerava simplesmente muito código extra para realizar as mesmas funções.</p>
<p>Com a introdução da conversão para JSON no retorno do código do BB as funções de codificação do PHP5 simplesmente não se comparam aos &#8220;gatilhos&#8221; usados no PHP4, então por estes motivos e pensando em futuras melhorias, adeus PHP4.</p>
<p><em><strong>&#8220;eu não tenho PHP5 em meu servidor&#8221;</strong></em> tudo bem, o rompimento irá ocorrer de forma menos traumática possível. O que irá acontecer é que o plugin irá sofrer um &#8220;branch&#8221;, ou seja, seguirá duas linhas. A linha <strong>1.x</strong> seguirá com suporte apenas para o PHP5 e com muitas novidades e melhorias, já a família <strong>0.9</strong> seguirá com suporte PHP4, porém receberá apenas a correção de bugs críticos, sem novas funcionalidades, desta forma todos poderão continuar utilizando o plugin, mas quem tiver acesso ao PHP5, terá mais vantagens.</p>
<p>Espero que tenha justificado a alteração sem prejudicar muito os usuários do plugin, e deixo minha recomendação para que migrem de versão o quanto antes, sugira ao seu servidor de hospedagem que migre para o PHP5.</p>
</div><div id="st_tags"><a href="http://www.rafaeldohms.com.br/tag/bbuinfo/pt/" rel="tag">bbuinfo</a>, <a href="http://www.rafaeldohms.com.br/tag/desenvolvimento/pt/" rel="tag">desenvolvimento</a>, <a href="http://www.rafaeldohms.com.br/tag/php/pt/" rel="tag">PHP</a>, <a href="http://www.rafaeldohms.com.br/tag/plugin/pt/" rel="tag">plugin</a>, <a href="http://www.rafaeldohms.com.br/tag/wordpress/pt/" rel="tag">Wordpress</a><br /></div><!-- google_ad_section_end -->	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<p>&copy; Rafael Dohms for <a href="http://www.rafaeldohms.com.br">Rafael Dohms</a>, 2007. |
	  <a href="http://www.rafaeldohms.com.br/2007/11/22/blogblog-userinfo-plugin-goes-php5/pt/">Permalink</a> |
	  <a href="http://www.rafaeldohms.com.br/2007/11/22/blogblog-userinfo-plugin-goes-php5/pt/#comments">3 comments</a><br>
	  Want more on these topics ? Browse the archive of posts filed under <a href="http://www.rafaeldohms.com.br/category/tecnologia/wordpress/pt/" title="View all posts in Wordpress" rel="category tag">Wordpress</a>,  <a href="http://www.rafaeldohms.com.br/category/tecnologia/wordpress/plug-in/pt/" title="View all posts in plug-in" rel="category tag">plug-in</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.rafaeldohms.com.br/2007/11/22/blogblog-userinfo-plugin-goes-php5/pt/feed/pt/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>&#8220;BlogBlogs User Info&#8221; entra em novo ciclo de desenvolvimento</title>
		<link>http://www.rafaeldohms.com.br/2007/10/29/bbuinfo-entra-em-novo-ciclo-de-desenvolvimento/pt/</link>
		<comments>http://www.rafaeldohms.com.br/2007/10/29/bbuinfo-entra-em-novo-ciclo-de-desenvolvimento/pt/#comments</comments>
		<pubDate>Mon, 29 Oct 2007 10:48:06 +0000</pubDate>
		<dc:creator>Rafael Dohms</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[plug-in]]></category>
		<category><![CDATA[bbuinfo]]></category>
		<category><![CDATA[blogblogs]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[DMS]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.rafaeldohms.com.br/2007/10/29/bbuinfo-entra-em-novo-ciclo-de-desenvolvimento/pt/</guid>
		<description><![CDATA[O plugin BBUInfo entrou em ciclo de desenvolvimento novamente. Isso significa que retomei o projeto para dar continuidade às alterações planejadas pra a versão 1.0.
Logo após o lançamento o plugin teve um retorno muito positivo com muitos downloads e bastante feedback dos usuários. A avaliação junto ao BlogBlogs foi positiva e logo surgiram ideias novas [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><div id=HOTWordsTxt name=HOTWordsTxt><p>O plugin <a href="http://www.rafaeldohms.com.br/2007/07/03/novo-plugin-blogblog-user-info/pt/">BBUInfo</a> entrou em ciclo de desenvolvimento novamente. Isso significa que retomei o projeto para dar continuidade às alterações planejadas pra a versão 1.0.</p>
<p>Logo após o lançamento o plugin teve um retorno muito positivo com muitos downloads e bastante feedback dos usuários. A avaliação junto ao <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a> foi positiva e logo surgiram ideias novas e possibilidades a serem aproveitadas. Recentemente o plugin foi também aceito no <a href="http://wordpress.org/extend/plugins/bbuinfo-blogblogs-user-info-plugin/">repositório oficial</a> do WordPress, e isso motivou o reinicio das atividades, utilizando o novo servidor de controle de versão e possibilitando um controle melhor do plugin e suas versões. O projeto também foi adicionado ao <a href="http://www.ohloh.net/accounts/5022">meu perfil</a> do <a href="http://www.ohloh.net/projects/9313" target="_blank">Ohloh.net</a> como uma forma de dar mais exposição e poder acompanhar alguns dados estatísticos.</p>
<p><big><strong>Queremos<!-- End Traffic Statistics --> você!</strong></big></p>
<p>Isso mesmo agora que o plugin entrou no novo ciclo de programação, cujo objetivo final é a <a href="http://www.rafaeldohms.com.br/dmsdev/index.php?go=projViewMilestones&amp;prj=69">versão 1.0 Knuckles</a>, queremos a sua participação, queremos saber o que <strong>você quer</strong> ver no plugin, que funções, que melhorias, enfim, você dará o rumo. Participe!</p>
<p>Para enviar suas sugestões use um destas formas:</p>
<ul>
<li>Deixe um comentário aqui</li>
<li><a href="http://www.rafaeldohms.com.br/dmsdev/index.php?go=projViewTasks&amp;prj=69">Crie uma tarefa no Gerente de Projetos</a></li>
<li><a href="http://www.rafaeldohms.com.br/contato/pt/">Use o formulário de contato</a></li>
</ul>
<p>Então visite agora mesmo o <a href="http://www.rafaeldohms.com.br/dmsdev/index.php?go=projView&amp;prj=69" target="_blank">sistema de gerenciamento</a> para ver o que já esta sendo planejado e participe ativamente desta nova etapa.</p>
</div><div id="st_tags"><a href="http://www.rafaeldohms.com.br/tag/bbuinfo/pt/" rel="tag">bbuinfo</a>, <a href="http://www.rafaeldohms.com.br/tag/blogblogs/pt/" rel="tag">blogblogs</a>, <a href="http://www.rafaeldohms.com.br/tag/desenvolvimento/pt/" rel="tag">desenvolvimento</a>, <a href="http://www.rafaeldohms.com.br/tag/dms/pt/" rel="tag">DMS</a>, <a href="http://www.rafaeldohms.com.br/tag/php/pt/" rel="tag">PHP</a><br /></div><!-- google_ad_section_end -->	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<p>&copy; Rafael Dohms for <a href="http://www.rafaeldohms.com.br">Rafael Dohms</a>, 2007. |
	  <a href="http://www.rafaeldohms.com.br/2007/10/29/bbuinfo-entra-em-novo-ciclo-de-desenvolvimento/pt/">Permalink</a> |
	  <a href="http://www.rafaeldohms.com.br/2007/10/29/bbuinfo-entra-em-novo-ciclo-de-desenvolvimento/pt/#comments">9 comments</a><br>
	  Want more on these topics ? Browse the archive of posts filed under <a href="http://www.rafaeldohms.com.br/category/tecnologia/wordpress/pt/" title="View all posts in Wordpress" rel="category tag">Wordpress</a>,  <a href="http://www.rafaeldohms.com.br/category/tecnologia/wordpress/plug-in/pt/" title="View all posts in plug-in" rel="category tag">plug-in</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.rafaeldohms.com.br/2007/10/29/bbuinfo-entra-em-novo-ciclo-de-desenvolvimento/pt/feed/pt/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Aniversário do BlogBlogs!</title>
		<link>http://www.rafaeldohms.com.br/2007/07/31/aniversario-do-blogblogs/pt/</link>
		<comments>http://www.rafaeldohms.com.br/2007/07/31/aniversario-do-blogblogs/pt/#comments</comments>
		<pubDate>Tue, 31 Jul 2007 12:11:56 +0000</pubDate>
		<dc:creator>Rafael Dohms</dc:creator>
				<category><![CDATA[Carreira]]></category>
		<category><![CDATA[Tecnologia/Web]]></category>
		<category><![CDATA[plug-in]]></category>
		<category><![CDATA[bbfavs]]></category>
		<category><![CDATA[bbuinfo]]></category>
		<category><![CDATA[blogblogs]]></category>
		<category><![CDATA[blogosfera]]></category>

		<guid isPermaLink="false">http://www.rafaeldohms.com.br/2007/07/31/aniversario-do-blogblogs/pt/</guid>
		<description><![CDATA[Hoje foi escolhido como aniversário oficial do BlogBlogs, após uma breve discussão do Manoel Lemos, dono do site, com si mesmo.
O aniversário conta a partir da data do primeiro post no weblog oficial, mas o Blog blogs tem mais alguns meses encima disso tendo aparecido na internet por volta de Abril. No começo o site [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><div id=HOTWordsTxt name=HOTWordsTxt><p><img src="http://www.rafaeldohms.com.br/wp-content/uploads/blogblogs_125x125_green.gif" title="Blogblogs" alt="Blogblogs" align="right" border="0" />Hoje foi escolhido como <strong>aniversário oficial do <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a></strong>, após uma breve discussão do Manoel Lemos, dono do site, <a href="http://www.blogblogs.com.br/weblog/perma/quando-e-o-aniversario-do-blogblogs" target="_blank">com si mesmo</a>.</p>
<p>O aniversário conta a partir da data do primeiro post no weblog oficial, mas o Blog blogs tem mais alguns meses encima disso tendo aparecido na internet por volta de Abril. No começo o site apareceu na blogosfera de forma tímida, procurando seu espaço, e conquistando um ou outro blogger que procurava mais uma forma de divulgar seu trabalho, e não cair na imensidão global do ranking do Technorati, o <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a> americano <em>(notem a inversão de papéis)</em>.</p>
<p>Pouco tempo depois, o que era apenas um experimento para o Manoel, virou um ponto de refêrencia, várias pessoas fivulgavam o site e participavam, lembro como ontem o dia que fui convidado para ajudar o site, momento no qual desenvolvi um simples plugin, o <a href="http://www.rafaeldohms.com.br/2006/08/26/bb-favs/pt/">BBFavs</a> que apresentava os favoritos do BB na lateral de seu blog, um widget na verdade. <em>(abandonado, mas na lista de &#8220;to do&#8217;s&#8221;)</em></p>
<p>Em plena expansão o site lançou sua versão atualizada e com ela a nova API. Mais uma vez me senti honrado pelo convite que recebi em minha caixa postal, &#8220;venha fazer parte da equipe do BB API&#8221;. Sem relutar entrei no time, agora organizado com basecamp e metas a cumprir, e comecei o trabalho no que hoje é um grande orgulho.</p>
<p><strong>O <a href="http://www.rafaeldohms.com.br/2007/07/03/novo-plugin-blogblog-user-info/pt/" target="_blank">Plugin BBUserInfo</a>, lançado dia 3 de julho</strong> teve uma enorme aceitação por parte da blogosfera e um retorno muito positivo. Após alguns relatos de bugs, que corrigi rapidamente, o plugin começou a se espalhar pela rede, e volta e meia tenho a agradável surpresa de ver ele instalado em blogs que visito, ou de receber o ocasional trackback com análises do mesmo.</p>
<p>Recentemente o crescimento do BB esta mais uma vez disparado, com o <a href="http://www.blogblogs.com.br/weblog/perma/quer-trabalhar-no-blogblogs" target="_blank">anúncio oficial</a> da montagem de uma equipe concretizada do site as possibilidades são intermináveis. Rápido no gatilho, logo após dizer <strong>&#8220;eu aceito&#8221;</strong> no altar, nosso amigo Manoel já recrutou sua esposa como mais nova colaboradora do site,  boa sorte a ambos, com o site e com o casamento!</p>
<p>Você ainda não conhece o <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a>? Então visite, conheça e usufrua de seu incrível serviço.</p>
<p style="color: #92c535; font-size: 16px" align="center"><strong>Párabens <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a>!</strong></p>
<p style="border-top: 1px dotted #cccccc; padding: 5px; margin-top: 10px" align="center"><strong>está é uma resenha NÃO PAGA (não resisti, efeitos da onda de pay-per-post)</strong></p>
</div><div id="st_tags"><a href="http://www.rafaeldohms.com.br/tag/bbfavs/pt/" rel="tag">bbfavs</a>, <a href="http://www.rafaeldohms.com.br/tag/bbuinfo/pt/" rel="tag">bbuinfo</a>, <a href="http://www.rafaeldohms.com.br/tag/blogblogs/pt/" rel="tag">blogblogs</a>, <a href="http://www.rafaeldohms.com.br/tag/blogosfera/pt/" rel="tag">blogosfera</a><br /></div><!-- google_ad_section_end -->	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<p>&copy; Rafael Dohms for <a href="http://www.rafaeldohms.com.br">Rafael Dohms</a>, 2007. |
	  <a href="http://www.rafaeldohms.com.br/2007/07/31/aniversario-do-blogblogs/pt/">Permalink</a> |
	  <a href="http://www.rafaeldohms.com.br/2007/07/31/aniversario-do-blogblogs/pt/#comments">3 comments</a><br>
	  Want more on these topics ? Browse the archive of posts filed under <a href="http://www.rafaeldohms.com.br/category/carreira/pt/" title="View all posts in Carreira" rel="category tag">Carreira</a>,  <a href="http://www.rafaeldohms.com.br/category/tecnologia/pt/" title="View all posts in Tecnologia/Web" rel="category tag">Tecnologia/Web</a>,  <a href="http://www.rafaeldohms.com.br/category/tecnologia/wordpress/plug-in/pt/" title="View all posts in plug-in" rel="category tag">plug-in</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.rafaeldohms.com.br/2007/07/31/aniversario-do-blogblogs/pt/feed/pt/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Novo Plugin: BlogBlog User Info</title>
		<link>http://www.rafaeldohms.com.br/2007/07/03/novo-plugin-blogblog-user-info/pt/</link>
		<comments>http://www.rafaeldohms.com.br/2007/07/03/novo-plugin-blogblog-user-info/pt/#comments</comments>
		<pubDate>Tue, 03 Jul 2007 13:00:05 +0000</pubDate>
		<dc:creator>Rafael Dohms</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[plug-in]]></category>
		<category><![CDATA[bbuinfo]]></category>
		<category><![CDATA[DMS]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.rafaeldohms.com.br/2007/07/03/novo-plugin-blogblog-user-info/pt/</guid>
		<description><![CDATA[Algum tempo atrás fui procurado por Manuel Lemos, criador do BlogBlogs para participar do projeto BlogBlogs API. O objetivo deste grupo de &#8220;figurinhas carimbadas&#8221; da blogosfera era grandioso, desenvolver a nova API do BlogBlogs e botar na &#8220;rede&#8221; novas ferramentas, widgets e diversos recursos para aproximar o BlogBlogs de seus usuários.
Isso foi por torno de [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><div id=HOTWordsTxt name=HOTWordsTxt><p>Algum tempo atrás fui procurado por Manuel Lemos, criador do <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a> para participar do projeto <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a> API. O objetivo deste grupo de &#8220;figurinhas carimbadas&#8221; da blogosfera era grandioso, desenvolver a nova API do <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a> e botar na &#8220;rede&#8221; novas ferramentas, widgets e diversos recursos para aproximar o <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a> de seus usuários.</p>
<p>Isso foi por torno de 16 de Março, e logo pensei em fazer um plugin que utilizasse os dados de cada usuário e agregasse valor aos comentários dos blogs. Comecei o trabalho mas tive que parar em alguns momentos devido a falta de tempo, mas recentemente retomei o trabalho e hoje apresento os frutos.</p>
<p><strong>Como funciona?</strong></p>
<p>Bem, a ídeia original do plugin era alfo como o gravatar, plugin que através do e-mail da pessoa busca uma imagem de avatar que ele apenas precisa cadastrar uma vez, e o acompanhará sempre. Mas além de um simples avatar decidi aproveitar o potencial do <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a> e acrescentar mais dados que estão lá disponíveis. Com isso abaixo de cada comentário em seu blog, você verá os dados daquele usuário de acordo com o cadastro dele no <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a>, como mostra a imagem:</p>
<p align="center"><a title="Exemplo" href="http://www.rafaeldohms.com.br/wp-content/uploads/screen.gif"><img title="Exemplo" src="http://www.rafaeldohms.com.br/wp-content/uploads/screen.gif" border="0" alt="Exemplo" /></a></p>
<p><strong>O que preciso?</strong></p>
<p>Nada além do WordPress e do arquivo zip do plugin. O plugin é compatível com todas versões do PHP e não possui pré-requisitos para conexão como o <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a>, pois usa a mesma biblioteca que o Wordpress para fazé-lo. Além disso é possivel escolher entre duas formas de carregamento, PHP e AJAX.</p>
<p>Utilizando a opção PHP os dados são carregados antes da exibição da página, com isso os dados já estarão carregados junto com a página, porém isso pode atrasar o carregamento da página caso haja alguma demora na comunicação com o <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a>.</p>
<p>A opção AJAX realiza o carregamento após apresentar a página, tirando este peso de processamento, e apresentando efeitos agradáveis de &#8220;carregamento&#8221; enquanto os dados são carregados, esta é a opção recomendada.</p>
<p>Este plugin não é uma conquista solitária, e contou com o auxilio de algumas pessoas, onde resalto o Manoel Lemos que adaptou a API do <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a> para possibilitar este plugin, Matheus Zeuch que fez a primeira versão da API JavaScript utilizada pelo plugin, e Lourenço Rizzotto que me ajudou com o layout.</p>
<p><strong>Pegue o seu agora!</strong></p>
<p>Bem então, da mesma forma que a apple fez com o iPhone, vou fazer minha jogada de marketing, e agora, com todos vocês em fila aguardando pelo plugin, vou abrir as portas da loja e ver 500 mil downloads em dois dias!&#8230; tá, tá bom, mas é permitido sonhar não é?</p>
<p><em>Para verem mais informações sobre o plugin, como seu processo de instalação e para relatar problemas e pedir ajuda, acessem o <a href="http://www.rafaeldohms.com.br/dmsdev/index.php?go=projView&amp;prj=69">Gerenciador de Projetos da DMS Systems</a></em></p>
<p><em>Para ir direto ao download do arquivo cliquem aqui: <a href="http://wordpress.org/extend/plugins/bbuinfo-blogblogs-user-info-plugin/">Download</a></em></p>
<p style="color: #ff0000; font-size: 16px" align="center"><strong>Gostou deste plugin? Então retribua, escreva um post e deixe seu trackback, obrigado! </strong></p>
</div><div id="st_tags"><a href="http://www.rafaeldohms.com.br/tag/bbuinfo/pt/" rel="tag">bbuinfo</a>, <a href="http://www.rafaeldohms.com.br/tag/dms/pt/" rel="tag">DMS</a>, <a href="http://www.rafaeldohms.com.br/tag/php/pt/" rel="tag">PHP</a>, <a href="http://www.rafaeldohms.com.br/tag/plug-in/pt/" rel="tag">plug-in</a>, <a href="http://www.rafaeldohms.com.br/tag/wordpress/pt/" rel="tag">Wordpress</a><br /></div><!-- google_ad_section_end -->	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<p>&copy; Rafael Dohms for <a href="http://www.rafaeldohms.com.br">Rafael Dohms</a>, 2007. |
	  <a href="http://www.rafaeldohms.com.br/2007/07/03/novo-plugin-blogblog-user-info/pt/">Permalink</a> |
	  <a href="http://www.rafaeldohms.com.br/2007/07/03/novo-plugin-blogblog-user-info/pt/#comments">69 comments</a><br>
	  Want more on these topics ? Browse the archive of posts filed under <a href="http://www.rafaeldohms.com.br/category/tecnologia/wordpress/pt/" title="View all posts in Wordpress" rel="category tag">Wordpress</a>,  <a href="http://www.rafaeldohms.com.br/category/tecnologia/wordpress/plug-in/pt/" title="View all posts in plug-in" rel="category tag">plug-in</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.rafaeldohms.com.br/2007/07/03/novo-plugin-blogblog-user-info/pt/feed/pt/</wfw:commentRss>
		<slash:comments>69</slash:comments>
		</item>
		<item>
		<title>Code Search: Novas ameaças de segurança</title>
		<link>http://www.rafaeldohms.com.br/2006/10/06/code-search-novas-ameacas-de-seguranca/pt/</link>
		<comments>http://www.rafaeldohms.com.br/2006/10/06/code-search-novas-ameacas-de-seguranca/pt/#comments</comments>
		<pubDate>Fri, 06 Oct 2006 19:48:50 +0000</pubDate>
		<dc:creator>Rafael Dohms</dc:creator>
				<category><![CDATA[Segurança]]></category>
		<category><![CDATA[Tecnologia/Web]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://www.rafaeldohms.com.br/2006/10/06/code-search-novas-ameacas-de-seguranca/</guid>
		<description><![CDATA[Como já era de se esperar a estréia do Google Code Search trouxe inúmeras novas oportunidades de crackers buscarem obter informações como senhas de sites alheios. 
Em forma de pesquisa algumas pessoas buscaram obter acesso a senhas alheias utilizando expressões regulares no code search. No exemplo foi utilizada uma busca que retorna senhas de banco [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><div id=HOTWordsTxt name=HOTWordsTxt><p>Como já era de se esperar a estréia do Google Code Search trouxe inúmeras novas oportunidades de crackers buscarem obter informações como senhas de sites alheios. </p>
<p>Em forma de pesquisa algumas <a href="http://deathbycomet.com/2006/10/05/some-of-your-db-passwords-are-belong-to-us/">pessoas</a> buscaram obter acesso a senhas alheias utilizando expressões regulares no code search. No exemplo foi utilizada uma busca que retorna senhas de banco de dados de blogs do tipo wordpress.</p>
<p><strong>Não!</strong> o Google não cometeu uma falha e esta indexando de alguma forma arquivos de configuração, como já demostrei arquivos .php não mostram seu código fonte na web. O problema esta um pouco mais além e na verdade é culpa de más práticas de desenvolvedores.</p>
<p><strong>Como fugir destes problemas?</strong></p>
<p><strong>1. Não user arquivos .inc para configurações</strong> &#8211; ok esta é velha mas vale ainda, se você utilizar um arquivo desta extesão ele é indexado e visto como um arquivo de texto, use sempre .inc.php ou .inc.asp</p>
<p><strong>2. Não armazene cópias em arquivos ZIP</strong> &#8211; Não só zip como qualquer outra  forma de arquivo compactado, por um motivo simples, são estes arquivos que o Google Code Search esta indexando e disponibilizando em sua busca, ou seja, se vc tiver um backup do seu site em zip guardada lá e o google achar&#8230; sua configuração esta exposta.</p>
<p>Esta são duas dicas básicas que na verdade já deviam valer antes do Code Search, mas fica ai a recomendação para que não tenham problemas. Alguns comentpários já estao por aqi com string para busca de senhas em ASP e outras linguagens.</p>
</div><div id="st_tags"><a href="http://www.rafaeldohms.com.br/tag/google/pt/" rel="tag">google</a>, <a href="http://www.rafaeldohms.com.br/tag/seguranca/pt/" rel="tag">Segurança</a>, <a href="http://www.rafaeldohms.com.br/tag/tecnologia/pt/" rel="tag">Tecnologia/Web</a>, <a href="http://www.rafaeldohms.com.br/tag/wordpress/pt/" rel="tag">Wordpress</a><br /></div><!-- google_ad_section_end -->	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<p>&copy; Rafael Dohms for <a href="http://www.rafaeldohms.com.br">Rafael Dohms</a>, 2006. |
	  <a href="http://www.rafaeldohms.com.br/2006/10/06/code-search-novas-ameacas-de-seguranca/pt/">Permalink</a> |
	  <a href="http://www.rafaeldohms.com.br/2006/10/06/code-search-novas-ameacas-de-seguranca/pt/#comments">One comment</a><br>
	  Want more on these topics ? Browse the archive of posts filed under <a href="http://www.rafaeldohms.com.br/category/seguranca/pt/" title="View all posts in Segurança" rel="category tag">Segurança</a>,  <a href="http://www.rafaeldohms.com.br/category/tecnologia/pt/" title="View all posts in Tecnologia/Web" rel="category tag">Tecnologia/Web</a>,  <a href="http://www.rafaeldohms.com.br/category/tecnologia/wordpress/pt/" title="View all posts in Wordpress" rel="category tag">Wordpress</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.rafaeldohms.com.br/2006/10/06/code-search-novas-ameacas-de-seguranca/pt/feed/pt/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Widget: BlogBlogs.com.br &#8211; Favoritos</title>
		<link>http://www.rafaeldohms.com.br/2006/08/26/bb-favs/pt/</link>
		<comments>http://www.rafaeldohms.com.br/2006/08/26/bb-favs/pt/#comments</comments>
		<pubDate>Sat, 26 Aug 2006 21:30:00 +0000</pubDate>
		<dc:creator>Rafael Dohms</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tecnologia/Web]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[plug-in]]></category>
		<category><![CDATA[bbfavs]]></category>
		<category><![CDATA[blogblogs]]></category>

		<guid isPermaLink="false">http://www.rafaeldohms.com.br/2006/08/26/bb-favs/pt/</guid>
		<description><![CDATA[Com a publicação da API pública do BlogBlogs se tornou possível desenvolver plugins para utilizar os dados de lá em seus blogs, com este widget você poderá listar em sua página uma lista dos seus favoritos (do site BlogBlogs.com.br), sincronizada com qualquer atualização que for feita.
O que é um widget?
Um widget é um componente desenhado [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><div id=HOTWordsTxt name=HOTWordsTxt><p>Com a publicação da API pública do <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a> se tornou possível desenvolver plugins para utilizar os dados de lá em seus blogs, com este widget você poderá listar em sua página uma lista dos seus favoritos (do site <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a>.com.br), sincronizada com qualquer atualização que for feita.</p>
<p><strong>O que é um widget?</strong><br />
Um widget é um componente desenhado para funcionar com o plug-in do Wordpress chamado: <a href="http://svn.wp-plugins.org/widgets/trunk">Sidebar Widgets</a>. O plug-in é simples, ele possibilita, nos temas compatíveis, que você facilmente adicione/remova elementos da barra lateral de seu blog, como RSS, Posts e etc&#8230;</p>
<p><strong>Como instalar</strong><br />
1. Confira a instalação e ativação do Sidebar Widgets<br />
2. Faça o Download do <a href="http://www.rafaeldohms.com.br/myprojects/bb-favs/bb_favs.zip">BB-Favs</a><br />
3. Copie o arquivo bb-favs.php para a pasta /wp-content/plugins/widgets/ e faça upload para seu servidor<br />
4. Vá até a opção &#8220;Plugins&#8221; no Wordpress e ative o plugin: <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a> &#8211; Favoritos<br />
5. Entre em &#8220;Presentation&#8221; e escolha a opção &#8220;SideBar Widgets&#8221;<br />
6. Arraste a caixa &#8220;<a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a> Favs&#8221; para a lista de widgets na posição que deseja posicionar<br />
7. Clique na imagem da caixa e abra a tela de configuração<br />
8. Digite um título<br />
9. Digite seu nome de usuário no <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a><br />
10. Insira sua API key do <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a> (<a href="http://www.blogblogs.com.br/pages/view/developers">veja como obter sua key</a>)</p>
<p>Pronto, salve as alterações e confira seu Blog, agora os seus favoritos do <a target="_blank" href="http://www.blogblogs.com.br">BlogBlogs</a> são listados na lateral.</p>
<p><a href="http://www.rafaeldohms.com.br/myprojects/bb-favs/bb_favs.zip">Download</a><br />
Demo: Confira na minha barra lateral BB Favs</p>
</div><div id="st_tags"><a href="http://www.rafaeldohms.com.br/tag/bbfavs/pt/" rel="tag">bbfavs</a>, <a href="http://www.rafaeldohms.com.br/tag/blogblogs/pt/" rel="tag">blogblogs</a>, <a href="http://www.rafaeldohms.com.br/tag/php/pt/" rel="tag">PHP</a>, <a href="http://www.rafaeldohms.com.br/tag/plug-in/pt/" rel="tag">plug-in</a>, <a href="http://www.rafaeldohms.com.br/tag/tecnologiaweb/pt/" rel="tag">Tecnologia/Web</a>, <a href="http://www.rafaeldohms.com.br/tag/wordpress/pt/" rel="tag">Wordpress</a><br /></div><!-- google_ad_section_end -->	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<p>&copy; Rafael Dohms for <a href="http://www.rafaeldohms.com.br">Rafael Dohms</a>, 2006. |
	  <a href="http://www.rafaeldohms.com.br/2006/08/26/bb-favs/pt/">Permalink</a> |
	  <a href="http://www.rafaeldohms.com.br/2006/08/26/bb-favs/pt/#comments">4 comments</a><br>
	  Want more on these topics ? Browse the archive of posts filed under <a href="http://www.rafaeldohms.com.br/category/php/pt/" title="View all posts in PHP" rel="category tag">PHP</a>,  <a href="http://www.rafaeldohms.com.br/category/tecnologia/pt/" title="View all posts in Tecnologia/Web" rel="category tag">Tecnologia/Web</a>,  <a href="http://www.rafaeldohms.com.br/category/tecnologia/wordpress/pt/" title="View all posts in Wordpress" rel="category tag">Wordpress</a>,  <a href="http://www.rafaeldohms.com.br/category/tecnologia/wordpress/plug-in/pt/" title="View all posts in plug-in" rel="category tag">plug-in</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.rafaeldohms.com.br/2006/08/26/bb-favs/pt/feed/pt/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
