Os ganchos no WordPress permitem essencialmente que você altere ou adicione código sem editar os arquivos principais. Eles são usados ​​extensivamente em WordPress e WooCommerce e são muito úteis para desenvolvedores.

Existem dois tipos de gancho: ações (actions) e filtros (filters).

  • Os ganchos de ação permitem inserir código personalizado em vários pontos (onde quer que o gancho seja executado).
  • Os ganchos de filtro permitem que você manipule e retorne uma variável pela qual ele passa (por exemplo, o preço de um produto).

Usando ganchos

Se você usar um gancho para adicionar ou manipular código, poderá adicionar seu código personalizado de várias maneiras:

  • Para um arquivo de tema filho personalizado ou diretamente em seu arquivo functions.php .
  • Usando um plug-in, como trechos de código.

Usando ganchos de ação (action)

Para executar seu próprio código, você se conecta usando o gancho de ação do_action('nome_da_action');. Aqui é onde colocar seu código:

add_action( 'nomeda_action', 'nomeda_funcao' );

function nomeda_funcao() {
// Seu código
}

Usando ganchos de filtro (filter)

Os ganchos de filtro são chamados em todo o código usando apply_filter( 'nomedo_filter', $variavel );. Para manipular a variável passada, você pode fazer algo como o seguinte:

add_filter( 'nomedo_filter', 'nomeda_funcao' );

function nomeda_funcao( $variavel ) {
// Seu código
return $variavel;
}

Com filtros, você deve retornar um valor.

Guia Visual Hook Woocommerce

Você pode utilizar o site abaixo para identificar de forma visual o nome do gancho (Hook) que você ira utilizar.

Exemplos

Neste exemplo, o código é definido para exibir o valor parcelado em 3x sem juros para todos os produtos.

// Exibe na página de produto unico - hook "woocommerce_single_product_summary"
function action_woo_add1_3x_parcela(  ) {
	global $post, $product;
	$valor = $product->get_price() / 3;
    $valor_parcelado = number_format($valor,2,",",".");
    if (!empty($valor_parcelado)) {
        echo '<p class="price-3x"><strong>3x</strong> de <strong>R$ '.$valor_parcelado.'</strong> sem juros</p>';
    }
};        
add_action( 'woocommerce_single_product_summary', 'action_woo_add1_3x_parcela', 10, 0 );

// Exibe no loop de produtos - hook "woocommerce_shop_loop_item_title"
function action_woo_add2_3x_parcela(  ) {
	global $post, $product;
	$valor = $product->get_price() / 3;
    $valor_parcelado = number_format($valor,2,",",".");
    if (!empty($valor_parcelado)) {
        echo '<p class="price-3x"><strong>3x</strong> de <strong>R$ '.$valor_parcelado.'</strong> sem juros</p>';
    }
};        
add_action( 'woocommerce_shop_loop_item_title', 'action_woo_add2_3x_parcela', 10, 0 );

Neste exemplo, o código é definido para redirecionar o botão “Voltar para a Loja” encontrado no carrinho para uma categoria que lista os produtos à venda em http: //exemplo.url/categoria/especial/.

/**
 * Altera o URL de redirecionamento para o botão Voltar para a Loja no carrinho.
 */
function carrinhovazio_redirect_url() {
  return 'http: //exemplo.url/categoria/especial/';
}
add_filter( 'woocommerce_return_to_shop_redirect', 'carrinhovazio_redirect_url', 10 );

Lá, podemos ver que a prioridade está definida como 10. Este é o padrão típico para funções e scripts WooCommerce, portanto, pode não ser suficiente para substituir a funcionalidade desse botão.

Em vez disso, podemos alterar a prioridade para qualquer número maior que 10. Embora 11 funcione, a prática recomendada dita que usemos incrementos de dez, portanto, 20, 30 e assim por diante.


Neste exemplo vamos tornar o número de telefone não obrigatório.

add_filter( 'woocommerce_billing_fields', 'wc_npr_filter_phone', 10, 1 );
function wc_npr_filter_phone( $address_fields ) {
	$address_fields['billing_phone']['required'] = false;
	return $address_fields;
}

Neste outro exemplo vamos adicionar campos personalizados a e-mails. Para adicionar um valor de campo personalizado a e-mails WooCommerce – um e-mail de pedido concluído, por exemplo – use o seguinte snippet:

/* To use: 
1. Adicione este snippet ao arquivo functions.php do seu tema
2. Altere os nomes das meta-chaves no snippet
3. Crie um campo personalizado na postagem do pedido - por exemplo, chave = "Código de acompanhamento" valor = abcdefg
4. Na próxima atualização de status, ou durante qualquer outro evento que envie um e-mail ao usuário, ele verá este campo em seu e-mail
*/
add_filter('woocommerce_email_order_meta_keys', 'my_custom_order_meta_keys');

function my_custom_order_meta_keys( $keys ) {
     $keys[] = 'Tracking Code'; // Isso procurará um campo personalizado chamado 'Código de acompanhamento' e o adicionará aos e-mails
     return  $ keys ;
}

Documentação API

Para obter uma visão abrangente da API WooCommerce, consulte a documentação da API .

Filtros e ganchos de ação WooCommerce disponíveis

Para obter detalhes sobre o que os ganchos de ação e filtros fazem, consulte a Referência de ganchos WooCommerce .