No primeiro artigo desta série eu mostrei de forma teórica o que são actions e filters do WordPress (e que são usados no WooCommerce e em todo o ecossistema do WP). Leia até o final, mesmo que pareça confuso xD.
Agora vamos entrar em um overview da parte técnica desses conceitos. Primeiro de tudo é importante entender o que é uma função do PHP. Essa é a maneira mais simples de encapsular um trecho de código para que ele possa ser reaproveitado. Ela é algo como similar ao código abaixo.
Dentro dos () parêntesis é possível inserir o que chamados de parâmetros. Então ficaria como exibir_mensagem( $parametro1, $parametro2 );
[elementor-template id=”13184″]
Com isso, podemos pegar informações externas e utilizá-las dentro da função. Os filtros e actions do WordPress nada mais são do que funções.
A melhor forma é ir aprendendo com o processo.
O que é um filtro
O filtro é uma função que permite que passemos a ele um nome para ser filtrado, valor padrão (sem filtros) e opcionalmente incluir parâmetros.
apply_filters( 'woocommerce_product_description_heading', 'Description' );
Esse filtro aí permite que modifiquemos o título da aba Descrição dentro do produto no WooCommerce. Veja o que cada parte representa.

O que é relevante ali é nesse caso é o nome do filtro e o valor padrão, que é o que podemos modificar. Se houvesse mais itens separados por vírgula, estes seriam parâmetros adicionais. Veja também que a função chama-se apply_filters, isto porque estamos aplicando um filtro em alguma coisa, neste caso o título.
Se quisermos mudar o texto para Detalhes do produto em vez de descrição, o código será esse:
Vamos entender o que foi feito linha por linha.

O primeiro trecho informa que queremos adicionar um filtro, para isso usamos a função add_filter. Dentro dos parêntesis preenchemos as informações a seguir (separados por vírgula):
- Nome do filtro que queremos modificar e que identificamos ele lá no código do WooCommerce
- O nome da nossa função personalizada que armazena o novo valor que queremos exibir
- O número 20 ali é a prioridade. Então se um plugin modificou o título na prioridade 10, para que sua função sobreponha a dele você terá que fazer sua função com uma prioridade maior.
- E o último é o total de parâmetros que este filtro aceita. Neste caso é apenas um: o valor padrão. É necessário contar quantos valores tem na função apply_filters após o nome do filtro.
Veja que no nosso exemplo é apenas um: o próprio nome Description.

Se houvesse mais um item ali, por exemplo a variável $product, colocaríamos o número 2.

A figura acima mostra a função que eu criei. Declaro no nome da função o mesmo que eu informei anteriormente no filtro.
Os parâmetros eu posso nomear da forma que eu quiser. E temos só um parâmetro, lembra? Que é o próprio valor padrão. Eu converti ele para uma variável que armazena o texto do Título padrão. Por isso dei esse nome. Se tivesse mais parâmetros eu colocaria eles aí também.
E por fim abro a função com a chave {.

E aqui eu simplesmente retorno a informação que eu quero usando o recurso return.
E na última linha fecho a chave }. Este é formato mais simples de modificar algo no WooCommerce.
Agora um exemplo usando um parâmetro adicional.
apply_filters( 'wc_table_shipping_cost', $cost, $matched_rate, $package );
Este exemplo é do plugin Frete Offline para WooCommerce na variável que retorna o custo do envio.
Conseguiu interpretar o que tem ali com base no que vimos antes? O nome do filtro é wc_table_shipping_cost. O valor padrão, que depende de cada linha da tabela, fica na variável $cost, e é ele que podemos modificar.
Já os outros dois atributos $matched_rate retorna os detalhes da linha específica que está sendo calculada e $package traz todas as informações deste pedido.
O código mais simples é oferecer frete grátis. Não esqueça que aí temos 3 parâmetros a disposição, ok? O que queremos modificar e mais dois que irão nos permitir criar funções mais complexas.
Eu simplesmente ignoro o valor base, ignoro o package e tudo mais e coloco que o valor é zero. Pronto! Frete grátis.
Mas e se eu quiser frete grátis apenas para SP?
Aí eu peguei a variável que armazena o estado do cliente e verifiquei se é SP. Se for, já retorna o valor zerado. Caso contrário, continua e retorna o valor padrão que tínhamos anteriormente.
Finalizando
Eu entendo que pode ficar um pouco confuso se você não entende PHP ou se está realmente só começando. Cadastre seu e-mail abaixo para acompanhar a série e receber materiais extras para entender realmente o passo a passo de como construir plugins. O objetivo aqui desta série é mostrar uma visão geral e exemplificar como é simples fazer ajustes com poucas linhas de código.
Comentários são sempre bem vindos e dúvidas também. Deixe o seu.
[elementor-template id=”13184″]