Woocommerce Hooks: Melhores filtros e ações para sua loja virtual

Conheça os melhores hooks para turbinar seu Woocommerce, melhorando a navegabilidade dos seus visitantes dentro da sua loja virtual.

Este post foi atualizado pela última vez há mais de 3 meses.

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.

Os melhores Woocommerce Hooks

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('&copy; ' . 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.

Quero ser cliente da PortoFácil! Entre em contato

Leia também

Textos que têm a ver com este assunto:
TUTORIAL: como resolver erros e problemas no WordPress

Tutorial de como resolver os principais erros e problemas relacionados ao WordPress. Confira nosso passo a passo detalhado de soluções!

Como criar uma loja virtual com Woocommerce

Saiba como ter uma loja virtual (e-commerce) de sucesso utilizando o Woocommerce, plugin gratuito para WordPress ideal para vendas online.

Como corrigir os erros mais comuns do Woocommerce

Aprenda como resolver e corrigir os principais erros do Woocommerce sem precisar de muito conhecimento técnico sobre códigos e WordPress.