<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Willian Rodrigues</title>
    <description>The latest articles on Forem by Willian Rodrigues (@williangringo).</description>
    <link>https://forem.com/williangringo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1123094%2F2dd26494-c929-44af-af0f-828da9d590a3.jpg</url>
      <title>Forem: Willian Rodrigues</title>
      <link>https://forem.com/williangringo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/williangringo"/>
    <language>en</language>
    <item>
      <title>Configurando um Ambiente de Desenvolvimento WordPress com DDEV (Docker) — rápido, padronizado e sem dor de cabeça</title>
      <dc:creator>Willian Rodrigues</dc:creator>
      <pubDate>Fri, 26 Dec 2025 22:21:59 +0000</pubDate>
      <link>https://forem.com/williangringo/configurando-um-ambiente-de-desenvolvimento-wordpress-com-ddev-docker-rapido-padronizado-e-sem-1i6i</link>
      <guid>https://forem.com/williangringo/configurando-um-ambiente-de-desenvolvimento-wordpress-com-ddev-docker-rapido-padronizado-e-sem-1i6i</guid>
      <description>&lt;p&gt;O &lt;a href="https://ddev.com/" rel="noopener noreferrer"&gt;DDEV&lt;/a&gt; &lt;strong&gt;é uma ferramenta que facilita muito a criação de ambientes locais&lt;/strong&gt; para aplicações web — e isso inclui WordPress. A proposta é simples: você sobe um WordPress local com Docker em poucos comandos, com um setup replicável pro time inteiro (&lt;em&gt;sem aquela de que “na minha máquina funciona”&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Neste guia, vou mostrar como instalar e configurar um ambiente WordPress com DDEV, e também como resolver um problema clássico que pode aparecer na primeira vez: erro 403 Forbidden no Nginx.&lt;/p&gt;




&lt;h3&gt;
  
  
  Por que usar DDEV para WordPress?
&lt;/h3&gt;

&lt;p&gt;Se você trabalha com WordPress profissionalmente (agência, freelas, produto, etc.), DDEV é o tipo de coisa que vira padrão porque:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;padroniza o ambiente entre devs (menos variação, menos bug “fantasma”)&lt;/li&gt;
&lt;li&gt;acelera onboarding do time&lt;/li&gt;
&lt;li&gt;evita XAMPP e setups manuais cheios de gambiarra&lt;/li&gt;
&lt;li&gt;melhora a produtividade com rotinas automáticas (hooks, pull de banco, etc.)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Requisitos para rodar WordPress com DDEV
&lt;/h3&gt;

&lt;p&gt;Antes de começar, você precisa ter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.docker.com/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ddev.com/" rel="noopener noreferrer"&gt;DDEV&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Depois disso, bora pro setup.&lt;/p&gt;




&lt;h3&gt;
  
  
  Criando o projeto WordPress com DDEV
&lt;/h3&gt;

&lt;p&gt;Crie uma pasta pro projeto e :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir wp-test-site
cd wp-test-site
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure o DDEV:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ddev config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui você escolhe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;nome do projeto&lt;/li&gt;
&lt;li&gt;tipo do projeto: selecione WordPress&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agora inicie o ambiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ddev start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O terminal vai mostrar os endereços do seu site local, algo como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://wp-test.ddev.site" rel="noopener noreferrer"&gt;https://wp-test.ddev.site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://127.0.0.1:PORTA" rel="noopener noreferrer"&gt;https://127.0.0.1:PORTA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Acesse no navegador e finalize a instalação do WordPress.&lt;/p&gt;

&lt;p&gt;Simples assim. &lt;strong&gt;Ou deveria ser.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;Eu travei feio nisso na primeira vez. Mas o motivo é bem direto: não existiam arquivos do core do WordPress na raiz do projeto.&lt;/p&gt;

&lt;p&gt;Ou seja: DDEV subiu o servidor, mas o WordPress (wp-admin, wp-load.php, etc.) não estava lá.&lt;/p&gt;

&lt;p&gt;Solução “raiz”: baixar o WordPress na raiz do projeto no link &lt;a href="https://wordpress.org/latest.tar.gz" rel="noopener noreferrer"&gt;https://wordpress.org/latest.tar.gz&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Você pode baixar e colocar os arquivos manualmente, mas isso é chato e nada escalável — principalmente pra um time.&lt;/p&gt;

&lt;p&gt;Ou rodar o comando no SSH:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ddev ssh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wp core install --url=YOUR_DOMAIN --title=YOUR_BLOG_TITLE --admin_user=YOUR_USER --admin_password=YOUR_PASSWORD --admin_email=YOUR_EMAIL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Então a ideia é automatizar.&lt;/p&gt;




&lt;h3&gt;
  
  
  Automação: baixar o WordPress automaticamente ao rodar ddev start
&lt;/h3&gt;

&lt;p&gt;Edite o arquivo: &lt;code&gt;./.ddev/config.yaml&lt;/code&gt; (ou config.yml, dependendo do seu projeto)&lt;/p&gt;

&lt;p&gt;E adicione este hook:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hooks:
  post-start:
    - exec: "curl -O https://wordpress.org/latest.tar.gz"
    - exec: "tar -xzf latest.tar.gz --strip-components=1"
    - exec: "rm latest.tar.gz"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  O que isso faz?
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;post-start: executa depois do DDEV iniciar&lt;/li&gt;
&lt;li&gt;baixa o WordPress&lt;/li&gt;
&lt;li&gt;extrai na pasta atual&lt;/li&gt;
&lt;li&gt;remove o arquivo baixado (limpeza)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Resultado:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Primeira vez: baixa e extrai&lt;/li&gt;
&lt;li&gt;Próximas vezes: ignora e segue a vida&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Iniciando o projeto (do jeito certo)
&lt;/h3&gt;

&lt;p&gt;Rode sempre a partir da raiz do projeto (onde está o .ddev): &lt;code&gt;ddev start&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Na primeira execução pode demorar um pouco (download do core). Depois, fica ligeiro.&lt;/p&gt;

&lt;p&gt;E dá pra ir além:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;configurar scripts para puxar banco/arquivos de um staging&lt;/li&gt;
&lt;li&gt;variáveis de ambiente pra configurações por projeto&lt;/li&gt;
&lt;li&gt;scripts de provisionamento (plugins, tema, seeds, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mas isso já é papo pra outro post.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Se você desenvolve WordPress e ainda perde tempo configurando ambiente, DDEV é um upgrade obrigatório. Você sobe o projeto em minutos, padroniza pro time e ainda automatiza coisas chatas como baixar o core do WordPress.&lt;/p&gt;

&lt;p&gt;Começa com o básico e depois turbina.&lt;/p&gt;

&lt;p&gt;Happy coding. 🚀&lt;/p&gt;

&lt;p&gt;Referências:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/sarahcssiqueira/setting-up-a-wordpress-development-environment-with-ddev-2bia"&gt;by sarahcssiqueira&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>wordpress</category>
      <category>development</category>
      <category>docker</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Magento 1 — Como criar um atributo personalizado na página do produto?</title>
      <dc:creator>Willian Rodrigues</dc:creator>
      <pubDate>Tue, 25 Jul 2023 05:29:29 +0000</pubDate>
      <link>https://forem.com/williangringo/magento-1-como-criar-um-atributo-personalizado-na-pagina-do-produto-3bk8</link>
      <guid>https://forem.com/williangringo/magento-1-como-criar-um-atributo-personalizado-na-pagina-do-produto-3bk8</guid>
      <description>&lt;p&gt;O &lt;strong&gt;Magento&lt;/strong&gt; oferece a opção de criar atributos personalizados nos produtos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mas o que é isto?&lt;/strong&gt;&lt;br&gt;
É alguma informação extra que você precisa por no seu produto e que não vem, por padrão, no Magento.&lt;br&gt;
Por exemplo, um produto elétrico no qual você precisa exibir as informações de voltagem, amperagem, watts, etc…&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Quando que vou usar?&lt;/strong&gt;&lt;br&gt;
Além de usar para definir as características isoladas de um produto não padrão, você pode criar atributos para usar em selos (frete grátis, extras).&lt;/p&gt;

&lt;p&gt;Também para definir a quantidade de parcelas em que o produto pode ser pago.&lt;/p&gt;

&lt;p&gt;Se utilizar a criatividade você encontrar uma série de outras vantagem desse recurso.&lt;/p&gt;




&lt;h3&gt;
  
  
  Como fazer um atributo personalizado no produto?
&lt;/h3&gt;

&lt;p&gt;Pelo admin acessar o menu:&lt;br&gt;
&lt;em&gt;Catálogo &amp;gt; Atributos &amp;gt; Gerenciar Atributos&lt;br&gt;
Catalog &amp;gt; Attributes &amp;gt; Manage Attributes&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Depois associar seu atributo criado no grupo de atributos&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Catálogo &amp;gt; Atributos &amp;gt; Gerenciar Grupo de Atributos&lt;br&gt;
Catalog &amp;gt; Attributes &amp;gt; Manage Attribute Sets&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Quais são os tipos de atributo que posso criar?&lt;/p&gt;

&lt;p&gt;Campo de text | &lt;em&gt;Text Field&lt;/em&gt;&lt;br&gt;
Área de texto | &lt;em&gt;Text Area&lt;/em&gt;&lt;br&gt;
Data | &lt;em&gt;Date&lt;/em&gt;&lt;br&gt;
Sim/Não | &lt;em&gt;Yes/No&lt;/em&gt;&lt;br&gt;
Múltiplas Seleções | &lt;em&gt;Multiple Select&lt;/em&gt;&lt;br&gt;
Selecionar (select) | &lt;em&gt;Dropdown&lt;/em&gt;&lt;br&gt;
Preço | &lt;em&gt;Price&lt;/em&gt;&lt;br&gt;
Imagem | &lt;em&gt;Media Image&lt;/em&gt;&lt;br&gt;
Taxa Adicional | &lt;em&gt;Fixed Product Tax&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Materiais para estudar (em inglês):&lt;br&gt;
&lt;a href="http://www.magentocommerce.com/knowledge-base/entry/how-do-attributes-work-in-magento" rel="noopener noreferrer"&gt;How do Attributes work in Magento?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.magentocommerce.com/knowledge-base/entry/tutorial-creating-attributes-custom-fields" rel="noopener noreferrer"&gt;Magento — Knowledge Base — Tutorial: Creating Attributes (custom fields)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.magentocommerce.com/wiki/modules_reference/english/mage_adminhtml/catalog_product_attribute/index" rel="noopener noreferrer"&gt;Magento — Wiki — ADMIN: Catalog → Attributes → Manage Attributes&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Chega de historinha!!!&lt;/p&gt;

&lt;h3&gt;
  
  
  Quero saber como faço para exibir estes dados no lugar que eu desejar!!!
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Lembre-se que a variável que recebe a instância do produto pode ter nome diferente dependendo do módulo que você está.&lt;/em&gt;&lt;/p&gt;




&lt;h4&gt;
  
  
  Você gostou deste texto?
&lt;/h4&gt;

&lt;p&gt;Compartilhe ele para que mais pessoas possam ler!&lt;br&gt;
E me siga para ler mais conteúdo como este. ☻&lt;/p&gt;

</description>
      <category>magento</category>
      <category>magento1</category>
      <category>tutorial</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Magento 1 - Atributos personalizados nos Top Links utilizando XML</title>
      <dc:creator>Willian Rodrigues</dc:creator>
      <pubDate>Tue, 25 Jul 2023 05:02:45 +0000</pubDate>
      <link>https://forem.com/williangringo/magento-1-atributos-personalizados-nos-top-links-utilizando-xml-3fna</link>
      <guid>https://forem.com/williangringo/magento-1-atributos-personalizados-nos-top-links-utilizando-xml-3fna</guid>
      <description>&lt;p&gt;E ai, Devs!&lt;br&gt;
A dica que darei a vocês é como colocar atributos personalizados para um link que pertence ao bloco Top Links.&lt;/p&gt;
&lt;h2&gt;
  
  
  Índice
&lt;/h2&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    * [Por que isto parece uma tarefa difícil?](#chapter-1)
    * [liparams](#liparams)
    * [aparams](#aparams)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Por que isto parece uma tarefa difícil?
&lt;/h2&gt;

&lt;p&gt;Porque os links são inseridos através do layout.xml, então o HTML é renderizado pela aplicação do Magento, parecendo ficar difícil inserir outros atributos das tags &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; e &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;, como por exemplo: class ou id.&lt;/p&gt;

&lt;p&gt;Digamos que você tem um menu de acesso rápido com os seguintes links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Entrar&lt;/li&gt;
&lt;li&gt;Cadastre-se&lt;/li&gt;
&lt;li&gt;Minha Conta&lt;/li&gt;
&lt;li&gt;Meu Carrinho&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E no design da loja que você está montando o link "&lt;em&gt;Cadastre-se&lt;/em&gt;" tem um estilo completamente diferente dos outros links.&lt;br&gt;
Iria ser fácil aplicar um estilo se este link fosse o primeiro ou o último da lista, pois além dos pseudo-seletores do CSS (:first-child e :last-child) o Magento põe, por padrão, uma classe first e last nesse tipo de lista.&lt;br&gt;
Mas o layout foi desenhado com o link lá no meio e o cliente quer que seja assim.&lt;/p&gt;

&lt;p&gt;Então vamos lá:&lt;br&gt;
No customer.xml você tem a seguinte instrução:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;customer_logged_out&amp;gt;
    &amp;lt;reference name="top.links"&amp;gt;
        &amp;lt;action method="addLink" translate="label title" module="customer"&amp;gt;
            &amp;lt;label&amp;gt;Log In&amp;lt;/label&amp;gt;
            &amp;lt;url helper="customer/getLoginUrl"/&amp;gt;
            &amp;lt;title&amp;gt;Log In&amp;lt;/title&amp;gt;
            &amp;lt;prepare/&amp;gt;
            &amp;lt;urlParams/&amp;gt;
            &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;
        &amp;lt;/action&amp;gt;

        &amp;lt;action method="addLink" module="customer"&amp;gt;
            &amp;lt;label&amp;gt;Cadastre-se&amp;lt;/label&amp;gt;
            &amp;lt;url helper="customer/getRegisterUrl"/&amp;gt;
            &amp;lt;title&amp;gt;Cadastre-se&amp;lt;/title&amp;gt;
            &amp;lt;prepare/&amp;gt;
            &amp;lt;urlParams/&amp;gt;
            &amp;lt;position&amp;gt;2&amp;lt;/position&amp;gt;
        &amp;lt;/action&amp;gt;
    &amp;lt;/reference&amp;gt;
&amp;lt;/customer_logged_out&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  liparams &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Com a tag &lt;code&gt;&amp;lt;liparams&amp;gt;&lt;/code&gt; você pode por o atributo que precisar na sua tag. Como no exemplo, colocando uma class:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;action method="addLink" module="customer"&amp;gt;
    &amp;lt;label&amp;gt;Cadastre-se&amp;lt;/label&amp;gt;
    &amp;lt;url helper="customer/getRegisterUrl"/&amp;gt;
    &amp;lt;title&amp;gt;Cadastre-se&amp;lt;/title&amp;gt;
    &amp;lt;prepare/&amp;gt;
    &amp;lt;urlParams/&amp;gt;
    &amp;lt;position&amp;gt;2&amp;lt;/position&amp;gt;
    &amp;lt;liParams&amp;gt;class="cadastro"&amp;lt;/liParams&amp;gt;
&amp;lt;/action&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  aparams &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Para colocar um atributo na tag &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; que está dentro da &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; você pode usar a tag xml: &lt;code&gt;&amp;lt;aparams&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;action method="addLink" module="customer"&amp;gt;
    &amp;lt;label&amp;gt;Cadastre-se&amp;lt;/label&amp;gt;
    &amp;lt;url helper="customer/getRegisterUrl"/&amp;gt;
    &amp;lt;title&amp;gt;Cadastre-se&amp;lt;/title&amp;gt;
    &amp;lt;prepare/&amp;gt;
    &amp;lt;urlParams/&amp;gt;
    &amp;lt;position&amp;gt;2&amp;lt;/position&amp;gt;
    &amp;lt;liParams&amp;gt;class="cadastro"&amp;lt;/liParams&amp;gt;
    &amp;lt;aParams&amp;gt;rel="subsection"&amp;lt;/aParams&amp;gt;
&amp;lt;/action&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Basicamente é isto, qualquer dúvida deixe um comentário!&lt;/p&gt;




&lt;h4&gt;
  
  
  Você gostou deste texto?
&lt;/h4&gt;

&lt;p&gt;Compartilhe ele para que mais pessoas possam ler!&lt;br&gt;
E me siga para ler mais conteúdo como este. ☻&lt;/p&gt;

</description>
      <category>magento</category>
      <category>magento1</category>
      <category>tutorial</category>
      <category>frontend</category>
    </item>
  </channel>
</rss>
