Como utilizar o WooCommerce Hook para implementar funcionalidades personalizadas de carrinho de compras e gestão avançada de encomendas.

Leitura de 3 minutos
2026-03-17
2026-06-03
2,532
Eu recebo uma comissão quando você faz compras através dos links abaixo, sem custo adicional para você.

Compreender os fundamentos do sistema de ganchos (hooks) do WooCommerce

O WooCommerce é construído sobre o WordPress e herda sua poderosa arquitetura de plugins. O mecanismo central de extensão do WooCommerce são os “ganchos” (hooks). Esses ganchos permitem que os desenvolvedores insiram código personalizado em pontos específicos do processo de execução do WooCommerce, permitindo a personalização avançada das funcionalidades sem a necessidade de modificar os arquivos principais do software. Isso segue o princípio de abertura e fechamento (Open-Closed Principle), mantendo o próprio WooCommerce estável, enquanto todas as necessidades personalizadas são atendidas através dos ganchos.

O WooCommerce oferece principalmente dois tipos de ganchos (hooks): ganchos de ação (action hooks) e ganchos de filtro (filter hooks). do_action() A função é acionada e fornece um “ponto de execução” que permite aos desenvolvedores adicionar funcionalidades, como enviar um e-mail personalizado após a criação de um pedido. Ela não retorna nenhum valor e é utilizada apenas para executar ações adicionais. Os ganchos (hooks) dos filtros são… apply_filters() Ao ser acionada, a função fornece um “ponto de modificação” que permite que os desenvolvedores alterem o valor de uma variável, por exemplo, aplicando um cálculo de desconto complexo antes de exibir o preço de um produto. O filtro deve retornar um valor.

Entender a diferença entre esses dois tipos de “ganchos” (hookes) é fundamental para utilizá-los de forma eficaz. Em termos simples, uma ação (action) é algo que é feito, enquanto um filtro (filter) é algo que é alterado. Os desenvolvedores utilizam esses recursos para... add_action() e add_filter() A função insere a sua própria função de callback nesses “ganchos” (hooks), permitindo assim que ela interfira no fluxo de trabalho padrão do WooCommerce.

Leitura recomendada Análise avançada do WooCommerce: como personalizar os atributos dos produtos e os campos de gestão de inventário

Utilize ganchos de ação (action hooks) para personalizar o comportamento do carrinho de compras.

O carrinho de compras é um elemento central da experiência de compra online. O WooCommerce oferece uma grande variedade de “ganchos de ação” (action hooks), permitindo que os desenvolvedores monitorem e respondam a cada ação realizada pelo usuário dentro do carrinho.

Hospedagem para sites WordPress da UltraHost
Garantia de reembolso em 30 dias, largura de banda ilimitada e banco de dados, proteção contra DDoS gratuita; desconto de 50% na compra de 3 anos (planos de 4 TB a 10 TB).

Um gancho (hook) básico e importante é… woocommerce_add_to_cartQuando um produto é adicionado com sucesso ao carrinho de compras, esse gatilho é acionado. Os desenvolvedores podem utilizá-lo para rastrear o comportamento do usuário, atualizar alertas de estoque ou sincronizar informações com sistemas de terceiros. Por exemplo, é possível registrar os produtos que o usuário adiciona e remove com frequência, a fim de utilizar esses dados em análises de recomendações personalizadas posteriormente.

add_action('woocommerce_add_to_cart', 'track_product_addition', 10, 6);
function track_product_addition($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data) {
    $user_id = get_current_user_id();
    if ($user_id) {
        $viewed_products = get_user_meta($user_id, '_tracked_cart_additions', true) ?: array();
        array_unshift($viewed_products, $product_id);
        $viewed_products = array_slice(array_unique($viewed_products), 0, 20); // 保留最近20条
        update_user_meta($user_id, '_tracked_cart_additions', $viewed_products);
    }
}

Outro gancho-chave é… woocommerce_before_calculate_totalsEle é chamado na página do carrinho de compras, na página de pagamento e em qualquer momento em que são calculados os subtotais e o total. Este é o melhor local para modificar dinamicamente os preços dos produtos ou adicionar descontos/gastos globais. Por exemplo, você pode definir descontos progressivos com base no número total de itens no carrinho de compras.

add_action('woocommerce_before_calculate_totals', 'apply_volume_discount', 20);
function apply_volume_discount($cart) {
    if (is_admin() && !defined('DOING_AJAX')) return;
    if (did_action('woocommerce_before_calculate_totals') >= 2) return;

$total_quantity = 0;
    foreach ($cart->get_cart() as $cart_item) {
        $total_quantity += $cart_item['quantity'];
    }

// 如果总数量超过10件,所有商品打9折
    if ($total_quantity > 10) {
        foreach ($cart->get_cart() as $cart_item) {
            $original_price = $cart_item['data']->get_price();
            $cart_item['data']->set_price($original_price * 0.9);
        }
    }
}

Utilizar ganchos de filtro para processar dados de produtos e pedidos.

Os ganchos de filtro (filter hooks) permitem que os desenvolvedores tenham um controle detalhado dos dados, permitindo a personalização de tudo, desde os itens no carrinho de compras até a exibição final do pedido.

woocommerce_add_cart_item_data Os filtros são executados quando os produtos são adicionados ao carrinho de compras, permitindo que os desenvolvedores adicionem dados personalizados aos itens do carrinho. Esses dados são salvos juntamente com os itens do carrinho na sessão do usuário e são transmitidos até os detalhes do pedido. Isso é essencial para a personalização dos produtos (como gravações em superfícies, escolha de cores personalizadas, etc.).

Leitura recomendada Do zero ao um: um guia técnico completo para construir um site de comércio eletrónico WooCommerce de alto desempenho.

add_filter('woocommerce_add_cart_item_data', 'add_engraving_text_to_cart_item', 10, 3);
function add_engraving_text_to_cart_item($cart_item_data, $product_id, $variation_id) {
    if (!empty($_POST['engraving_text'])) {
        $cart_item_data['engraving'] = sanitize_text_field($_POST['engraving_text']);
        // 为具有不同雕刻文本的相同产品生成唯一ID
        $cart_item_data['unique_key'] = md5($product_id . serialize($cart_item_data));
    }
    return $cart_item_data;
}

Quando for necessário exibir esses dados personalizados no carrinho de compras e no pedido, é possível utilizá-los. woocommerce_get_item_data Filtro: Ele formata os dados personalizados armazenados nos itens do carrinho de compras em um array que pode ser exibido na interface do usuário.

No backend de gerenciamento de pedidos, para exibir as informações de forma clara, podemos precisar formatar os metadados dos itens do pedido.woocommerce_order_item_get_formatted_meta_data Os filtros nos permitem controlar quais metadados serão exibidos e de que forma serão apresentados. Por exemplo, é possível ocultar os metadados técnicos que começam com “_”, mostrando apenas as informações personalizadas relacionadas ao negócio aos donos da loja.

add_filter('woocommerce_order_item_get_formatted_meta_data', 'format_order_item_meta_for_display', 10, 2);
function format_order_item_meta_for_display($formatted_meta, $item) {
    $display_meta = array();
    foreach ($formatted_meta as $meta_id => $meta) {
        // 不显示以下划线开头的“隐藏”元数据
        if (!empty($meta->key) && substr($meta->key, 0, 1) !== '_') {
            $display_meta[$meta_id] = $meta;
        }
    }
    return $display_meta;
}

Criar um processo avançado de gestão de pedidos

O processo padrão de estados de pedidos do WooCommerce pode não atender a todas as necessidades comerciais, como estados como “À espera de inspeção” ou “Em processo de envio”. Com o uso de ganchos (hooks), podemos expandir esse processo.

hospedagem compartilhada da hosting.com
Alto desempenho com CPUs AMD EPYC, armazenamento SSD NVMe e LiteSpeed, suporte interno especializado 24 horas por dia, 7 dias por semana, medidas de segurança avançadas, incluindo SSL, força bruta, malware e proteção contra DDoS, economia de até 73%

Primeiramente, é necessário registrar um status de pedido personalizado. Isso geralmente é feito em… init A ação é completada e, em seguida, é processada através do sistema. wc_order_statuses O filtro adiciona-o à lista de estados.

add_action('init', 'register_custom_order_statuses');
function register_custom_order_statuses() {
    register_post_status('wc-quality-check', array(
        'label'                     => '质检中',
        'public'                    => true,
        'exclude_from_search'       => false,
        'show_in_admin_all_list'    => true,
        'show_in_admin_status_list' => true,
        'label_count'               =&gt; _n_noop('质检中 <span class="count">(%s)</span>'\n', 'Durante o controlo de qualidade <span class="count">(%s)</span>')
    ));
}

add_filter('wc_order_statuses', 'add_custom_status_to_list');
function add_custom_status_to_list($order_statuses) {
    $order_statuses['wc-quality-check'] = '质检中';
    return $order_statuses;
}

Em seguida, é necessário definir o comportamento para as mudanças de estado.woocommerce_order_status_changed Os ganchos de ação (action hooks) podem capturar quaisquer alterações no status de um pedido. Podemos usá-los para enviar notificações de tarefa automaticamente para o departamento de qualidade quando um pedido entra no status “Em revisão”.

add_action('woocommerce_order_status_changed', 'handle_custom_order_status_change', 10, 4);
function handle_custom_order_status_change($order_id, $old_status, $new_status, $order) {
    if ($new_status == 'quality-check') {
        // 获取订单信息
        $order_number = $order->get_order_number();
        $admin_email = get_option('admin_email');
        // 发送邮件通知(此处为示例,实际应用可能需要更复杂的逻辑)
        wp_mail($admin_email, '新订单待质检', "订单 #{$order_number} 已进入质检环节,请及时处理。");
    }
}

Além disso, também podemos utilizar… woocommerce_admin_order_actions Filtros: Na página de lista de pedidos em segundo plano, foram adicionados botões de ação rápida para estados personalizados, como “Aprovar a Inspeção”. Com um único clique, o estado da ordem é alterado para a próxima etapa, o que melhora significativamente a eficiência da gestão.

Leitura recomendada Guia Completo para o Desenvolvimento de Temas WordPress: Das Noções Básicas às Técnicas Avançadas e Práticas

resumos

O sistema de ganchos (hooks) do WooCommerce é a pedra angular de sua posição como uma solução de comércio eletrônico de alto nível, pois confere aos desenvolvedores um grande poder de expansão. Desde a monitoração e resposta a eventos do carrinho de compras através dos ganchos de ação (action hooks), até o controle detalhado de produtos, preços e dados de exibição com os ganchos de filtro (filter hooks), passando pela criação de fluxos de status de pedidos personalizados que se adaptam a lógicas de negócios complexas, os ganchos fornecem um ponto de conexão padronizado em todo o processo. Dominar os cenários de aplicação e os métodos de uso desses ganchos essenciais permite que os desenvolvedores superem as limitações das funções padrão e criem lojas WooCommerce altamente personalizadas, automatizadas e eficientes, adequadas a diversos tipos de cenários de comércio eletrônico – desde varejo até atacado, e de produtos físicos até serviços digitais.

Perguntas frequentes Perguntas frequentes

Onde devo escrever o código do gancho personalizado?

Para personalizações únicas que estejam intimamente relacionadas à aparência do tema, elas podem ser descritas no subtema correspondente. functions.php No arquivo. Este é o local comum para testes rápidos e modificações simples.

Hospedagem Compartilhada InterServer
Hospedagem compartilhada $2.50 USD por mês, primeiro mês $0.1 USD código promocional tryinterserver, 461 scripts de aplicativos em nuvem, instalação com um clique.

No entanto, para garantir a modularidade, a manutenibilidade e a independência do código (evitando a perda de funcionalidades devido à mudança de temas), a prática recomendada é criar um plugin dedicado para cada função específica. Concentre todo o código personalizado do WooCommerce (ganchos, códigos curtos, etc.) nesse plugin, de modo que as funcionalidades da sua loja virtual funcionem de forma estável, independentemente do tema utilizado.

Como depurar meu código de hook para verificar se ele está sendo acionado corretamente?

Primeiro, confira se o modo de depuração do WordPress está ativado (em…) wp-config.php Defina no centro define('WP_DEBUG', true);Isso ajuda a detectar erros gramaticais.

Para depurar a lógica de acionamento dos ganchos (hooks), você pode adicionar código de registro de log temporário no início da sua função de callback. error_log() A função escreve as informações de depuração no log do servidor, ou utiliza… wc_get_logger() Grava os arquivos de log exclusivos para o WooCommerce. Ao verificar se há a saída esperada nos logs, é possível determinar se os ganchos (hooks) foram acionados e se as funções foram executadas.

O que devo fazer se o meu código de desconto personalizado entrar em conflito com alguns plugins (como cupons de desconto)?

Prioridade da execução do hookadd_action O terceiro parâmetro é a chave para resolver conflitos. A prioridade padrão é 10; quanto menor o número, mais cedo a ação é executada. Se o cálculo do desconto depende do estado final do carrinho de compras, você deve definir uma prioridade mais alta (por exemplo, 20) para garantir que a sua lógica seja executada somente após outros plugins (como o plugin de cupons, que pode ter uma prioridade de 10) terem alterado os preços.

Se o conflito for complexo, pode ser necessário utilizar condições de avaliação para verificar se outros descontos já foram aplicados na sua função. did_action()doing_action() Funções para determinar o ambiente de execução atual, a fim de evitar cálculos repetidos ou ciclos lógicos infinitos.

Depois de adicionar um status de pedido personalizado, por que ele não aparece no filtro de seleção drop-down da lista de pedidos no backend?

Apenas através de… wc_order_statuses O status de registro do filtro, por vezes, pode não ser suficiente para que ele seja exibido em todas as listas suspensas das interfaces de gerenciamento. Isso pode ser devido a problemas com o cache ou ao mecanismo de geração das listas.

Assegure-se de que seu código foi carregado corretamente. Além disso, você pode tentar atualizar o cache da página de backend (Shift+F5) ou utilizar outros métodos de recarga. woocommerce_register_shop_order_post_statuses O filtro é registrado em um nível mais fundamental do sistema. Se o problema persistir, verifique se algum outro plugin ou código do tema está sobrescrevendo o seu filtro. Você pode tentar resolver o problema desativando temporariamente os outros plugins.