WooCommerce 플러그인 커스텀 개발 가이드: 나만의 온라인 스토어 만들기

4분 읽기
2026-03-20
2026-06-04
2,788
아래 링크를 통해 쇼핑하면 추가 비용 없이 수수료를 받을 수 있습니다.

오늘날 경쟁이 치열한 전자상거래 환경에서는 표준적인 WooCommerce 상점만으로는 모든 비즈니스 요구사항을 충족시키기 어렵습니다. 맞춤형 결제 프로세스, 특별한 배송비 계산 규칙, 또는 제3자 시스템과의 깊은 통합 등이 필요할 때마다 상점의 핵심 기능을 확장해야 합니다. 바로 이러한 상황에서 사용자 정의 플러그인 개발의 가치가 발휘됩니다. 자신만의 플러그인을 작성함으로써 상점의 기능을 더욱 효과적으로 확장하고 개선할 수 있습니다. WooCommerce 플러그인을 사용하면 완전한 제어권을 확보하여 독특한 쇼핑 경험을 만들어낼 수 있으며, 모방하기 어려운 경쟁 우위를 구축할 수 있습니다.

WooCommerce 플러그인 개발 환경 설정

어떠한 개발 작업을 시작하기 전에, 안정적이고 격리된 로컬 개발 환경을 갖추는 것은 필수적입니다. 이는 온라인 데이터를 보호하는 데 도움이 될 뿐만 아니라, 디버깅과 테스트를 수행하는 데에도 매우 유용합니다.

로컬 WordPress 환경 설정하기

Local by Flywheel, XAMPP, MAMP와 같은 도구를 사용하여 로컬 환경을 빠르게 설정하는 것을 권장합니다. 사용하는 환경이 모든 요구 사항을 충족하는지 반드시 확인하십시오. WooCommerce 최소 요구 사항: PHP 7.2 이상 버전, MySQL 5.6 이상 버전, 그리고 최신 버전의 WordPress. WordPress를 설치한 후, 공식 플러그인 디렉터리에서 필요한 플러그인을 다운로드하여 활성화하세요. WooCommerce 플러그인을 설치하고 초기 설정 안내를 완료한 후, 샘플 데이터를 가져오는 것은 개발에 매우 도움이 될 것입니다.

추천 읽기 WooCommerce 전자상거래 웹사이트 개발 및 성능 최적화 완벽 가이드

플러그인의 기본 구조를 만들기

an WooCommerce 이 플러그인은 우선 표준적인 WordPress 플러그인입니다. wp-content/plugins/ 디렉터리 내에 새로운 폴더를 생성하세요. 예를 들어, `new_folder`라는 이름으로 폴더를 만들 수 있습니다. my-custom-woocommerce이 폴더 내에 메인 플러그인 파일을 생성하세요. 파일 이름은 일반적으로 플러그인의 이름을 따서 지어집니다. 예를 들어, `my-plugin.js`와 같은 이름으로 저장하면 됩니다. my-custom-woocommerce.php

UltaHost의 WordPress 호스팅 서비스
30일 환불 보장, 무제한 대역폭 및 데이터베이스 이용, 무료 DDoS 보호 서비스 제공. 3년 구매 시 50% 용량이 할인됩니다.

이 주 파일에는 표준 WordPress 플러그인 헤더 정보가 포함되어야 합니다. 다음은 기본적인 예시입니다:

<?php
/**
 * Plugin Name: My Custom WooCommerce
 * Plugin URI:  https://yourwebsite.com/
 * Description: 为 WooCommerce 商店添加自定义功能。
 * Version:     1.0.0
 * Author:      您的名字
 * Author URI:  https://yourwebsite.com/
 * License:     GPL v2 or later
 * Text Domain: my-custom-woocommerce
 * Domain Path: /languages
 * WC requires at least: 5.0.0
 * WC tested up to: 8.0.0
 */

// 防止直接访问
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

// 检查 WooCommerce 是否已激活
if ( ! in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
    add_action( 'admin_notices', function() {
        ?>
        <div class="notice notice-error">
            <p>“My Custom WooCommerce” 플러그인을 사용하려면 WooCommerce가 이미 설치되어 활성화되어 있어야 합니다.</p>
        </div>
        &lt;?php
    } );
    return;
}

핵심은 ‘사용되었다’는 점에 있습니다. WC requires at least 그리고 WC tested up to 헤더 정보를 사용하여 선언합니다. WooCommerce 호환성을 확인하고 코드에서 이를 검사해야 합니다. WooCommerce 활성화되었는지 확인합니다.

Core Extension Method: Action and Filter Hooks

WooCommerce 그 강력한 점은 매우 확장성이 뛰어난 훅 시스템에 있습니다. 액션 훅(Action Hooks)과 필터 훅(Filter Hooks)을 이해하고 숙련되게 사용하는 것이 커스텀 개발의 핵심입니다.

프로세스에 개입하기 위해 액션 훅을 사용합니다.

액션 후크(Action Hook)를 사용하면 다음과 같은 작업을 수행할 수 있습니다: WooCommerce 특정 시점에 자신의 코드를 삽입할 수 있습니다. 예를 들어, 사용자가 주문을 하면 사용자 정의 작업(외부 API 호출 등)을 수행하고 싶을 수 있습니다.

추천 읽기 WordPress 플러그인 개발 실전 가이드: 제로에서 시작하여 첫 번째 기능 플러그인을 구축하는 방법

다음을 사용할 수 있습니다. woocommerce_thankyou 후크(Hook)는 주문 감사 페이지에서 실행됩니다. 또는 더 일반적인 방법을 사용할 수도 있습니다. woocommerce_checkout_order_processed이 기능은 주문 처리가 완료되었을 때 실행됩니다.

add_action( 'woocommerce_checkout_order_processed', 'my_custom_order_action', 10, 3 );

function my_custom_order_action( $order_id, $posted_data, $order ) {
    // 获取订单对象(如果未提供)
    if ( ! $order instanceof WC_Order ) {
        $order = wc_get_order( $order_id );
    }

// 执行您的自定义逻辑,例如记录日志或发送请求
    $logger = wc_get_logger();
    $logger->info( '订单 #' . $order_id . ' 已创建,开始执行自定义任务。', array( 'source' => 'my-custom-plugin' ) );

// 调用外部 API 示例(伪代码)
    // $response = wp_remote_post( 'https://api.example.com/notify', $args );
}

필터 후크를 사용하여 데이터를 수정합니다.

필터 후크(filter hook)를 사용하면 필터의 동작을 수정할 수 있습니다. WooCommerce 전달되는 데이터입니다. 예를 들어, 모든 상품 가격에 일정한 수수료를 추가하고 싶다고 가정해 보겠습니다.

다음을 사용할 수 있습니다. woocommerce_product_get_price 필터입니다. 이 훅은 매우 강력하지만, 모든 가격 표시에 영향을 미치므로 신중하게 사용해야 합니다.

호스팅닷컴 공유 호스팅
AMD EPYC CPU, NVMe SSD 스토리지 및 LiteSpeed를 통한 고성능, 연중무휴 24시간 전문가 사내 지원, SSL, 무차별 공격, 멀웨어 및 DDoS 보호를 포함한 고급 보안 조치, 최대 73%의 비용 절감.
add_filter( 'woocommerce_product_get_price', 'my_custom_price_adjustment', 10, 2 );

function my_custom_price_adjustment( $price, $product ) {
    // 只在前端购物车和商品页面应用,避免影响后台
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
        return $price;
    }

// 假设增加 5 元手续费
    $fee = 5;
    $new_price = $price + $fee;

return $new_price;
}

커스텀 상품 유형 및 데이터 저장 방식

WooCommerce 기본적으로는 일반 상품, 가변 상품 등을 지원합니다. 하지만 때로는 “예약 상품”이나 “서비스 상품”과 같은 새로운 상품 유형을 만들어야 할 수도 있습니다.

새로운 상품 유형을 등록하세요.

새로운 상품 유형을 만드는 데에는 여러 단계가 필요합니다. 첫 번째로, 해당 상품 유형을 등록해야 합니다. 이 과정은 보통… init 동작이나 플러그인이 로드될 때 완료됩니다.

add_action( 'init', 'register_my_custom_product_type' );

function register_my_custom_product_type() {
    class WC_Product_Custom extends WC_Product {
        public function __construct( $product ) {
            parent::__construct( $product );
            $this->product_type = 'custom';
        }

// 您可以在这里重写父类方法,或添加新方法
        public function get_type() {
            return 'custom';
        }

// 示例:自定义“添加到购物车”按钮文本
        public function add_to_cart_text() {
            return __( '预约服务', 'my-custom-woocommerce' );
        }
    }
}

그런 다음, 필터를 사용하여 이 상품 유형을 상품 유형 선택 목록에 추가해야 합니다.

추천 읽기 WooCommerce 사용자 정의 제품 페이지 쉽게 구축하기: 초보자부터 전문가까지

add_filter( 'product_type_selector', 'add_custom_product_type_to_dropdown' );

function add_custom_product_type_to_dropdown( $types ) {
    $types['custom'] = __( '自定义服务', 'my-custom-woocommerce' );
    return $types;
}

상품 사용자 정의 필드 추가

신제품 유형의 경우, 일반적으로 추가적인 데이터 필드가 필요합니다. 이는 다음과 같은 방법으로 처리할 수 있습니다: WooCommerce 상품 데이터 상자(Metabox)를 사용하여 구현합니다. woocommerce_product_options_general_product_data 액션에 필드를 추가하고 사용하세요. woocommerce_process_product_meta 액션을 저장하세요.

add_action( 'woocommerce_product_options_general_product_data', 'add_custom_product_fields' );

function add_custom_product_fields() {
    global $product_object;

echo '<div class="options_group show_if_custom">'; // `show_if_custom` 仅对“custom”类型显示

woocommerce_wp_text_input( array(
        'id'          =&gt; '_service_duration',
        'label'       =&gt; __( '服务时长 (小时)', 'my-custom-woocommerce' ),
        'desc_tip'    =&gt; true,
        'description' =&gt; __( '请输入完成此服务预计需要的小时数。', 'my-custom-woocommerce' ),
        'type'        =&gt; 'number',
        'custom_attributes' =&gt; array(
            'step' =&gt; '0.5',
            'min'  =&gt; '0.5'
        )
    ) );

echo '</div>';
}

// 保存字段
add_action( 'woocommerce_process_product_meta', 'save_custom_product_fields' );

function save_custom_product_fields( $post_id ) {
    $product = wc_get_product( $post_id );
    if ( $product-&gt;get_type() === 'custom' ) {
        $duration = isset( $_POST['_service_duration'] ) ? sanitize_text_field( $_POST['_service_duration'] ) : '';
        $product-&gt;update_meta_data( '_service_duration', $duration );
        $product-&gt;save_meta_data();
    }
}

쇼핑카트 및 결제 프로세스와 상호작용하기

쇼핑카트와 결제는 전자상거래의 핵심적인 과정입니다.WooCommerce 여기에는 사용자 정의를 위한 다양한 훅(hook)들이 제공되어 있습니다.

InterServer 공유 호스팅
공유 호스팅 월 $2.50 USD, 첫 달 $0.1 USD 프로모션 코드 tryinterserver, 461개 클라우드 앱 스크립트, 원클릭 설치.

쇼핑카트 항목의 동작을 수정합니다.

당신은 다음과 같은 방법으로 할 수 있습니다: woocommerce_add_cart_item_data 필터는 상품이 장바구니에 추가될 때 사용자 정의 데이터를 추가합니다. 예를 들어, “커스텀 서비스” 상품에 예약 날짜를 추가할 수 있습니다.

add_filter( 'woocommerce_add_cart_item_data', 'add_custom_data_to_cart_item', 10, 3 );

function add_custom_data_to_cart_item( $cart_item_data, $product_id, $variation_id ) {
    $product = wc_get_product( $product_id );
    if ( $product->get_type() === 'custom' && isset( $_POST['appointment_date'] ) ) {
        $cart_item_data['appointment_date'] = sanitize_text_field( $_POST['appointment_date'] );
        // 确保每个有不同预约日期的商品都被视为独立项目
        $cart_item_data['unique_key'] = md5( microtime() . rand() );
    }
    return $cart_item_data;
}

그런 다음, 사용하실 수 있습니다. woocommerce_get_item_data 필터는 쇼핑카트와 결제 페이지에 이러한 사용자 정의 데이터를 표시합니다.

커스텀 결제 필드 (Custom Billing Fields)

결제 정보 필드를 추가하거나 수정하는 것은 매우 흔한 일입니다. woocommerce_checkout_fields 필터는 쉽게 구현할 수 있습니다.

add_filter( 'woocommerce_checkout_fields', 'add_custom_checkout_field' );

function add_custom_checkout_field( $fields ) {
    $fields['billing']['billing_custom_vat'] = array(
        'label'       => __( '增值税号', 'my-custom-woocommerce' ),
        'placeholder' => _x( '请输入您的公司税号', 'placeholder', 'my-custom-woocommerce' ),
        'required'    => false, // 根据业务需求调整
        'class'       => array( 'form-row-wide' ),
        'clear'       => true,
        'priority'    => 35, // 控制字段顺序
    );
    return $fields;
}

이 필드의 값을 주문에 저장하려면 다음을 사용해야 합니다: woocommerce_checkout_update_order_meta 액션.

add_action( 'woocommerce_checkout_update_order_meta', 'save_custom_checkout_field' );

function save_custom_checkout_field( $order_id ) {
    if ( ! empty( $_POST['billing_custom_vat'] ) ) {
        update_post_meta( $order_id, '_billing_custom_vat', sanitize_text_field( $_POST['billing_custom_vat'] ) );
    }
}

요약

WooCommerce 플러그인의 커스텀 개발은 그 아키텍처를 이해하는 것부터 시작하는 체계적인 과정입니다. 올바른 개발 환경을 구축하고, 표준에 맞는 플러그인의 기본 구조를 만드는 것부터 시작하여, 핵심 프로세스에 개입하거나 수정하기 위해 플러그인의 ‘후크 시스템’(액션 및 필터)을 깊이 있게 이해하는 것까지, 모든 단계가 독특한 기능을 구현하는 데 기반이 됩니다. 커스텀 상품 유형과 메타 필드를 생성함으로써 복잡한 비즈니스 요구사항을 충족시키기 위해 데이터 모델을 확장할 수 있습니다. 마지막으로, 쇼핑카트와 결제 프로세스에 인터랙션과 데이터를 능숙하게 추가함으로써 사용자 경험과 운영 효율성을 직접 향상시킬 수 있습니다. 항상 최선의 관행을 따르세요: 충분한 테스트를 수행하고, 코드의 보안을 확보하며, 명확한 문서를 유지하는 것이 중요합니다. WooCommerce WordPress 코어의 업데이트와 함께 진행하는 것이 중요합니다. 이를 통해 여러분이 개발한 플러그인이 안정적이고 효율적으로 작동하며, 장기적으로 지속 가능성을 가질 수 있습니다.

자주 묻는 질문

WooCommerce 플러그인을 개발하려면 어떤 사전 지식이 필요한가요?

WooCommerce 플러그인을 개발하려면 탄탄한 PHP 프로그래밍 기술이 필요하며, 객체 지향 프로그래밍(OOP)의 개념에 익숙해야 합니다. 또한 WordPress의 핵심 메커니즘, 즉 훅 시스템(액션 및 필터), 사용자 정의 글 유형, 메타데이터, 그리고 플러그인 및 테마의 표준 구조에 대한 깊은 이해가 필수적입니다. 기본적인 HTML, CSS, JavaScript 지식은 프론트엔드 상호작용을 위해서도 매우 유용합니다.

WooCommerce 사용자 정의 플러그인에서 문제가 발생했을 때 어떻게 디버깅할 수 있을까요?

먼저, 반드시 다음 사항을 확인하십시오: wp-config.php 파일이 열리면 WP_DEBUG 그리고 WP_DEBUG_LOG오류를 로그 파일에 기록하세요. 그 다음으로, 이를 충분히 활용하세요. WooCommerce 내장된 로그 시스템을 통해… wc_get_logger() 함수는 중요한 단계에서 정보를 기록합니다. 프론트엔드 관련 문제가 발생할 경우, 브라우저의 개발자 도구(콘솔 및 네트워크 패널)를 사용하여 문제를 확인하십시오. 또한, 다른 플러그인을 일시적으로 비활성화하고 기본 테마로 전환하여 충돌 가능성을 배제할 수도 있습니다.

가격 필터를 수정했는데, 왜 백엔드의 상품 목록에 있는 가격도 변한 걸까요?

이것은 흔한 문제입니다. 많은 가격 관련 필터들이 프론트엔드와 백엔드 모두에 영향을 미칩니다. 이러한 상황을 방지하기 위해서는 필터 함수 내에서 조건 판단을 통해 필터의 적용 범위를 제한해야 합니다. 일반적으로 이러한 방법을 사용합니다. is_admin() && ! defined( 'DOING_AJAX' ) 현재가 백엔드 관리 인터페이스에 있는지 확인하고, AJAX 요청이 실행되고 있지 않은지도 확인해야 합니다. (왜냐하면 쇼핑카트 업데이트와 같은 작업들은 AJAX를 통해 이루어지며, 이때 가격 계산이 필요하기 때문입니다.) 이전 예제에서 이미 이러한 처리 방식을 보여드렸습니다.

커스텀 상품 유형이 주문서에 “간단 상품(Simple Product)”으로 표시되는 경우 어떻게 해야 하나요?

이것은 다음과 같은 이유 때문입니다: WooCommerce 주문에 상품 스냅샷을 저장할 때, 기본적으로는 사용자 정의한 상품 유형이 올바르게 인식되지 않을 수 있습니다. 상품을 장바구니에 추가할 때 해당 상품의 유형 정보가 정확하게 전달되도록 해야 합니다. 관련 내용을 확인해 주세요. WC_Product_Custom 이 클래스가 올바르게 상속을 받았는지 확인해야 합니다. WC_Product 그리고 설정도 완료되었습니다. $this->product_type또한, 주문에서 상품을 수령할 때…WooCommerce 기본적인 것이 인스턴스화될 수 있습니다. WC_Product 객체. 올바르게 인스턴스화하기 위해서는 사용해야 할 수도 있습니다. woocommerce_order_get_items 필터를 사용하여 사용자 정의한 타입을 매핑하세요.

어떻게 하면 제가 만든 커스텀 플러그인이 향후의 WooCommerce 업데이트와 호환되도록 할 수 있을까요?

호환성을 유지하는 핵심은 공식 개발 방식과 동기를 맞추는 것입니다. 항상 공식적으로 권장하는 방법을 사용하세요. WooCommerce 공개된 API와 훅(hook)을 사용하십시오. 핵심 파일을 직접 수정하거나 비공개된 클래스나 메서드를 사용하는 것은 피하십시오. 플러그인의 헤더 정보에 호환되는 버전을 명확하게 명시하십시오. WooCommerce VersionWC tested up to정기적으로… WooCommerce 테스트 버전이나 최신 버전에서 테스트를 진행하세요. 관심 있으시면 계속 지켜봐 주세요. WooCommerce 공식 개발 블로그와 업데이트 로그를 통해 곧 폐지될 기능들과 새로운 API에 대한 정보를 확인하세요.