Back-End

19 fev, 2013

As funções add_query_arg() e remove_query_arg() do WordPress são grandes aliadas

Publicidade

Algumas funções, por mais simples que sejam, são de grande utilidade e se tornam uma grande aliada dos desenvolvedores. No WordPress temos inúmeras funções com esse perfil. Hoje conheceremos duas delas: a add_query_arg() e a remove_query_arg(). A primeira é utilizada para agregar a URL parâmetros, enquanto a segunda se encarrega de remover os desejados.

Num primeiro momento você pode pensar em uma solução assim para agregar ao link um parâmetro de URL:

<?php the_permalink(); ?>?nome_do_parametro=valor_do_parametro

Em seguida, eu lhe questiono: e se a opção de Links Permanentes do WordPress estiver desabilitada? O resultado seria algo assim:

http://enderecodosite.com.br?p=ID_do_Post?nome_do_parametro=valor_do_parametro

Ou seja, #fail. Prefira uma solução assim:

<?php
while( have_posts() ) : the_post();
...
echo add_query_arg( 'nome_do_parametro', 'valor_do_parametro', get_permalink() );?>

Quando o WordPress estiver com a opção de Links Permanentes desativada por padrão, teremos o seguinte retorno:

http://enderecodosite.com.br?p=ID_do_Post&nome_do_parametro=valor_do_parametro

Quando estiver habilita, o retorno será:

http://enderecodosite.com.br/slug-do-post/?nome_do_parametro=valor_do_parametro

Percebeu a diferença? Ou seja, o retorno da função add_query_arg() será de acordo com a configuração de Links Permanentes do WordPress. Ela faz essa verificação internamente e assim considera o retorno sempre correto do link com o parâmetro de URL desejado.

Podemos ir um pouco além com a função add_query_arg(), explorando melhor seus parâmetros. Vamos conhecê-los:

  • O primeiro, $param1, pode ser o nome de um parâmetro ou um array associativo, onde as chaves são os nomes dos parâmetros e os valores dos respecitvos parâmetros. É o único parâmetro requerido;
  • O $param2 é opcional. Se informado, será interpretado como o valor do parâmetro informado em $param1; ou a URL a ser considerada caso o $param1 seja informado como um array;
  • Já o terceiro parâmetro, $old_query_or_uri, é considerando quando $param1 e $param2 são respectivamente o nome e valor do parâmetro e ele recebe a URL a ser considerada. Caso não informado, será considerado a URL em questão.

Um outro exemplo clássico é quando precisamos adicionar, por exemplo, as tags UTM do Google Analytics. Veja como fica simples com essa função:

<?php
$utm_tags = array(
     'utm_source' => 'iMasters',
     'utm_medium' => 'Article',
     'utm_campaign' => 'ColunaWP'
);
while( have_posts() ) : the_post();
...
echo add_query_arg( $utm_tags, get_permalink() );
...

As possibilidades de uso dessa função são diversas e tenho certeza que a partir de agora, se você não a conhecia, passará usa-la com frequência em seus projetos.

E quanto a função remove_query_arg(), ela trabalha de forma oposta, isto é, remove parâmetros específcos da URL em questão. Por exemplo, considere a seguinte URL no navegador de internet:

http://enderecodosite.com.br/slug-do-post/?nome_do_parametro=valor_do_parametro&nome_de_outro_parametro=valor_de_outro_parametro

Se precisarmos tirar o primeiro parâmetro e deixar somente o segundo, procedemos assim:

<?php
$new_url = remove_query_arg( 'nome_do_parametro' );
echo $new_url;
?>

O retorno será:

http://enderecodosite.com.br/slug-do-post/?nome_de_outro_parametro=valor_de_outro_parametro

A função remove_query_arg(), além de aceitar uma string no primeiro parâmetro, é possível também passar um array com várias keys a serem removidas, e assim elimitar todos os parâmetros, como no exemplo a seguir:

<?php
$new_url = remove_query_arg( array( 'nome_do_parametro', 'nome_de_outro_parametro' ) );
echo $new_url;
?>

Com o exemplo acima, o retorno será somente a URL, assim:

http://enderecodosite.com.br/slug-do-post/

É isso. Espero ter apresentado uma grande aliada a vocês.

Grande abraço!