<?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>Gustavo Cunha</title>
	<atom:link href="http://www.gmmcal.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gmmcal.com.br</link>
	<description></description>
	<lastBuildDate>Mon, 06 Feb 2012 11:00:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Criando um plugin para WordPress usando Custom Post Types – parte 3</title>
		<link>http://www.gmmcal.com.br/tutoriais/criando-um-plugin-para-wordpress-usando-custom-post-types-parte-3/</link>
		<comments>http://www.gmmcal.com.br/tutoriais/criando-um-plugin-para-wordpress-usando-custom-post-types-parte-3/#comments</comments>
		<pubDate>Mon, 06 Feb 2012 11:00:30 +0000</pubDate>
		<dc:creator>Gustavo Cunha</dc:creator>
				<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.gmmcal.com.br/?p=646</guid>
		<description><![CDATA[Dando continuidade ao post anterior, vou mostrar como criar um widget para o nosso custom post, para podermos colocar numa barra lateral. Esse tutorial foi um pedido da Thassya no primeiro post da série. Widgets Os widgets são pequenas aplicações &#8230; <a href="http://www.gmmcal.com.br/tutoriais/criando-um-plugin-para-wordpress-usando-custom-post-types-parte-3/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Dando continuidade ao <a title="Criando um plugin para WordPress usando Custom Post Types – parte 2" href="http://www.gmmcal.com.br/tutoriais/criando-um-plugin-para-wordpress-usando-custom-post-types-parte-2/">post anterior</a>, vou mostrar como criar um widget para o nosso custom post, para podermos colocar numa barra lateral. Esse tutorial foi um pedido da Thassya no <a title="Criando um plugin para WordPress usando Custom Post Types" href="http://www.gmmcal.com.br/tutoriais/criando-um-plugin-para-wordpress-usando-custom-post-types/">primeiro post</a> da série.</p>
<h2>Widgets</h2>
<p>Os widgets são pequenas aplicações que podem ser adicionadas a um sistema. Em um site, os widgets são comumente usados para exibir funcionalidades que não são produzidas pelo próprio site, como clima/tempo, índices financeiros, entre outros, ou para exibir atalhos para áreas ou temas importantes do site, como lista de categorias, nuvens de tags, últimos comentários, entre outros.</p>
<p>Voltando a nossa conversa de desenvolvedor, como podemos construir um widget para o nosso custom post? O processo é muito simples.</p>
<h2>A classe WP_Widget</h2>
<p>Para criar-mos um widget, basta criar uma classe qualquer que extenda a classe <a title="WP_Widget" href="http://codex.wordpress.org/WordPress_Widgets" target="_blank">WP_Widget</a> e implementar o construtor e três simples métodos:</p>
<ul>
<li><strong>construtor</strong>: O construtor da nossa classe irá instanciar o construtor da super-classe, passando os parâmetros de configuração do nosso plugin.</li>
<li><strong>widget()</strong>: é o método que irá exibir o conteúdo do seu widget no site. É o único método, além do construtor, cuja a implementação é obrigatória.</li>
<li><strong>form()</strong>: é o método que exibirá um formulário de edição na administração do WordPress, onde nós colocaremos as configurações do widget que podem ser alteradas pelo adminstrador do blog. Caso o seu widget não possua nenhuma configuração a ser feita, este método não precisa ser implementado.</li>
<li><strong>update()</strong>: é o método que tratará as opções inseridas no método form(). Se não houver opções a serem configuradas ou os dados inseridos não precisem ser formatados, este método não precisa ser implementado.</li>
</ul>
<p>Vamos então a implementação do nosso widget.</p>
<h2>O Código</h2>
<p>Vou criar uma classe chamada Widget_Demonstracao, que extenderá a classe WP_Widget, e implementar cada um dos três métodos, além de implementar o construtor para o nosso plugin. Nesse caso, eu segui o <a title="WP_Widgets" href="http://codex.wordpress.org/WordPress_Widgets" target="_blank">tutorial do wordpress</a>. O código ficou assim.</p>
<pre>class Widget_Demonstracao extends WP_Widget {

 function __construct() {
  $widget_ops = array( 'classname' =&gt; 'widget_demostracao', 'description' =&gt; __( "Últimos posts de demostração" ) );
  parent::__construct('demostracao', __('Demostração'), $widget_ops);
 }

 function widget( $args, $instance ) {
  extract( $args );

  $titulo = apply_filters('widget_title', $instance['titulo'], $instance, $this-&gt;id_base);
  $qtd = !empty( $instance['qtd'] ) ? $instance['qtd'] : '10';

  echo $before_widget;
  if ( $titulo )
   echo $before_title . $titulo . $after_title;

  $args = array(
   'showposts' =&gt; $qtd
  );
  $query = new WP_Query_Demonstracao($args);
  if($query-&gt;have_posts()){
   ?&gt;
   &lt;ul&gt;
    &lt;?php
    while ($query-&gt;have_posts()){
     $query-&gt;the_post();
     ?&gt;
     &lt;li&gt;&lt;a href="&lt;?php the_permalink(); ?&gt;"&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/li&gt;
     &lt;?php
    }
    ?&gt;
   &lt;/ul&gt;
   &lt;?php
  }
  // restaurar a consulta original do WP
  wp_reset_query();
  echo $after_widget;
 }

 function update( $new_instance, $old_instance ) {
  $instance = $old_instance;
  $instance['titulo'] = strip_tags($new_instance['titulo']);
  $instance['qtd'] = strip_tags($new_instance['qtd']);

  return $instance;
 }

 function form( $instance ) {
  //Defaults
  $instance = wp_parse_args( (array) $instance, array( 'titulo' =&gt; 'Últimas demonstrações') );
  $titulo = esc_attr( $instance['titulo'] );
  $qtd = isset($instance['qtd']) ? (int) $instance['qtd'] : 10;
  ?&gt;
  &lt;p&gt;&lt;label for="&lt;?php echo $this-&gt;get_field_id('titulo'); ?&gt;"&gt;Titulo&lt;/label&gt;
  &lt;input class="widefat" id="&lt;?php echo $this-&gt;get_field_id('titulo'); ?&gt;" name="&lt;?php echo $this-&gt;get_field_name('titulo'); ?&gt;" type="text" value="&lt;?php echo $titulo; ?&gt;" /&gt;&lt;/p&gt;
  &lt;p&gt;&lt;label for="&lt;?php echo $this-&gt;get_field_id('qtd'); ?&gt;"&gt;Quantidade de posts para exibir&lt;/label&gt;
  &lt;input class="widefat" id="&lt;?php echo $this-&gt;get_field_id('qtd'); ?&gt;" name="&lt;?php echo $this-&gt;get_field_name('qtd'); ?&gt;" type="text" value="&lt;?php echo $qtd; ?&gt;" /&gt;&lt;/p&gt;
  &lt;?php
 }

}</pre>
<p>Ok, eu sei que o código ficou complicado. Mas ele está disponível para <a title="Plugin com Widget" href="http://www.gmmcal.com.br/wp-content/uploads/2012/02/demo.zip" target="_blank">download</a>. Vamos a explicação dos métodos.</p>
<h2>__construct()</h2>
<p>É o construtor do nosso widget. Para os menos desavisados, ou que ainda não estão familiarizados com a sintaxe do PHP5, <strong>__construct()</strong> é um método genérico de construtor de classes, que substitui o método com a mesma assinatura da classe. Se o seu servidor ou ambiente local roda o PHP4, esse método não será chamado e seu widget não funcionará. Optei por mostrar esse método, visto que as versões mais recentes do WordPress exigem, no mínimo, o PHP 5.2.4, e eu só uso o WordPress atualizado. Se você ainda assim tiver dúvidas de como fazer funcionar no PHP4 e/ou ainda roda uma versão anterior a 3.2 do WordPress, <a title="Contato" href="http://www.gmmcal.com.br/contato/" target="_blank">escreva-me</a> e eu terei o prazer em ajudar.</p>
<h2>widget()</h2>
<p>É o método que faz a saída do widget no seu tema. Ele recebe dois parâmetros, a primeira com as configurações feitas pelo tema e a segunda com os dados da configuração da instância feita pelo administrador do site.</p>
<h2>form()</h2>
<p>É o método que tem o formulário com as opções de configuração do widget. Nela você pode deixar com que o administrador altere o titulo do widget, ou quais as taxonomias que serão exibidas, quantidade de posts, ou quaisquer configurações pertinentes ao seu widget. Ele recebe um parâmetro com as configurações atuais do seu widget.</p>
<h2>update()</h2>
<p>É o método que trata as opções digitadas no formulário do método form(), antes de salva-las. O salvamento será feito pela classe WP_Widget, e você não precisa se preocupar com isso. Ele recebe dois parâmetros, um com os dados digitados pelo administrador do site e um com os dados anteriores a alteração.</p>
<p>Feito isso, só falta inicializar-mos nosso widget, para que o wordpress possa exibir-lo na área de widgets. Para isso, faremos do mesmo modo que fizemos com o nosso plugin, só que usaremos a action <strong>widgets_init</strong>.</p>
<pre>add_action( 'widgets_init', 'registerWidgetDemostracao' );
function registerWidgetDemostracao(){ register_widget("Widget_Demonstracao"); }</pre>
<p>Observem que o parâmetro da função <strong>register_widget</strong> é o nome da nossa classe. Isso é obrigatório.</p>
<p>Feito isso, basta ativar o plugin (se ainda não estiver ativo), ir em <strong>Aparência &gt; Widgets</strong> e arrastar seu widget para sua sidebar. Pronto, seu widget estará ativo no seu site.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmmcal.com.br/tutoriais/criando-um-plugin-para-wordpress-usando-custom-post-types-parte-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iOS Development Training em Maceió!!!</title>
		<link>http://www.gmmcal.com.br/dicas/ios-development-training-em-maceio/</link>
		<comments>http://www.gmmcal.com.br/dicas/ios-development-training-em-maceio/#comments</comments>
		<pubDate>Sat, 17 Dec 2011 04:15:22 +0000</pubDate>
		<dc:creator>Gustavo Cunha</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Curso]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPhone OS]]></category>
		<category><![CDATA[Treinamento]]></category>

		<guid isPermaLink="false">http://www.gmmcal.com.br/?p=642</guid>
		<description><![CDATA[Oportunidade única: Curso de iOS em Maceió! <a href="http://www.gmmcal.com.br/dicas/ios-development-training-em-maceio/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Galera, vai acontecer um curso de desenvolvimento para iOS em Maceió, ministrado pela única empresa autorizada pela Apple do Brasil, a <a title="IDS Tecnologia" href="https://www.ids.com.br" target="_blank">IDS Tecnologia</a>. O curso está sendo promovido pelo <a title="Sururu Digital" href="http://sururudigital.com.br/" target="_blank">Sururu Digital</a>, e todos os dados podem ser visualizados pelo <a title="Curso iOS" href="http://sururudigital.com.br/cursoios/" target="_blank">site deles</a>, inclusive o link para inscrição. Eu já fiz a minha. Vamos?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmmcal.com.br/dicas/ios-development-training-em-maceio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>II Prêmio Alagoano de Blogs &#8211; O Resultado</title>
		<link>http://www.gmmcal.com.br/blog/ii-premio-alagoano-de-blogs-o-resultado/</link>
		<comments>http://www.gmmcal.com.br/blog/ii-premio-alagoano-de-blogs-o-resultado/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 01:06:24 +0000</pubDate>
		<dc:creator>Gustavo Cunha</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Gustavo Cunha]]></category>
		<category><![CDATA[Gustavo Márcio]]></category>
		<category><![CDATA[Prêmio Alagoano de Blogs]]></category>

		<guid isPermaLink="false">http://www.gmmcal.com.br/?p=634</guid>
		<description><![CDATA[Como eu já tinha falado em um post anterior, eu participei do II Prêmio Alagoano de Blogs na categoria tecnologia. Na última quinta, 20 de outubro, houve a festa de premiação dos vencedores, ou melhor, dos escolhidos pelos jurados, pois &#8230; <a href="http://www.gmmcal.com.br/blog/ii-premio-alagoano-de-blogs-o-resultado/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Como eu já tinha falado em <a title="2° Prêmio Alagoano de Blogs" href="http://www.gmmcal.com.br/blog/2%c2%b0-premio-alagoano-de-blogs/">um post anterior</a>, eu participei do <a title="II Prêmio Alagoano de Blogs" href="http://www.premioalagoanodeblogs.com.br/" target="_blank">II Prêmio Alagoano de Blogs</a> na categoria tecnologia. Na última quinta, 20 de outubro, houve a festa de premiação dos vencedores, ou melhor, dos escolhidos pelos jurados, pois só o fato de manter um blog em um estado como Alagoas, que não possui muitos incentivos, já é uma vitória. Mais complicado ainda é ter um blog de tecnologia, e escrever sobre tecnologia. Apesar de não ter sido premiado, sinto-me honrado em participar da festa. Concorri com grandes referências da tecnologia no estado, como o <a title="Beto" href="http://beto.euqueroserummacaco.com/blog/" target="_blank">Beto</a> ou o <a title="Sururu Digital" href="http://www.sururudigital.com.br/" target="_blank">Sururu Digital</a>. Parabéns a todos os vencedores. Essa participação só me motivou mais a aprender a escrever, estudar novas tecnologias e compartilhar o conhecimento com quaisquer pessoas que leem isto. Alias, que tal se identificarem. Tenho tido pouco feedback sobre meus posts. Deixe um comentário abaixo. Vamos trocar figurinhas.</p>
<p>Sem mais, por enquanto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmmcal.com.br/blog/ii-premio-alagoano-de-blogs-o-resultado/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Criando URLs dinâmicas usando Custom Posts</title>
		<link>http://www.gmmcal.com.br/tutoriais/criando-urls-dinamicas-usando-custom-posts/</link>
		<comments>http://www.gmmcal.com.br/tutoriais/criando-urls-dinamicas-usando-custom-posts/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 15:00:50 +0000</pubDate>
		<dc:creator>Gustavo Cunha</dc:creator>
				<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.gmmcal.com.br/?p=625</guid>
		<description><![CDATA[Dando continuidade a construção de um plugin para wordpress, vou dar uma dica simples, mas que pode ser bem útil para diversos casos: Criar uma url dinâmica, baseada em uma regra qualquer definida pelo desenvolvedor. Se você já teve a &#8230; <a href="http://www.gmmcal.com.br/tutoriais/criando-urls-dinamicas-usando-custom-posts/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Dando continuidade a construção de um <a title="Criando um plugin para WordPress usando Custom Post Types – parte 2" href="http://www.gmmcal.com.br/tutoriais/criando-um-plugin-para-wordpress-usando-custom-post-types-parte-2/">plugin para wordpress</a>, vou dar uma dica simples, mas que pode ser bem útil para diversos casos: Criar uma url dinâmica, baseada em uma regra qualquer definida pelo desenvolvedor.</p>
<p>Se você já teve a curiosidade de olhar a página de configuração de links permanentes do wordpress, já deve ter percebido <a title="Usando links permanentes" href="http://codex.wordpress.org/pt-br:Usando_Links_Permanentes#Tags_de_estrutura" target="_blank">um link</a> para a documentação que ensina como customizar a url do seu blog/site. Normalmente, os blogs em wordpress usam a estrutura /ANO/MES/DIA/POST, mas essa estrutura é customizável. Não seria interessante usar isso em nosso plugin? Eventualmente é, e por algum motivo desconhecido, as tags de URL padrões do wordpress só funcionam para os posts nativos, não funcionando para os custom posts criados pelos desenvolvedores. Mas isso é facilmente contornável, com apenas um filtro e um método no nosso plugin. Vejamos como:</p>
<p>No método init() do nosso plugin, vamos colocar um filtro para que, toda vez que a url for gerada, ela passe por um método nosso, onde faremos o tratamento necessário.</p>
<pre>add_filter('post_type_link', array(&amp;$this, 'demonstracao_post_type_link'));</pre>
<p>Feito isso, vamos criar o método demonstracao_post_type_link():</p>
<pre>function demonstracao_post_type_link($post_link, $id = 0, $leavename = false){
	if (strpos('%author%', $post_link) &lt; 0){
		return $post_link;
	}
	$post = get_post($id);
	if (!is_object($post) || $post-&gt;post_type != 'demonstracao'){
		return $post_link;
	}
	$author = get_the_author_meta('user_nicename', $post-&gt;post_author);
	return str_replace('%author%', $author, $post_link);
}</pre>
<p>Observe que eu estou fazendo um tratamento para trocar a tag %author%, que é uma tag nativa. Você poderia usar qualquer tag, e não precisa usar %% como marcador. Pra finalizar, é preciso alterar a estrutura do rewrite do nosso custom post para refletir a nossa estrutura dinâmica. No plugin anterior, altere a linha onde tem</p>
<pre>'rewrite' =&gt; array(
	'slug' =&gt; 'demonstracao',
	'with_front' =&gt; false,
	'feeds' =&gt; true,
	'pages' =&gt; true,
),</pre>
<p>por</p>
<pre>'rewrite' =&gt; array(
	'slug' =&gt; 'demonstracao/%author%',
	'with_front' =&gt; false,
	'feeds' =&gt; true,
	'pages' =&gt; true,
),</pre>
<p>Feito isso, a URL do nosso plugin terá o slug do autor do post dentro da sua estrutura de link permanente.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmmcal.com.br/tutoriais/criando-urls-dinamicas-usando-custom-posts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Novo blog na área</title>
		<link>http://www.gmmcal.com.br/blog/novo-blog-na-area/</link>
		<comments>http://www.gmmcal.com.br/blog/novo-blog-na-area/#comments</comments>
		<pubDate>Fri, 23 Sep 2011 12:00:03 +0000</pubDate>
		<dc:creator>Gustavo Cunha</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Coisa Cozinha]]></category>
		<category><![CDATA[Culinária]]></category>
		<category><![CDATA[Novidades]]></category>
		<category><![CDATA[Rosana Batista]]></category>

		<guid isPermaLink="false">http://www.gmmcal.com.br/?p=618</guid>
		<description><![CDATA[Galera, vou sair um pouco do assunto tecnologia para fazer a indicação de um blog muito legal que foi lançado recentemente: o Coisa Cozinha. O blog é mantido por duas amigas e vai postar dicas relacionadas a culinária, restaurantes, receitas, &#8230; <a href="http://www.gmmcal.com.br/blog/novo-blog-na-area/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Galera, vou sair um pouco do assunto tecnologia para fazer a indicação de um blog muito legal que foi lançado recentemente: o <a title="Coisa Cozinha" href="http://www.coisacozinha.com.br/" target="_blank">Coisa Cozinha</a>. O blog é mantido por duas amigas e vai postar dicas relacionadas a culinária, restaurantes, receitas, experiências e etc, sempre com um tom mais bem humorado. Acessem, comentem, colaborem&#8230; Vale a pena conferir o trabalho delas!!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmmcal.com.br/blog/novo-blog-na-area/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como inserir áudio e vídeo no WordPress</title>
		<link>http://www.gmmcal.com.br/dicas/como-inserir-audio-e-video-no-wordpress/</link>
		<comments>http://www.gmmcal.com.br/dicas/como-inserir-audio-e-video-no-wordpress/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 02:27:39 +0000</pubDate>
		<dc:creator>Gustavo Cunha</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Novidades]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.gmmcal.com.br/?p=598</guid>
		<description><![CDATA[Hoje, no twitter, surgiu uma dúvida do blog do Walmart Games em como consertar um erro que existia em um post deles: o vídeo do youtube estava estourando o layout do blog. Essa solução é muito simples e envolve 2 passos básicos &#8230; <a href="http://www.gmmcal.com.br/dicas/como-inserir-audio-e-video-no-wordpress/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="mceTemp">
<p><a href="http://www.gmmcal.com.br/wp-content/uploads/2011/09/walmart_bug.png" rel="shadowbox[sbpost-598];player=img;" title="Bug no vídeo do Mundo Walmart"><img class="alignright" title="Bug no vídeo do Mundo Walmart" src="http://www.gmmcal.com.br/wp-content/uploads/2011/09/walmart_bug-300x137.png" alt="" width="300" height="137" /></a></p>
<p>Hoje, no twitter, surgiu uma dúvida do blog do <a title="Mundo Walmart" href="http://www.mundowalmart.com.br/" target="_blank">Walmart Games</a> em como consertar um erro que existia em um post deles: o vídeo do youtube estava estourando o layout do blog. Essa solução é muito simples e envolve 2 passos básicos na configuração do tema/sistema. Vou explicar como resolver.</p>
<h2>Jetpack</h2>
<p>O primeiro passo é instalar o <a title="Jetpack" href="http://wordpress.org/extend/plugins/jetpack/" target="_blank">Jetpack</a>. É um plugin feito pela equipe que desenvolve o WordPress.com e inclui diversas funcionalidades, como estatísticas, widget do twitter, links encurtados do wp.me, entre outros. Mas vou focar numa funcionalidade específica: incluir vídeos e áudios.</p>
<h2>Configurando o tema</h2>
<p>Pra configurar o tema, é preciso uma edição muito simples no arquivo functions.php do tema. Abra o arquivo, e em qualquer lugar dele (costuma-se colocar no inicio), insira o seguinte código:</p>
<pre>if ( ! isset( $content_width ) )
	$content_width = 640; // tamanho da área de conteúdo</pre>
<p>Pronto. Seu tema está apto a receber vídeos sem estragar o seu layout.</p>
<h2>Inserindo Vídeo</h2>
<p>Pra completar a dica, vou ensinar a inserir vídeos no post de uma maneira super fácil. Depois de instalado o plugin e feita a configuração, o Jetpack dá várias maneiras de colocar vídeos. A que ele ensina é usando <a title="Shortcodes Jetpack" href="http://en.support.wordpress.com/shortcodes/" target="_blank">shortcodes</a>. Basicamente você vai inserir um pequeno código no seu post e o sistema irá trocar esse código pelo vídeo. Segue um exemplo:</p>
<pre>[ youtube http://www.youtube.com/watch?v=VvaZA5NwMTI ] (sem espaços no inicio e fim)</pre>
<p>resultaria em:</p>
<span style="text-align:center; display: block;"><a href="http://www.gmmcal.com.br/dicas/como-inserir-audio-e-video-no-wordpress/"><img src="http://img.youtube.com/vi/VvaZA5NwMTI/2.jpg" alt="" /></a></span>
<p>Mas acho que todos concordam que isso não é tão fácil, né? Pra vídeos do Youtube ou do Vimeo (não testei de outros canais de vídeos, mas acho que funciona), basta colar a url do vídeo em uma linha (sem nada de formatação antes nem depois) e o Jetpack se encarrega de fazer o &#8216;trabalho sujo&#8217;. Ou seja, basta isso:</p>
<pre>http://www.youtube.com/watch?v=VvaZA5NwMTI</pre>
<p>pra ter isso:</p>
<p><object width="595" height="446"><param name="movie" value="http://www.youtube.com/v/VvaZA5NwMTI?version=3"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/VvaZA5NwMTI?version=3" type="application/x-shockwave-flash" width="595" height="446" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Vale uma dica interessante. Qualquer outra informação na URL que não seja o endereço do vídeo (youtube.com/watch?v=iddovideo) pode impedir que o vídeo seja exibido. Se isso acontecer, é só fazer a correção da URL que tudo fica certo.</p>
<h2>Inserindo Áudio</h2>
<p>Infelizmente não tem como inserir automaticamente o player de áudio como fizemos com o de vídeo. Pra inserir áudio no site teremos que fazer o upload do arquivo para o banco de mídia e usar o shortcode [ audio urldamp3 ] (sem espaços no inicio e fim) e o sistema irá colocar o player abaixo.</p>
<span style='text-align:left;display:block;'><p><object type='application/x-shockwave-flash' data='http://s0.wp.com/wp-content/plugins/audio-player/player.swf' width='290' height='24' id='audioplayer1'><param name='movie' value='http://s0.wp.com/wp-content/plugins/audio-player/player.swf' /><param name='FlashVars' value='&amp;bg=0xf8f8f8&amp;leftbg=0xeeeeee&amp;lefticon=0x666666&amp;rightbg=0xcccccc&amp;rightbghover=0x999999&amp;righticon=0x666666&amp;righticonhover=0xffffff&amp;text=0x666666&amp;slider=0x666666&amp;track=0xFFFFFF&amp;border=0x666666&amp;loader=0x9FFFB8&amp;soundFile=http%3A%2F%2Fwww.gmmcal.com.br%2Fwp-content%2Fuploads%2F2011%2F09%2F12-Os-Tres-Ponteiros.mp3' /><param name='quality' value='high' /><param name='menu' value='false' /><param name='bgcolor' value='#FFFFFF' /><param name='wmode' value='opaque' /></object></p></span>
<p>Se você gostou da música, ela se chama <a title="Download" href="http://www.gmmcal.com.br/wp-content/uploads/2011/09/12-Os-Tres-Ponteiros.mp3" rel="shadowbox[sbpost-598];player=flv;width=500;height=0;" target="_blank">Os Três Ponteiros</a>, de uma banda de Recife chamada Habagaceira (que mudou de nome para Outro Sim). Mais músicas deles podem ser encontradas no <a title="Outro Sim - Myspace" href="http://www.myspace.com/outrosim" target="_blank">Myspace da banda</a>.</p>
<p>Sem mais, por enquanto.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.gmmcal.com.br/dicas/como-inserir-audio-e-video-no-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.gmmcal.com.br/wp-content/uploads/2011/09/12-Os-Tres-Ponteiros.mp3" length="1651213" type="audio/mpeg" />
		</item>
		<item>
		<title>II Prêmio Alagoano de Blogs &#8211; modo jabá gratuito</title>
		<link>http://www.gmmcal.com.br/blog/ii-premio-alagoano-de-blogs-modo-jaba-gratuito/</link>
		<comments>http://www.gmmcal.com.br/blog/ii-premio-alagoano-de-blogs-modo-jaba-gratuito/#comments</comments>
		<pubDate>Sat, 10 Sep 2011 02:22:01 +0000</pubDate>
		<dc:creator>Gustavo Cunha</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Prêmio Alagoano de Blogs]]></category>

		<guid isPermaLink="false">http://www.gmmcal.com.br/?p=596</guid>
		<description><![CDATA[Já falei que estou concorrendo no II prêmio de blogs alagoanos, mas não estou escrevendo para pedir seu voto (mas se quiser ir lá votar, seria bem legal). Na verdade, vou fazer as minhas indicações, sem ganhar nada em troca. &#8230; <a href="http://www.gmmcal.com.br/blog/ii-premio-alagoano-de-blogs-modo-jaba-gratuito/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Já falei que <a title="2° Prêmio Alagoano de Blogs" href="http://www.gmmcal.com.br/blog/2%c2%b0-premio-alagoano-de-blogs/">estou concorrendo</a> no <a title="Vote em mim" href="http://www.premioalagoanodeblogs.com.br/concorrente/gustavo-cunha/" target="_blank">II prêmio de blogs alagoanos</a>, mas não estou escrevendo para pedir seu voto (mas se quiser ir lá votar, seria bem legal). Na verdade, vou fazer as minhas indicações, sem ganhar nada em troca. Se quiser votar neles, seria massa! Segue as categorias e minhas dicas:</p>
<ul>
<li>Corporativo &#8211; <a title="Tengu" href="http://www.premioalagoanodeblogs.com.br/concorrente/tengu-propaganda/" target="_blank">Tengu Propaganda</a>, dos meus amigos publicitários;</li>
<li>Moda &#8211; <a title="Eva Miranda" href="http://www.premioalagoanodeblogs.com.br/concorrente/eva-miranda/" target="_blank">Eva Miranda</a>, parceira de trabalho;</li>
<li>Opinião &#8211; <a title="Ora BoLas!" href="http://www.premioalagoanodeblogs.com.br/concorrente/ora-bolas/" target="_blank">Ora BoLas!</a>, do multifunção Leo Arcoverde;</li>
<li>Profissional &#8211; <a title="Biscuitar" href="http://www.premioalagoanodeblogs.com.br/concorrente/biscuitar/" target="_blank">Biscutar</a>, da grande artista e companheira de trabalho Larissa Lima.</li>
</ul>
<p>Votem e mim e votem neles <img src='http://www.gmmcal.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmmcal.com.br/blog/ii-premio-alagoano-de-blogs-modo-jaba-gratuito/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando um plugin para WordPress usando Custom Post Types &#8211; parte 2</title>
		<link>http://www.gmmcal.com.br/tutoriais/criando-um-plugin-para-wordpress-usando-custom-post-types-parte-2/</link>
		<comments>http://www.gmmcal.com.br/tutoriais/criando-um-plugin-para-wordpress-usando-custom-post-types-parte-2/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 01:20:12 +0000</pubDate>
		<dc:creator>Gustavo Cunha</dc:creator>
				<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.gmmcal.com.br/?p=573</guid>
		<description><![CDATA[Dando continuidade ao post anterior, vou mostrar como colocar colunas extras na listagem e campos extras no nosso custom post. Colunas extras Para colocar colunas extras na listagem de posts, vamos precisar usar um filtro e uma ação. São eles: &#8230; <a href="http://www.gmmcal.com.br/tutoriais/criando-um-plugin-para-wordpress-usando-custom-post-types-parte-2/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Dando continuidade ao <a title="Criando um plugin para WordPress usando Custom Post Types" href="http://www.gmmcal.com.br/tutoriais/criando-um-plugin-para-wordpress-usando-custom-post-types/">post anterior</a>, vou mostrar como colocar colunas extras na listagem e campos extras no nosso custom post.</p>
<h2>Colunas extras</h2>
<p>Para colocar colunas extras na listagem de posts, vamos precisar usar um filtro e uma ação. São eles:</p>
<ul>
<li>Filtro <a title="manage_edit-${post_type}_columns" href="http://codex.wordpress.org/Plugin_API/Filter_Reference/manage_edit-post_type_columns" target="_blank">manage_edit-${post_type}_columns</a>, que irá colocar as colunas no inicio e no fim da tabela da listagem;</li>
<li>Ação <a title="manage_${post_type}_posts_custom_column" href="http://codex.wordpress.org/Plugin_API/Action_Reference/manage_posts_custom_column" target="_blank">manage_${post_type}_posts_custom_column</a>, que irá preencher os valores customizados nas linhas (se existir);</li>
</ul>
<p>Os filtros e ações devem estar no método init() em quaisquer casos. Vamos ao código:</p>
<pre>add_filter("manage_edit-demonstracao_columns", array(&amp;$this, "edit_columns"));
add_action("manage_demonstracao_posts_custom_column", array(&amp;$this, "custom_columns"));</pre>
<p>Observer que existe um código &#8220;estranho&#8221; nas linhas. O array(&amp;$this, &#8216;nome_da_funcao&#8217;) serve apenas para referenciar que estamos chamando um método dentro da própria classe. Vamos criar os métodos edit_columns e custom_columns.</p>
<h3>Método edit_columns</h3>
<pre>function edit_columns($columns){
	// posição onde será inserida as colunas. no caso, após o título.
	$posicao = 2;
	// separando o array, para inserir no meio.
	$antes = array_reverse(array_splice(array_reverse($columns), count($columns)-$posicao));
	$depois = array_splice($columns, $posicao);
	// nome_da_coluna =&gt; label_da_coluna
	$novascolunas = array(
		"demonstracao_categorias" =&gt; "Categorias",
	);
	$columns = array_merge($antes, $novascolunas, $depois);
	return $columns;
}</pre>
<h3>Método custom_columns</h3>
<pre>function custom_columns($column){
  // Customizar a saída das colunas
  global $post;
  switch ($column){
    case "demonstracao_categorias":
      $taxonomy = "categorias";
      $tipos = get_the_terms(0, $taxonomy);
      $tipos_html = array();
      if (is_array($tipos)){
        foreach ($tipos as $tipo)
          array_push($tipos_html, $tipo-&gt;name);
        echo implode($tipos_html, ", ");
      }
    break;
  }
}</pre>
<p>Feito isso, temos a coluna &#8216;Categorias&#8217; após a coluna &#8216;Titulo&#8217;.</p>
<h2>Campos extras</h2>
<p>Para criar campos extras, vamos precisar das wp_insert_post e admin_init. Eu costumo criar um array de elementos como atributo da classe, pra facilitar a inserção dos campos extras. Esses campos são chamados de postmetas ou <a title="Custom Fields" href="http://codex.wordpress.org/Custom_Fields" target="_blank">custom fields</a>. Para essa demonstração, vou criar dois campos extras, ambos campos texto. Assim criamos um array, dentro da nossa classe:</p>
<pre>var $meta_fields = array('umcampoextra','outrocampoextra');</pre>
<p>Após isso, adicionamos os métodos as ações.</p>
<pre>add_action("wp_insert_post", array(&amp;$this, "wp_insert_post"), 10, 2);
add_action("admin_init", array(&amp;$this, "admin_init"));</pre>
<p>Agora só falta criar os métodos &#8216;wp_insert_post&#8217; e &#8216;admin_init&#8217;</p>
<pre>function wp_insert_post($post_id, $post = null){
  if ($post-&gt;post_type == "demonstracao"){
    // Loop nos dados do POST
    foreach ($this-&gt;meta_fields as $key){
      $value = @$_POST[$key];
      if (empty($value)){
        delete_post_meta($post_id, $key);
        continue;
      }
      // Se o valor é uma string, ele deve ser único
      if (!is_array($value)){
        // Atualizar meta
        if (!update_post_meta($post_id, $key, $value)){
          // Ou inserir meta
          add_post_meta($post_id, $key, $value);
     	}
      }else{
        // Se o valor passado for um array, devemos remover todos os dados anteriores
        delete_post_meta($post_id, $key);
        // Loop no array adicionando os valores ao post meta como entradas diferentes com o mesmo nome
        foreach ($value as $entry)
          add_post_meta($post_id, $key, $entry);
      }
    }
  }
}</pre>
<pre>function admin_init(){
  // Adicionando box de mais informações - http://codex.wordpress.org/Function_Reference/add_meta_box
  add_meta_box("info", "Mais Informações", array(&amp;$this, "info_options"), "demonstracao", "normal", "high");
}

// Administrar conteúdo do post meta
function info_options(){
  global $post;
  $custom = get_post_custom($post-&gt;ID);
  $umcampoextra = $custom["umcampoextra"][0];
  $outrocampoextra = $custom["outrocampoextra"][0];
  ?&gt;
  &lt;label for="umcampoextra"&gt;Um campo extra:&lt;/label&gt;
  &lt;br /&gt;
  &lt;input type="text" id="umcampoextra" name="umcampoextra" value="&lt;?php echo $umcampoextra; ?&gt;" style="width:100%;" /&gt;
  &lt;br /&gt;
  &lt;label for="outrocampoextra"&gt;Outro campo extra:&lt;/label&gt;
  &lt;br /&gt;
  &lt;input type="text" id="outrocampoextra" name="outrocampoextra" value="&lt;?php echo $outrocampoextra; ?&gt;" style="width:100%;" /&gt;
  &lt;br /&gt;
  &lt;?php
}</pre>
<p>Feito isso, temos o nosso plugin pronto. Agora é só preparar o seu tema (ou do seu cliente) e publicar o site. Para baixar o plugin de demonstração, <a title="Plugin de demonstração" href="http://www.gmmcal.com.br/wp-content/uploads/2011/09/demo.zip">clique aqui</a>.</p>
<h2>Galeria de Fotos</h2>

<a href='http://www.gmmcal.com.br/wp-content/uploads/2011/09/demo-custom-column.png' rel='shadowbox[sbalbum-573];player=img;' title='Coluna customizada' title="Coluna customizada"><img width="150" height="150" src="http://www.gmmcal.com.br/wp-content/uploads/2011/09/demo-custom-column-150x150.png" class="attachment-thumbnail" alt="Coluna customizada" title="Coluna customizada" /></a>
<a href='http://www.gmmcal.com.br/wp-content/uploads/2011/09/demo-custom-fields.png' rel='shadowbox[sbalbum-573];player=img;' title='Campos Extras' title="Campos Extras"><img width="150" height="150" src="http://www.gmmcal.com.br/wp-content/uploads/2011/09/demo-custom-fields-150x150.png" class="attachment-thumbnail" alt="Campos Extras" title="Campos Extras" /></a>

<p>Se você tem alguma sugestão de tema ou alguma dúvida de WordPress, <a title="Contato" href="http://www.gmmcal.com.br/contato/">escreva pra mim</a> que eu terei o maior prazer em responder. Quem sabe a sua dúvida não vira um artigo aqui.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmmcal.com.br/tutoriais/criando-um-plugin-para-wordpress-usando-custom-post-types-parte-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Criando um plugin para WordPress usando Custom Post Types</title>
		<link>http://www.gmmcal.com.br/tutoriais/criando-um-plugin-para-wordpress-usando-custom-post-types/</link>
		<comments>http://www.gmmcal.com.br/tutoriais/criando-um-plugin-para-wordpress-usando-custom-post-types/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 11:30:24 +0000</pubDate>
		<dc:creator>Gustavo Cunha</dc:creator>
				<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.gmmcal.com.br/?p=542</guid>
		<description><![CDATA[O WordPress é uma ferramenta muito poderosa. Apesar de muita gente pensar que é um sistema para blogs, a id5 já colocou no ar de blog a e-commerce desenvolvido em WordPress. Para demonstrar uma pequena parte do poder do WordPress, &#8230; <a href="http://www.gmmcal.com.br/tutoriais/criando-um-plugin-para-wordpress-usando-custom-post-types/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>O WordPress é uma ferramenta muito poderosa. Apesar de muita gente pensar que é um sistema para blogs, a id5 já colocou no ar de blog a e-commerce desenvolvido em WordPress. Para demonstrar uma pequena parte do poder do WordPress, vou mostrar como criar um plugin básico usando apenas funções nativas do núcleo. Para continuar a ler esse arquivo, eu recomendo que você tenha os seguintes pré-requisitos:</p>
<ul>
<li>Saber programar em PHP;</li>
<li>Conhecer um pouco do funcionamento do WordPress;</li>
<li>Ler o artigo de <a title="Como escrever um plugin" href="http://codex.wordpress.org/Writing_a_Plugin" target="_blank">como escrever um plugin</a>;</li>
<li>Conhecer o funcionamento de <a title="Wordpress Action Reference" href="http://codex.wordpress.org/Plugin_API/Action_Reference" target="_blank">ações</a> e <a title="Wordpress Filters Reference" href="http://codex.wordpress.org/Plugin_API/Filter_Reference" target="_blank">filtros</a> no WordPress;</li>
</ul>
<p>Vamos ao trabalho.</p>
<h2>Cabeçalho do plugin</h2>
<p>Todo plugin deve ter um cabeçalho. Ele é padrão. Ao colocar seu plugin na pasta específica do sistema, ele lerá esse cabeçalho e exibirá as informações na lista de plugins. O nosso plugin terá o seguinte cabeçalho:</p>
<pre>/*
Plugin Name: Demonstração
Plugin URI: http://www.gmmcal.com.br
Description: Plugin de Demonstração
Author: Gustavo Cunha
Version: 1.0
Author URI: http://www.gmmcal.com.br
*/</pre>
<p>Observe que temos os seguintes campos: Nome do plugin, url do plugin (onde ele poderá ser baixado), descrição, autor, versão e url do autor. Sem esses dados, o WordPress não reconhece seu plugin, e fatalmente você não vai conseguir ativar ele.</p>
<h2>A base do plugin</h2>
<p>Nosso plugin será uma classe chamada <strong>Demonstração</strong>. Ou seja, nosso plugin começa assim:</p>
<pre>class Demonstracao {
	function Demonstracao(){
	}
	function init(){
		// algum código aqui
	}
}</pre>
<p>No método init() iremos colocar o nosso código de criação do plugin. Mas para que o método init() seja executado, precisamos dizer ao WordPress que ele existe. Para isso, vamos adicionar uma função a ação &#8216;init&#8217;. Fazemos isso assim:</p>
<pre>add_action("init", "demonstracaoInit");
function demonstracaoInit() {
	$d = new Demonstracao();
	$d-&gt;init();
}</pre>
<p>Pronto. Nosso método será executado ao instalar-mos o plugin.</p>
<h2>Registrando o Custom Post Type</h2>
<p>Como eu falei no inicio desse post, nós vamos usar apenas funções nativas do WordPress. O primeiro trunfo chama-se <a title="Custom Post Type" href="http://codex.wordpress.org/Post_Types" target="_blank">Custom Post Type</a>. Com ele, pode-se criar toda uma estrutura de CRUD com apenas uma linha. Mais simples que isso, acho que é impossível. Para registrar um novo custom post type, usamos a função <a title="register_post_type" href="http://codex.wordpress.org/Function_Reference/register_post_type" target="_blank">register_post_type</a>. A chamada dessa função será colocada dentro do método init() da nossa classe.</p>
<pre>$labels = array(
	'name' =&gt; 'Demonstração',
	'singular_name' =&gt; 'Demonstração',
	'add_new' =&gt; 'Adicionar novo',
	'add_new_item' =&gt; 'Adicionar nova demonstração',
	'edit_item' =&gt; 'Editar Demonstração',
	'new_item' =&gt; 'Nova Demonstração',
	'all_items' =&gt; 'Todas as Demonstrações',
	'view_item' =&gt; 'Ver Demonstração',
	'search_items' =&gt; 'Pesquisar Demonstração',
	'not_found' =&gt;  'Nenhuma demonstração encontrada',
	'not_found_in_trash' =&gt; 'Nenhuma demonstração encontrada no lixo',
	'parent_item_colon' =&gt; 'Demonstração pai',
	'menu_name' =&gt; 'Demonstração'
);
$args = array(
	'labels' =&gt; $labels,
	'description' =&gt; '',
	'public' =&gt; true,
	'publicly_queryable' =&gt; true,
	'exclude_from_search' =&gt; false,
	'show_ui' =&gt; true,
	'show_in_menu' =&gt; true,
	'menu_position' =&gt; 25,
	'menu_icon' =&gt; NULL,
	'hierarchical' =&gt; false,
	'supports' =&gt; array(
		'title',
		'editor',
		'thumbnail',
		'excerpt',
	),
	'has_archive' =&gt; true,
	'rewrite' =&gt; array(
		'slug' =&gt; 'demonstracao',
		'with_front' =&gt; false,
		'feeds' =&gt; true,
		'pages' =&gt; true,
	),
	'query_var' =&gt; 'demonstracao',
	'can_export' =&gt; true,
	'show_in_nav_menus' =&gt; false,
	'capability_type' =&gt; 'post',
);
register_post_type('demonstracao',$args);</pre>
<p>Não vou detalhar o funcionamento dessa função, pois a mesma já é muito bem detalhada na documentação (ver link). Após essa linha, já temos a listagem, edição, deleção ou quaisquer recursos que o post do WordPress possa nos dar. Mas um post puro não é algo muito comum. Normalmente os posts são categorizados,  a fim de agrupar conteúdos semelhantes. Vamos fazer isso então.</p>
<h2>Registrando Custom Taxonomies</h2>
<p>Para o WordPress, a categorização de posts é chamada de taxonomia. Para criar uma <a title="Custom Taxonomy" href="http://codex.wordpress.org/Taxonomies" target="_blank">Custom Taxonomy</a> é tão fácil quanto registrar um custom post. Basta usar a função <a title="register_taxonomy" href="http://codex.wordpress.org/Function_Reference/register_taxonomy" target="_blank">register_taxonomy</a>. Ela também irá no método init().</p>
<pre>register_taxonomy(
	"categorias",
	array("demonstracao"),
	array(
		"public" =&gt; true,
		"show_in_nav_menus" =&gt; true,
		"show_ui" =&gt; true,
		"show_tagcloud" =&gt; false,
		"hierarchical" =&gt; true,
		"label" =&gt; "Categorias",
		"singular_label" =&gt; "Categoria",
		"query_var" =&gt; "categorias",
		"rewrite" =&gt; array(
			"slug" =&gt; "categorias",
			"with_front" =&gt; true,
			"hierarchical" =&gt; true
		)
	)
);</pre>
<p>Pronto. Observe que ela foi anexada ao custom post &#8220;demonstracao&#8221;. Para maiores detalhes, olha a descrição da função na documentação do WordPress.</p>
<p>Pronto. Nosso plugin está pronto. Basta você ativar ele na administração do seu site e ser feliz! <a title="Criando um plugin para WordPress usando Custom Post Types – parte 2" href="http://www.gmmcal.com.br/tutoriais/criando-um-plugin-para-wordpress-usando-custom-post-types-parte-2/">No próximo post</a>, vou mostrar como colocar colunas extras na listagem do nosso custom post e como inserir campos extras no post (como uma data, ou preço de um produto, etc).</p>
<h2>Galeria de fotos</h2>

<a href='http://www.gmmcal.com.br/wp-content/uploads/2011/09/demo-ativar-plugin.png' rel='shadowbox[sbalbum-542];player=img;' title='Ativar plugin' title="Ativar plugin"><img width="150" height="150" src="http://www.gmmcal.com.br/wp-content/uploads/2011/09/demo-ativar-plugin-150x150.png" class="attachment-thumbnail" alt="Ativar plugin" title="Ativar plugin" /></a>
<a href='http://www.gmmcal.com.br/wp-content/uploads/2011/09/demo-lista-posts.png' rel='shadowbox[sbalbum-542];player=img;' title='Lista de posts' title="Lista de posts"><img width="150" height="150" src="http://www.gmmcal.com.br/wp-content/uploads/2011/09/demo-lista-posts-150x150.png" class="attachment-thumbnail" alt="Lista de posts" title="Lista de posts" /></a>
<a href='http://www.gmmcal.com.br/wp-content/uploads/2011/09/demo-categorias-plugins.png' rel='shadowbox[sbalbum-542];player=img;' title='Categorização de posts' title="Categorização de posts"><img width="150" height="150" src="http://www.gmmcal.com.br/wp-content/uploads/2011/09/demo-categorias-plugins-150x150.png" class="attachment-thumbnail" alt="Categorização de posts" title="Categorização de posts" /></a>
<a href='http://www.gmmcal.com.br/wp-content/uploads/2011/09/demo-nova-demonstracao.png' rel='shadowbox[sbalbum-542];player=img;' title='Inserindo post' title="Inserindo post"><img width="150" height="150" src="http://www.gmmcal.com.br/wp-content/uploads/2011/09/demo-nova-demonstracao-150x150.png" class="attachment-thumbnail" alt="Inserindo post" title="Inserindo post" /></a>
<a href='http://www.gmmcal.com.br/wp-content/uploads/2011/09/demo-post-inserido.png' rel='shadowbox[sbalbum-542];player=img;' title='Post Inserido' title="Post Inserido"><img width="150" height="150" src="http://www.gmmcal.com.br/wp-content/uploads/2011/09/demo-post-inserido-150x150.png" class="attachment-thumbnail" alt="Post Inserido" title="Post Inserido" /></a>

]]></content:encoded>
			<wfw:commentRss>http://www.gmmcal.com.br/tutoriais/criando-um-plugin-para-wordpress-usando-custom-post-types/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>2° Prêmio Alagoano de Blogs</title>
		<link>http://www.gmmcal.com.br/blog/2%c2%b0-premio-alagoano-de-blogs/</link>
		<comments>http://www.gmmcal.com.br/blog/2%c2%b0-premio-alagoano-de-blogs/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 16:19:11 +0000</pubDate>
		<dc:creator>Gustavo Cunha</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Concurso]]></category>
		<category><![CDATA[Gustavo Cunha]]></category>
		<category><![CDATA[Prêmio Alagoano de Blogs]]></category>

		<guid isPermaLink="false">http://www.gmmcal.com.br/?p=536</guid>
		<description><![CDATA[Galera, estou participando do 2° Prêmio Alagoano de Blogs. Se você gosta do que eu escrevo, se cadastra lá e vota em mim. Se você não gosta, se cadastra lá e vota nos concorrentes. O mais importante é participar e &#8230; <a href="http://www.gmmcal.com.br/blog/2%c2%b0-premio-alagoano-de-blogs/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Galera, estou participando do 2° Prêmio Alagoano de Blogs. Se você gosta do que eu escrevo, se cadastra lá e <a title="Gustavo Cunha" href="http://www.premioalagoanodeblogs.com.br/concorrente/gustavo-cunha/" target="_blank">vota em mim</a>. Se você não gosta, se cadastra lá e vota nos concorrentes. O mais importante é participar e promover a cultura de blogs e os nossos conterrâneos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmmcal.com.br/blog/2%c2%b0-premio-alagoano-de-blogs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

