Guia definitivo para o desenvolvimento de extensões do WooCommerce: do iniciante ao especialista na criação de plugins de comércio eletrónico personalizados.

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

Configuração do ambiente de desenvolvimento para extensões do WooCommerce

Antes de começar a escrever qualquer código, é essencial criar um ambiente de desenvolvimento local estável e eficiente. Isso não só garante que suas extensões sejam compatíveis com a versão mais recente do WooCommerce, mas também permite que você teste todas as funcionalidades em um ambiente seguro, sem afetar a operação da loja online.

Configuração do ambiente de desenvolvimento local

Um ambiente típico de desenvolvimento de extensões para o WooCommerce deve conter, no mínimo, PHP, MySQL/MariaDB e um servidor web (como Nginx ou Apache). É fortemente recomendado o uso de softwares de servidor local integrados, como Local by Flywheel, Laravel Valet ou XAMPP, pois eles simplificam o processo de configuração do ambiente. Você precisa garantir que a versão do PHP atenda aos requisitos mínimos do WooCommerce (geralmente 7.4 ou superior) e que as extensões necessárias estejam ativadas, como cURL, GD/ImageMagick e OpenSSL.

Arquivos principais e estrutura do código

O núcleo do WooCommerce é um plugin cuidadosamente projetado, e seu mecanismo de extensão depende principalmente da arquitetura de plugins do WordPress. Uma extensão básica do WooCommerce é, em si, um plugin padrão do WordPress. Portanto, seu projeto de extensão deve começar com um arquivo de plugin principal. your-extension.phpEste arquivo deve conter as notas de cabeça padrão dos plugins do WordPress, para que o seu plugin seja reconhecido no painel de administração do WordPress.

Leitura recomendada Tutorial do WooCommerce: um guia completo para construir um site de comércio eletrónico profissional do zero.

/**
 * Plugin Name: Your Awesome WooCommerce Extension
 * Plugin URI: https://yourwebsite.com/
 * Description: 为WooCommerce添加自定义功能。
 * Version: 1.0.0
 * Author: Your Name
 * License: GPL v2 or later
 * Text Domain: your-text-domain
 */

Dentro do arquivo, você precisa usar… add_action Use “ganchos” (hooks) para garantir que seu código seja executado somente após o carregamento do WooCommerce. Uma prática comum é montá-los (attach them) em pontos específicos do código do WooCommerce. plugins_loaded ou woocommerce_loaded Em termos de ações.

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).
add_action( 'plugins_loaded', 'initialize_your_extension' );

function initialize_your_extension() {
    // 检查WooCommerce是否已激活
    if ( ! class_exists( 'WooCommerce' ) ) {
        add_action( 'admin_notices', function() {
            ?>
            <div class="notice notice-error">
                <p><?php _e( '本插件需要WooCommerce才能运行。请先安装并激活WooCommerce。', 'your-text-domain' ); ?></p>
            </div>
            &lt;?php
        } );
        return;
    }

// 你的扩展核心代码从这里开始
    // ...
}

Compreender o mecanismo de extensões (plugins) central do WooCommerce

A força do WooCommerce reside em sua arquitetura altamente extensível. Os desenvolvedores modificam e aprimoram suas funcionalidades principalmente através de alguns mecanismos centrais: ganchos de ação (Action Hooks), ganchos de filtro (Filter Hooks), substituição de templates personalizados, além da herança e reescrita de classes e funções.

Utilizando ganchos de ações e filtros

Os “ganchos” (Hooks) são a pedra angular das extensões para o WordPress e o WooCommerce. Os ganchos de ação (Action Hooks) permitem que você execute o seu próprio código em momentos específicos. Por exemplo, você pode executar algum código após o usuário concluir um pedido.woocommerce_thankyou) Ativa uma função personalizada para enviar notificações para um sistema terceiro.

Os ganchos (hooks) dos filtros permitem que você “modifique” os dados transmitidos no processo. Por exemplo, você pode usar… woocommerce_product_get_price Os filtros alteram dinamicamente os preços dos produtos, ou são utilizados para isso. woocommerce_checkout_fields Filtros são utilizados para adicionar, remover ou modificar os campos presentes no formulário de pagamento.

// 示例:在结账页面添加一个自定义字段
add_filter( 'woocommerce_checkout_fields', 'add_custom_checkout_field' );
function add_custom_checkout_field( $fields ) {
    $fields['billing']['billing_custom_field'] = array(
        'label'     => __( '自定义信息', 'your-text-domain' ),
        'placeholder'   => _x( '请输入...', 'placeholder', 'your-text-domain' ),
        'required'  => false,
        'class'     => array( 'form-row-wide' ),
        'clear'     => true
    );
    return $fields;
}

// 示例:保存自定义字段的值
add_action( 'woocommerce_checkout_update_order_meta', 'save_custom_checkout_field' );
function save_custom_checkout_field( $order_id ) {
    if ( ! empty( $_POST['billing_custom_field'] ) ) {
        update_post_meta( $order_id, '_billing_custom_field', sanitize_text_field( $_POST['billing_custom_field'] ) );
    }
}

Substituição de um modelo personalizado

O WooCommerce utiliza um conjunto de arquivos de template para controlar a exibição das páginas front-end, como a página de detalhes do produto, o carrinho de compras e a página de pagamento. Para modificar a aparência dessas páginas, a prática recomendada é usar a funcionalidade de “template override” (sobreposição de templates), em vez de alterar diretamente os arquivos do plugin core do WooCommerce.

Leitura recomendada Guia introdutório para o desenvolvimento de plugins do WordPress: construa o seu primeiro plugin funcional do zero.

As operações específicas são as seguintes: no seu diretório de temas (de preferência, um subtema) ou de plugins, crie um arquivo com o nome… woocommerce Crie uma pasta com o nome “templates”, e então copie o arquivo do modelo principal que você deseja modificar para este diretório, mantendo a mesma estrutura de caminhos. Por exemplo, para substituir o modelo da página do carrinho de compras, você precisa ir do plugin WooCommerce… templates/cart/cart.php Copie o arquivo para o seu tema. woocommerce/cart/cart.phpEm seguida, modifique essa cópia.

Desenvolver uma extensão de funcionalidade personalizada

Agora, vamos praticar um exemplo completo: desenvolver uma extensão para adicionar um campo de “preço personalizado” a um produto simples e permitir que os clientes insiram esse preço na página de compra (por exemplo, para doações ou produtos com valores personalizados).

Criar a classe do plugin principal

Para manter a encapsulamento e a manutenibilidade do código, adotamos a programação orientada a objetos (POO) e encapsulamos todas as funções em uma única classe principal. Nós chamamos essa classe de… WC_Custom_Price_Product

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%
if ( ! class_exists( 'WC_Custom_Price_Product' ) ) {

class WC_Custom_Price_Product {

/**
         * 构造方法,初始化所有钩子。
         */
        public function __construct() {
            // 后台:为产品添加自定义字段
            add_action( 'woocommerce_product_options_pricing', array( $this, 'add_admin_custom_price_field' ) );
            add_action( 'woocommerce_process_product_meta', array( $this, 'save_admin_custom_price_field' ) );

// 前台:在产品页面显示输入框并处理价格
            add_action( 'woocommerce_before_add_to_cart_button', array( $this, 'add_frontend_price_input' ) );
            add_filter( 'woocommerce_add_cart_item_data', array( $this, 'add_custom_price_to_cart_item' ), 10, 2 );
            add_filter( 'woocommerce_get_item_data', array( $this, 'display_custom_price_on_cart_and_checkout' ), 10, 2 );
            add_action( 'woocommerce_before_calculate_totals', array( $this, 'apply_custom_price_to_cart_item' ), 20, 1 );
        }

// 后续方法将在这里定义...
    }

// 实例化类
    new WC_Custom_Price_Product();
}

Implementar funcionalidades de gerenciamento de backend

Primeiramente, adicionaremos uma caixa de seleção na aba “Geral” da página de edição do produto, permitindo que os lojistas ativem esta funcionalidade e, possivelmente, definam um preço mínimo.

public function add_admin_custom_price_field() {
    global $product_object;
    woocommerce_wp_checkbox( array(
        'id'            => '_enable_custom_price',
        'label'         => __( '允许自定义价格', 'your-text-domain' ),
        'description'   => __( '允许顾客在前台输入他们希望支付的价格。', 'your-text-domain' ),
        'value'         => $product_object->get_meta( '_enable_custom_price' ) === 'yes' ? 'yes' : 'no',
    ) );
    woocommerce_wp_text_input( array(
        'id'            => '_min_custom_price',
        'label'         => __( '最低价格(可选)', 'your-text-domain' ) . ' (' . get_woocommerce_currency_symbol() . ')',
        'placeholder'   => '0.00',
        'desc_tip'      => true,
        'description'   => __( '设置顾客可以输入的最低价格。', 'your-text-domain' ),
        'type'          => 'number',
        'custom_attributes' => array(
            'step'  => '0.01',
            'min'   => '0',
        ),
        'value'         => $product_object->get_meta( '_min_custom_price' ) ? $product_object->get_meta( '_min_custom_price' ) : '',
    ) );
}

public function save_admin_custom_price_field( $post_id ) {
    $enable_custom_price = isset( $_POST['_enable_custom_price'] ) ? 'yes' : 'no';
    update_post_meta( $post_id, '_enable_custom_price', $enable_custom_price );
    if ( isset( $_POST['_min_custom_price'] ) ) {
        update_post_meta( $post_id, '_min_custom_price', sanitize_text_field( $_POST['_min_custom_price'] ) );
    }
}

Tratar a interação com o usuário na interface frontal e a lógica do carrinho de compras

Na interface frontal, precisamos verificar se o produto tem a funcionalidade de preços personalizados ativada. Se for o caso, deve-se exibir uma caixa de entrada.

public function add_frontend_price_input() {
    global $product;
    if ( $product->get_meta( '_enable_custom_price' ) !== 'yes' ) {
        return;
    }
    $min_price = $product->get_meta( '_min_custom_price' );
    ?>
    <div class="custom-price-field">
        <label for="custom_price"><?php _e( '请输入您的价格', 'your-text-domain' ); ?>
            <?php if ( $min_price ) : ?>
                <small>(<?php printf( __( '最低:%s', 'your-text-domain' ), wc_price( $min_price ) ); ?>)</small>
            <?php endif; ?>
        </label>
        <input type="number" name="custom_price" id="custom_price" step="0.01"
               <?php echo $min_price ? 'min="' . esc_attr( $min_price ) . '"' : 'min="0"'; ?>
               value="<?php echo $min_price ? esc_attr( $min_price ) : ''; ?>"
               style="width:200px; display:block; margin-bottom:1em;" />
    </div>
    <?php
}

Quando o usuário clica em “Adicionar ao carrinho de compras”, precisamos capturar esse preço personalizado e salvá-lo como dados do item no carrinho de compras.

Leitura recomendada Iniciar uma jornada de desenvolvimento de plugins para o WordPress significa que você dominou a criação de recursos para uma audiência global.

public function add_custom_price_to_cart_item( $cart_item_data, $product_id ) {
    if ( isset( $_POST['custom_price'] ) && ! empty( $_POST['custom_price'] ) ) {
        $cart_item_data['custom_price'] = floatval( $_POST['custom_price'] );
        $cart_item_data['unique_key'] = md5( microtime().rand() ); // 确保项目唯一性
    }
    return $cart_item_data;
}

public function display_custom_price_on_cart_and_checkout( $item_data, $cart_item ) {
    if ( isset( $cart_item['custom_price'] ) ) {
        $item_data[] = array(
            'name'  => __( '自定义价格', 'your-text-domain' ),
            'value' => wc_price( $cart_item['custom_price'] ),
        );
    }
    return $item_data;
}

Finalmente, e o mais importante passo, ao calcular o total do carrinho de compras, é substituir o preço original dos produtos pelo preço personalizado que salvamos.

public function apply_custom_price_to_cart_item( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
        return;
    }
    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) {
        return;
    }
    foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
        if ( isset( $cart_item['custom_price'] ) ) {
            $cart_item['data']->set_price( $cart_item['custom_price'] );
        }
    }
}

Testes ampliados, distribuição e manutenção

Após a conclusão do desenvolvimento, é necessário realizar testes abrangentes, incluindo testes de funcionalidade, testes de compatibilidade (com diferentes temas e outros plugins), bem como verificações de segurança (como validação e limpeza de dados). Ferramentas como WP-CLI, PHPUnit e ferramentas de automação de navegadores podem ser utilizadas para auxiliar nos testes.

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.

Pronto para ser lançado no mercado oficial.

Se você planeja lançar o seu plugin no mercado oficial do WooCommerce ou no diretório de plugins do WordPress, é necessário preparar cuidadosamente as informações sobre o plugin: elas devem ser claras e detalhadas. readme.txt Arquivos (em formato padrão), documentos detalhados, banners de alta qualidade e ícones. O código deve seguir os padrões de codificação do WordPress e do WooCommerce, e deve-se garantir que nenhum código licenciado de forma incompatível com a GPL esteja sendo utilizado.

Atualizações futuras e suporte

A manutenção é uma parte importante do ciclo de vida de um extensão. Você precisa criar mecanismos para lidar com feedback dos usuários, corrigir vulnerabilidades e realizar atualizações de compatibilidade conforme o núcleo do WooCommerce for atualizado. Utilize controle de versão (como Git) e números de versão semânticos (SemVer) para gerenciar as alterações no seu código. Considere adicionar um verificador de atualizações automático ao seu extensão, a fim de enviar atualizações de segurança e melhorias de funcionalidades para os usuários que o instalaram.

resumos

O desenvolvimento de extensões para o WooCommerce é um processo que permite transformar suas ideias em funcionalidades avançadas para lojas virtuais. Ao dominar a configuração do ambiente, entender os mecanismos de interação (hooks) e o sistema de templates, você consegue personalizar cada aspecto da sua loja de forma detalhada. Este artigo demonstra todo o processo de desenvolvimento, a partir da criação de campos no backend, da interação com o usuário no frontend até o processamento das informações no carrinho de compras, através de um exemplo completo de “produto com preços personalizáveis”. Lembre-se: uma extensão de qualidade começa com requisitos claros, uma estrutura de código bem estruturada e testes abrangentes. Com o contínuo desenvolvimento da comunidade do WooCommerce, aprender e praticar as suas últimas APIs e melhores práticas lhe permitirá criar soluções comerciais mais profissionais e confiáveis.

Perguntas frequentes Perguntas frequentes

Quais são os conhecimentos prévios necessários para desenvolver extensões para o WooCommerce?

Você precisa ter uma base sólida em programação em PHP e estar familiarizado com os conceitos de programação orientada a objetos (OOP). Além disso, é essencial entender profundamente os mecanismos centrais do WordPress, incluindo os ganchos de ação (Actions), os ganchos de filtro (Filters), a criação de tipos de artigos personalizados (Custom Post Types – CPT) e o manuseio de metadados (Metadata). É também necessário ter um conhecimento básico de HTML, CSS, JavaScript (especialmente jQuery) e MySQL.

Como depurar problemas em extensões para o WooCommerce?

Primeiro, certifique-se de que… wp-config.php O arquivo está ativado (ou configurado para funcionar). WP_DEBUG e WP_DEBUG_LOGIsso registrará as mensagens de erro em um arquivo de log. Além disso, o próprio WooCommerce disponibiliza um sistema de logs, que pode ser utilizado para acompanhar e analisar as atividades do site. wc_get_logger() A função registra o estado de execução dos códigos. Além disso, é possível utilizar as ferramentas de desenvolvimento do navegador (console e aba de rede) para verificar erros em JavaScript do lado cliente, bem como as respostas das solicitações AJAX. Para problemas lógicos mais complexos, é possível usar ferramentas de depuração de PHP, como o Xdebug, para realizar um depuramento passo a passo.

Como minha extensão pode ser compatível com diferentes versões do WooCommerce?

Durante o desenvolvimento, deve-se sempre prestar atenção às informações sobre a desativação de funções e ganchos (hooks) presentes nos documentos oficiais do WooCommerce. No código, use condições para verificar a versão do WooCommerce ou a existência de determinados classes/métodos, a fim de fornecer soluções alternativas que garantam a compatibilidade com versões anteriores. Por exemplo:if ( version_compare( WC_VERSION, '4.0.0', '>=' ) ) { // 使用新API } else { // 使用旧API }Esclareça claramente, nas informações de lançamento do plugin, as versões mínimas e máximas do WooCommerce suportadas.

Como processar de forma segura os dados inseridos pelos usuários e as informações de pagamento?

Todos os dados provenientes da entrada do usuário (como…) $_POST, $_GETTodos eles devem ser verificados e limpos. Utilize as funções fornecidas pelo WordPress, como… sanitize_text_field(), absint(), wp_unslash() Para os dados exibidos no navegador, use… esc_html(), esc_attr(), wp_kses_post() É necessário escapalar (ou “escape”) os caracteres especiais presentes nos dados de pagamento. Nunca procese ou armazene informações sensíveis, como números de cartão de crédito, de forma independente. Sempre confie no gateway de pagamento integrado ao WooCommerce ou use APIs de pagamento de terceiros que tenham passado por auditorias de segurança rigorosas para realizar as transações.