Com o Wocommerce Hooks é possível alterar e adicionar um código sem a necessidade de editar os arquivos principais da sua loja virtual. Embora os hooks possam ser utilizados normalmente no WordPress, seu grande uso está ligado diretamente ao super plugin Woocommerce, que é voltado para o gerenciamento de lojas virtuais.
Também conhecidos como ganchos, os hooks estão divididos entre (1) hooks de ação, que permitem inserir um código personalizado em vários pontos e (2) hooks de filtro que permitem manipular uma determinada variável, como preço de um produto, por exemplo.

Seções desta página
Usando hooks de ação e filtro
Neste artigo vamos mostrar os principais hooks que você pode usar em sua loja virtual baseada na extensão Woocommerce. Mas antes você precisa entender como se deve usar estes ganchos.
Por exemplo, caso sua necessidade seja usar hooks para manipular ou adicionar um código personalizado ao seu template ou layout WordPress, basta abrir o arquivo functions.php
do seu Child Theme (tema filho) e usar o seguinte código:
add_action( 'action_name', 'nome_da_sua_funcao' );
function nome_da_sua_funcao() {
// Insira seu código aqui...
}
Code language: JavaScript (javascript)
Contudo, se a sua necessidade é usar hooks de filtro, é só usar o código abaixo dentro do arquivo functions.php
:
add_filter( 'filter_name', 'nome_da_sua_funcao' );
function nome_da_sua_funcao( $variable ) {
// Insira seu código aqui...
return $variable;
}
Code language: PHP (php)
Lista dos melhores hooks para Woocommerce
Como remover o “On Sale button”
add_filter('woocommerce_sale_flash', 'woo_custom_hide_sales_flash');
function woo_custom_hide_sales_flash() {
return false;
}
Code language: JavaScript (javascript)
Como mudar o status de “Processando” para “Concluído” automaticamente
Se a sua loja virtual possui apenas com produtos virtuais, que são entregues imediatamente após a confirmação de pagamento, o status de “Processando” tende a ser obsoleto.
Nesse caso, com o hack abaixo é possível mudar automaticamente o status de “Processando” para “Concluído” tão logo a confirmação de pagamento seja confirmada.
add_action('woocommerce_order_status_changed', 'ts_auto_complete_virtual');
function ts_auto_complete_virtual($order_id) {
if ( ! $order_id ) { return; }
global $product;
$order = wc_get_order( $order_id );
if ($order->data['status'] == 'processing') {
$virtual_order = null;
if ( count( $order->get_items() ) > 0 ) {
foreach( $order->get_items() as $item ) {
if ( 'line_item' == $item['type'] ) {
$_product = $order->get_product_from_item( $item );
if ( ! $_product->is_virtual() ) {
// PAUSA O LOOP QUANDO ENCONTRAR UM PRODUTO QUE NÃO SEJA VIRTUAL
$virtual_order = false;
break;
} else {
$virtual_order = true;
}}}}
// MARQUE COMO CONCLUÍDO SE TODOS FOREM PRODUTOS VIRTUAIS
if ( $virtual_order ) {
$order->update_status( 'completed' );
}}}
Code language: PHP (php)
Como remover as notas de serviços
add_filter( 'woocommerce_checkout_fields' , 'remove_order_notes' );
function remove_order_notes( $fields ) {
unset($fields['order']['order_comments']);
return $fields;
}
remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 );
Code language: PHP (php)
Como corrigir SKU e REF
add_filter( 'wc_product_has_unique_sku', 'temp_fix_wcml_sku_issue', 10, 3 );
function temp_fix_wcml_sku_issue( $sku_found, $product_id, $sku ) {
return false;
}
Code language: PHP (php)
Como remover variação de preço
add_action( 'woocommerce_before_single_product', 'cjnet_remove_variation_price' );
function cjnet_remove_variation_price() {
global $product;
if ( $product->is_type( 'variable' ) ) {
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price' );
}
}
Code language: PHP (php)
Como esconder o preço de um produto
add_filter( 'woocommerce_get_price_html', 'hide_price', 99, 2 );
function hide_price( $price, $product ) {
if ( 'url_do_produto' === $product->get_slug() ) { $price = ''; }
return $price;
}
Code language: PHP (php)
Desabilitar as configurações do Woocommerce para o gerente de loja
function cjnet_woo_remove_items() {
$remove = array( 'wc-settings', 'wc-status', 'wc-addons', );
foreach ( $remove as $submenu_slug ) {
if ( ! current_user_can( 'update_core' ) ) {
remove_submenu_page( 'woocommerce', $submenu_slug );
}
}
}
add_action( 'admin_menu', 'cjnet_woo_remove_items', 99, 0 );
Code language: PHP (php)
Como desabilitar o efeito “lightbox” e “zoom” da galeria de fotos
function cjnet_product_gallery_zoom() {
remove_theme_support( 'wc-product-gallery-zoom' );
}
add_action( 'after_setup_theme', 'cjnet_product_gallery_zoom', 100 );
Code language: JavaScript (javascript)
Como esconder os breadcrumbs nas páginas de produto
add_filter( 'woocommerce_get_breadcrumb', '__return_false' );
Code language: JavaScript (javascript)
Como desabilitar a barra de busca por produtos no Woocommerce
add_action( 'init', 'remove_storefront_header_search' );
function remove_storefront_header_search() {
remove_action( 'storefront_header', 'storefront_product_search', 40 );
}
Code language: JavaScript (javascript)
Como remover ordem de exibição do catálogo de produtos
function cjnet_remove_catalog_ordering(){
remove_action('woocommerce_after_shop_loop', 'woocommerce_catalog_ordering', 10);
remove_action('woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 10);
remove_action('woocommerce_after_shop_loop', 'woocommerce_result_count', 20 );
remove_action('woocommerce_before_shop_loop', 'woocommerce_result_count', 20 );
}
add_action('after_setup_theme', 'cjnet_remove_catalog_ordering', 1);
Code language: JavaScript (javascript)
Remover “Built with Storefront Woocommerce”
if (!function_exists('storefront_credit')) {
function storefront_credit() {?>
<div class="site-info">
<?php echo esc_html('© ' . get_bloginfo('name') . ' ' . date('Y')); ?>
</div>
<?php
}
}
Code language: JavaScript (javascript)
Adicionar descrição na página inicial da loja
function cjnet_shop_description() {
$description = '<p>Digite sua descrição aqui!</p>';
echo $description;
}
add_action('woocommerce_archive_description', 'cjnet_shop_description');
Code language: PHP (php)
Como adicionar texto específico para determinada categoria e/ou taxonomia
add_action( 'woocommerce_before_single_product', 'cjnet_product_notice_function' );
function cjnet_product_notice_function() {
if ( is_product() && has_term( ‘discount-30’,'product_tag' ) ) {
echo '<p><strong>Este produto está com 30% OFF!</strong></p>';
}
}
Code language: PHP (php)
Como remover título da loja na página inicial
function cjnet_hide_shop_page_title($title) {
if (is_shop()) $title = false;
return $title;
}
add_filter('woocommerce_show_page_title', 'cjnet_hide_shop_page_title');
Code language: PHP (php)
Como remover título da categoria
function cjnet_hide_cat_page_title($title) {
if (is_product_category()) $title = false;
return $title;
}
add_filter('woocommerce_show_page_title', 'cjnet_hide_cat_page_title');
Code language: PHP (php)
Como remover todas as abas na página de produto
add_filter( 'woocommerce_product_tabs', '__return_empty_array', 9999 );
Code language: JavaScript (javascript)
Como remover as abas na página de produto de forma individual
function cjnet_remove_all_product_tabs( $tabs ) {
unset( $tabs['description'] ); // Remove aba de descrição
unset( $tabs['reviews'] ); // Remove aba de avaliações
unset( $tabs['additional_information'] ); // Remove aba de informações adicionais
return $tabs;
}
add_filter( 'woocommerce_product_tabs', 'cjnet_remove_all_product_tabs', 98 );
Code language: PHP (php)
Como remover descrição longa na página de edição do produto
function cjnet_remove_pages_editor(){
remove_post_type_support( 'product', 'editor' );
}
add_action( 'init', 'cjnet_remove_pages_editor' );
Code language: JavaScript (javascript)
Desativar Cart Fragments Ajax (fragmentos do carrinho em AJAX)
Em alguns casos torna-se necessário desativar completamente os fragmentos do carrinho AJAX, principalmente porque, ao fazer solicitações contínuas ao arquivo admin-ajax.php
, sua loja tende a ficar sobrecarregada, aumentando significativamente o tempo de carregamento.
/*### Desativa chamada Ajax do WooCommerce ###*/
add_action( 'wp_enqueue_scripts’, 'cjnet_dequeue_woocommerce_cart_fragments’, 11);
/*### Desativa chamada Ajax do WooCommerce em todo o site ### */
add_action( 'wp_enqueue_scripts', 'cjnet_dequeue_woocommerce_cart_fragments', 11);
function cjnet_dequeue_woocommerce_cart_fragments() { wp_dequeue_script( 'wc-cart-fragments' ); return true; }
Code language: JavaScript (javascript)
Resumindo
Nos exemplos citados acima foram usados vários ganchos de ação e ganchos de filtro. Estas ações podem ser usadas para adicionar ou editar determinados campos internos da sua loja virtual Woocommerce, como campos de checkout, pedidos, produtos, entre outros.
Caso queira se aprofundar melhor, recomendamos que leia a documentação oficial da ferramenta. Inclusive, lá é possível encontrar uma infinidade de hacks, com a devida explicação de cada um deles. Todos prontos para atender um tipo de necessidade.
Fica a dica!
Foto: LoveFreund via Pexels.