De ultieme handleiding voor het ontwikkelen van WooCommerce-extensies: van beginner tot expert in het bouwen van aangepaste e-commerce-plug-ins.

4 minuten leestijd
2026-03-11
2026-06-03
1,983
Ik verdien commissies wanneer je via de onderstaande links winkelt, zonder dat dit extra kosten voor jou met zich meebrengt.

Opzetten van een ontwikkelingsomgeving voor WooCommerce-extensies

Voordat je met het schrijven van code begint, is het van belang om een stabiele en efficiënte lokale ontwikkelingsomgeving op te zetten. Dit zorgt niet alleen voor compatibiliteit tussen je extensies en de meest recente versie van WooCommerce, maar biedt je ook de mogelijkheid om alle functies te testen in een veilige omgeving, zonder dat de online winkel hierdoor wordt beïnvloed.

Configuratie van de lokale ontwikkelingsomgeving

Een typisch ontwikkelingsomgeving voor WooCommerce-expansies moet ten minste PHP, MySQL/MariaDB en een webserver (zoals Nginx of Apache) omvatten. Het wordt sterk aanbevolen om gebruik te maken van geïntegreerde lokale serversoftware, zoals Local by Flywheel, Laravel Valet of XAMPP. Deze tools versimpelen het proces van omgevingsconfiguratie. Je moet ervoor zorgen dat de PHP-versie voldoet aan de minimale vereisten van WooCommerce (meestal PHP 7.4 of hoger), en dat de nodige extensies zijn geactiveerd, zoals cURL, GD/ImageMagick en OpenSSL.

Core files en codestructuur

De kern van WooCommerce bestaat uit een goed ontworpen plugin, waarvan het uitbreidingsmechanisme voornamelijk afhankelijk is van de plugin-architectuur van WordPress. Een basisuitbreiding voor WooCommerce is zelf een standaardWordPress-plugin. Je uitbreidingsproject moet dus beginnen met een hoofdpluginbestand. your-extension.phpDeze bestand moet de standaardcommentaren voor de WordPress-pluginkoppen bevatten, zodat je plugin herkend kan worden in de WordPress-beheeromgeving.

Aanbevolen leesmateriaal WooCommerce-tutorial: een volledige handleiding voor het bouwen van een professionele e-commerce website vanaf nul.

/**
 * 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
 */

Binnen het bestand moet je gebruikmaken van… add_action Je kunt gebruikmaken van een ‘hook’ om te zorgen dat je code pas wordt uitgevoerd nadat WooCommerce is geladen. Een veelgebruikte methode hierbij is om de code te hangen (‘mount’) op een bepaald moment in de werking van WooCommerce. plugins_loadedwoocommerce_loaded Op het gebied van acties.

UltaHost WordPress-hosting
30-daagse garantie voor het terugbetalen van het geld, onbeperkt bandbreedte- en databestand, gratis DDoS-beveiliging, en een prijsvoordeel van 50% bij een aankoop van 3 jaar.
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;
    }

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

Het begrijpen van het kernextensiemechanisme van WooCommerce

De kracht van WooCommerce ligt in zijn zeer uitbreidbare architectuur. Ontwikkelaars kunnen de functionaliteit van het platform aanpassen en uitbreiden door gebruik te maken van enkele kernmechanismen: Action Hooks, Filter Hooks, het overschrijven van custom templates, en het erven en herschrijven van klassen en functies.

Utiliseer acties en filter-haken

Hooks vormen de basis voor extensies voor WordPress en WooCommerce. Actie-hooks bieden je de mogelijkheid om je eigen code op bepaalde momenten uit te voeren. Bijvoorbeeld, je kunt je eigen code activeren nadat een gebruiker een bestelling heeft afgerond.woocommerce_thankyouEen aangepaste functie wordt uitgevoerd om een notificatie te sturen naar een derde-partijssysteem.

De filter-haken bieden je de mogelijkheid om de gegevens die worden overgedragen in de processtroom te “veranderen”. Bijvoorbeeld, je kunt hiermee… woocommerce_product_get_price De filters veranderen de prijzen van producten dynamisch, of worden op een andere manier gebruikt. woocommerce_checkout_fields Filteren wordt gebruikt om velden in het afrekenformulier toe te voegen, te verwijderen of te bewerken.

// 示例:在结账页面添加一个自定义字段
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'] ) );
    }
}

Custom template override

WooCommerce gebruikt een set van templatebestanden om de weergave van de front-end-pagina's te bepalen, zoals de productpagina's, de winkelwagen en de betaalpagina. Om het uiterlijk van deze pagina's te veranderen, is het beste om de templates te overschrijven in plaats van de bestanden in de kern van het WooCommerce-plugin rechtstreeks te bewerken.

Aanbevolen leesmateriaal Handboek voor beginners in het ontwikkelen van WordPress-plug-ins: bouw je eerste functionele plugin van scratch

De specifieke procedure is als volgt: in je themapakket (het liefst een subthemapakket) of in de map met plugins, maak een bestand met de naam woocommerce Maak een nieuwe map en kopieer de kerntemplate-bestanden die je wilt bewerken naar deze map, terwijl je de dezelfde padstructuur behoudt. Als je bijvoorbeeld de template voor de winkelwagenpagina wilt overschrijven, moet je deze bestanden uit het WooCommerce-plugin halen. templates/cart/cart.php Kopieer de bestanden naar je thema. woocommerce/cart/cart.phpEn vervolgens wijzig je deze kopie.

Een aangepaste functie ontwikkelen om het systeem uit te breiden

Laten we nu een volledig voorbeeld uitvoeren: ontwikkelen we een extensie waarmee we voor een eenvoudig product een veld voor een “aangepaste prijs” kunnen toevoegen, zodat klanten deze prijs op de frontend kunnen invoeren bij het kopen (bijvoorbeeld voor donaties of producten met een zelf gekozen bedrag).

Maak een hoofdpluginklasse

Om de encapsulatie en onderhoudbaarheid van de code te bewaren, gebruiken we objectgerichte programming (OOP) en pakken we alle functionaliteiten op in een enkele hoofdklasse. We noemen deze klasse... WC_Custom_Price_Product

hosting.com gedeelde hosting
Hoge prestaties met AMD EPYC CPU's, NVMe SSD opslag en LiteSpeed, 24/7 deskundige interne ondersteuning, geavanceerde beveiligingsmaatregelen waaronder SSL, bescherming tegen brute kracht, malware en DDoS, besparingen tot 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();
}

De backend-beheerfuncties worden geïmplementeerd.

Allereerst voegen we op de productbewerkingssite, in het tabblad “Algemeen”, een keuzevak toe. Hiermee kunnen winkeliers deze functie activeren en, indien gewenst, een minimumprijs instellen.

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'] ) );
    }
}

Werken met front-end-interacties en de logica van de winkelwagen

Op de frontend moeten we controleren of de productfunctie voor aangepaste prijzen is ingeschakeld. Als dit het geval is, moet een invoervak worden weergegeven.

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
}

Als de gebruiker op “Toenemen in winkelwagen” klikt, moeten we deze aangepaste prijs opvangen en deze als gegevens van het winkelwagenartikel opslaan.

Aanbevolen leesmateriaal Als je de wereld van WordPress-pluginontwikkeling betreedt, betekent dat dat je de technieken beheerst om plugins te maken voor gebruikers overal ter wereld.

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;
}

Ten slotte, en dit is ook het belangrijkste stuk, moet de oorspronkelijke prijs van het product worden vervangen door de door ons opgeslagen custom-prijs wanneer de totale prijs van de winkelwagen wordt berekend.

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'] );
        }
    }
}

Uitgebreide testen, distribueren en onderhoud

Na de ontwikkeling moet een grondige test worden uitgevoerd, waaronder functionaliteitstests, compatibiliteitstests (met verschillende thema's en andere plugins) en veiligheidscontroles (zoals datavalidatie en -reiniging). Hiervoor kunnen tools als WP-CLI, PHPUnit en browserautomatisatiehulpmiddelen worden gebruikt.

InterServer gedeelde hosting
Shared hosting $2.50 USD per maand, eerste maand $0.1 USD promo code tryinterserver, 461 cloud apps scripts, een klik te installeren.

Ver klaar voor publicatie op de officiële markt.

Als je je plugin wilt publiceren op de officiële WooCommerce-markt of in de WordPress-plugincatalogus, moet je de informatie over je plugin zorgvuldig voorbereiden: het moet duidelijk en volledig zijn. readme.txt Bestanden (in standaardformat), uitgebreide documentatie, high-quality banners en iconen. De code moet voldoen aan de codingstandaarden van WordPress en WooCommerce, en er mag geen code zijn gebruikt die niet compatibel is met de GPL-licentie.

Volgende updates en ondersteuning

Het onderhouden van een extensie is een belangrijk onderdeel van het verlengen van de levenscyclus ervan. Je moet mechanismen opzetten om gebruikersfeedback te verwerken, beveiligingslekken te repareren en de compatibiliteit te upgraden wanneer de kern van WooCommerce wordt bijgewerkt. Gebruik versiebeheer (zoals Git) en semantische versienummers (SemVer) om veranderingen in je code te beheren. Overweeg ook om een automatische update-checker toe te voegen aan je extensie, zodat veiligheidsupdates en functionaliteitsverbeteringen worden gestuurd naar de geïnstalleerde gebruikers.

Samenvatting

Het ontwikkelen van WooCommerce-extensies is een proces waarbij je je eigen ideeën omtovert naar krachtige e-commerce-functies. Door het beheersen van het opzetten van het omgeving, het begrijpen van hooks en het template-systeem, kun je elke aspect van je winkel volledig personaliseren. In dit artikel wordt de volledige ontwikkelingsprocedure gedemonstreerd met een voorbeeld van een “aangepast prijsproduct”: van het creeren van backend-velden, de interactie op de frontend tot de verwerking van de winkelwagen-logica. Vergeet niet dat een goede extensie begint met duidelijke vereisten, een strakke codestructuur en uitgebreide testing. Met de continue ontwikkeling van de WooCommerce-ecosysteem, zal het regelmatig leren en praktiseren van de nieuwste API’s en beste praktijken je in staat stellen om professionele en betrouwbare commerciële oplossingen te bouwen.

Veelgestelde vragen (FAQ)

Welke voorwaartse kennis is vereist om een extensie voor WooCommerce te ontwikkelen?

Je moet een solide basis in PHP-programmering hebben en vertrouwd zijn met de concepten van objectgericht programmaeren (OOP). Daarnaast is het belangrijk om de kernmechanismen van WordPress goed te begrijpen, waaronder action-hooks, filter-hooks, het maken van custom post types (CPT's) en het bewerken van metadata. Een basiskennis van HTML, CSS, JavaScript (met name jQuery) en MySQL is ook vereist.

Hoe debug je problemen in een WooCommerce-extensie?

Allereerst, zorg ervoor dat je op wp-config.php De optie is in het bestand geactiveerd. WP_DEBUGWP_DEBUG_LOGDit zal de foutmeldingen opslaan in een logbestand. Daarnaast biedt WooCommerce zelf een logsystem dat kan worden gebruikt. wc_get_logger() De functie registreert de uitvoeringsstatus. Daarnaast kan je de fouten in het front-end JavaScript en de antwoordgeving van AJAX-verzoeken controleren met de ontwikkelaarstools van de browser (console en netwerktabbladen). Voor complexe logische problemen kun je PHP-debuggingstools zoals Xdebug gebruiken voor stapsgewijze oplossing.

Hoe kan mijn extensie worden geïntegreerd met verschillende versies van WooCommerce?

Tijdens het ontwikkelen moet altijd aandacht worden besteed aan de uitleggingen in de officiële WooCommerce-documentatie over het niet langer worden gebruikt worden van bepaalde functies en hooks. In je code moet je gebruikmaken van conditionele controles om te controleren welke versie van WooCommerce wordt gebruikt, of of een bepaalde klasse/methoden beschikbaar is. Op deze manier kun je backwards-compatible alternativen bieden.if ( version_compare( WC_VERSION, '4.0.0', '>=' ) ) { // 使用新API } else { // 使用旧API }Meld in de informatie over de uitgave van het plugin duidelijk welke minimale en maximale versies van WooCommerce worden ondersteund.

Hoe moet je gebruikersinvoer en betaalgegevens veilig verwerken?

Alle gegevens die vanuit de invoer van de gebruiker komen (zoals...) $_POST, $_GETAlles moet worden gevalideerd en gereinigd. Hierbij kun je functies gebruiken die WordPress biedt, zoals… sanitize_text_field(), absint(), wp_unslash() Etc. Voor de gegevens die naar de browser worden gestuurd, wordt gebruik gemaakt van... esc_html(), esc_attr(), wp_kses_post() Geef gevoelige betaalgegevens, zoals originele creditcardnummers, altijd een escape. Verwerk of sla deze nooit zelf op. Vertrouw altijd op de ingebouwde payment-gateways van WooCommerce of gebruik derde-partij-API's die streng veiligheidsauditeerd zijn om de betalingsfuncties te realiseren.