Blog do MX Cursos

Entendendo e utilizando filters ( Filtros ) no WordPress

Entendendo e utilizando filters ( Filtros ) no WordPress

Um dos grandes atrativos em adotar o WordPress é possibilidade de customizar  informações ou execução de ações sem precisar mexer no código que você definiu, oferecendo uma liberdade para quem for utilizá-lo, implementando assim suas opções.

Muitas vezes você precisa definir valores padrões e que possam ser personalizados como valores de atributos e textos em partes do seu tema ou plugin.

Um recurso bem interessante do WordPress são os filters, que permitem que você consiga definir valores que podem ser alterados.

Eles são semelhantes aos actions (ganchos), mas a diferença entre os dois é que as actions servem para executar ações personalizadas e os filters para alterar valores predefinidos. Se deseja aprender mais sobre as actions, você pode ler este artigo aqui do blog.

Para definir um filter, você  utilizará função apply_filters. Você definirá o nome do filtro a ser chamado, o valor padrão, e parâmetros opcionais.

apply_filters(NOME_DO_FILTRO, VALOR_PADRÃO);

E para utilizar o filter (filtro), você utilizará a função add_filter. Você definirá em qual filtro você irá executar a função, o nome da função, a prioridade de execução (opcional) e quantidade de parâmetros que terá essa função (opcional).

add_filter(NOME_DO_FILTRO, NOME_DA_FUNÇÃO);

Veremos na prática

Você está criando um tema voltado para catalogo online. Nesse catalogo, você define um link onde informa um texto ” Veja o produto”.

<a href="<?php the_permalink()?>">Veja o Produto</a>

Você quer dar opção pra quem for usar o tema como tema filho, por exemplo, para que o usuário possa alterar esse texto, – pois a pessoa pode utilizar de outra forma.  Ao invés de Veja o produto, “Veja o Catalogo” ou até mesmo outros nomes.

Nossos cursos indicados

Então, vamos criar filtro em cima de disso.

<a href="<?php the_permalink()?>"><?php echo apply_filters ('the_link_catalog' , 'Veja o Produto' )?></a>

Pronto, aplicamos o filtro, demos o nome dele de the_link_catalog, e definimos um valor padrão, que é “Veja o Produto”.

Para realizar essa alteração, basta adicionar no functions.php do tema filho, o add_filter.

function custom_filter_catalog($string){
   return 'Veja mais';
}

add_filter('the_link_catalog', 'custom_filter_catalog');

Criamos uma função onde retornamos o nome que desejamos que seja impresso e depois no add_filter informando em qual filtro queremos aplicar a função e o nome da função que será chamada.

Leia também  5 técnicas para criação de textos para blogs

Vamos agora pensar que ao invés de apenas dar opção do cliente mudar o texto do link, mas também mudar o link inteiro. Mas pra isso precisamos passar mais informações, como por exemplo saber o post que pertence aquele link.

<?php echo apply_filters('the_link_catalog', '<a href="'.get_permalink().'>Veja produto</a>', get_the_ID()); ?>

Fizemos da mesma forma, só que agora o valor padrão é o próprio link e passamos o ID do post como opção, caso deseja saber de quem aquele link pertence.

Agora, no tema filho, quero ao invés de mostrar “Veja Produto”, mostrar o nome do produto e adicionar uma classe css pra identificar e criar uma personalização a mais desse tema filho.

function custom_filter_catalog($html, $post_id){
	return '<a href="'.get_permalink($post_id).' class="btn-action btn-'.$post_id.'">get_the_title($post_id)</a>';
}

add_filter('the_link_catalog', 'custom_filter_catalog', 10, 2);

Criamos uma função e passamos dois parâmetros: um que seria para o link e outro que seria pra o id do post.  Dentro da função, como o id do post, refizemos o link passando para onde será redirecionado e no nome do post adicionamos classes como atributo para o link.

Depois usamos o add_filter passando o nome do filtro que queremos usar e depois a função que tem modificação. Passamos ainda a ordem de prioridade que será chamada a função e quantidade de parâmetros que ela tem.

Dessa forma você consegue dar mais opções para quem for utilizar seus temas e plugins.

Espero que tenham gostado.

Um abraço e até a próxima.