WooCommerce의 사용자 정의 결제 필드를 마스터하는 방법: 생성부터 검증까지의 전체 가이드

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

왜 결제 정보 필드를 사용자 정의해야 할까요?

표준 WooCommerce 결제 프로세스에서 기본적으로 수집되는 정보는 이름, 주소, 전화번호, 이메일과 같은 기본적이고 일반적인 정보들입니다. 하지만 여러분의 비즈니스에 특별한 요구사항이 있다면, 이러한 정보만으로는 충분하지 않을 수 있습니다. 사용자 정의 필드를 추가함으로써 고객에게 더욱 세심하고 정확한 쇼핑 경험을 제공할 수 있습니다.

예를 들어, 맞춤형 케이크를 판매하는 가게는 고객에게 케이크에 적을 메시지나 촛불을 사용할지 여부 등을 요청해야 할 수 있습니다. B2B 비즈니스의 경우 고객의 회사 세금 번호나 구매 주문 번호를 기록해야 할 수 있으며, 이벤트 티켓 판매점은 참가자의 신분증 정보를 수집하여 인증을 진행해야 할 수 있습니다. 사용자 정의 필드를 통해 표준 프로세스 이외의 중요한 데이터를 수집할 수 있으며, 이러한 데이터는 주문 처리, 고객 세분화, 개인화된 마케팅, 그리고 법적 규정 준수에 활용될 수 있습니다.

기술적인 관점에서 볼 때, WooCommerce의 결제 페이지는 일련의 표준 필드로 구성된 폼입니다. 이 폼의 구조는 액션 후크(Action Hook)와 필터 후크(Filter Hook)에 의해 정의됩니다. 이는 플러그인이나 테마의 함수 파일을 통해 이러한 후크들을 활용하여 결제 프로세스에 새로운 기능을 추가하거나, 기존 필드를 삭제하거나, 수정할 수 있다는 것을 의미합니다. 이러한 핵심 메커니즘을 이해하는 것은 모든 사용자 정의 작업을 수행하는 데 필수적인 기반이 됩니다.

추천 읽기 WooCommerce 전자상거래 웹사이트 개발 전략: 설치부터 고급 기능 구현까지

커스텀 결제 필드를 생성하는 세 가지 방법

WooCommerce는 사용자 정의 필드를 추가하는 데 유연한 방법을 제공합니다. 자신의 기술 수준과 요구 사항에 맞게 가장 적합한 방법을 선택할 수 있습니다.

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

플러그인을 사용하여 빠르고 코딩 없이 기능을 추가하세요.

코드에 익숙하지 않은 웹사이트 관리자나 빠르게 서비스를 출시해야 하는 프로젝트의 경우, 전용 플러그인을 사용하는 것이 가장 편리한 방법입니다. 시중에는 “Checkout Field Editor for WooCommerce”나 “WooCommerce Checkout Manager”와 같은 우수한 플러그인들이 많이 있습니다.

이러한 플러그인들은 대체로 직관적인 백엔드 인터페이스를 제공하여, 클릭과 선택을 통해 새로운 필드를 추가할 수 있게 해줍니다. 필드의 유형(텍스트 상자, 드롭다운 메뉴, 체크박스, 라디오 버튼), 레이블, 필수 여부, 그리고 결제 페이지에서의 위치(청구서 영역 또는 배송 영역)를 정의할 수 있습니다. 플러그인을 사용하려면 코드를 작성할 필요가 없어 기술적인 진입 장벽이 매우 낮으며, 대부분의 표준적인 요구사항에 적합합니다. 하지만 플러그인은 웹사이트의 부하를 증가시킬 수 있으며, 사용자 정의 로직이 매우 복잡할 경우 유연성이 부족할 수 있다는 점에 주의해야 합니다.

코드를 통해 사용자 정의 필드를 추가합니다.

이것은 가장 강력하고 유연한 방법으로, 테마를 편집함으로써… functions.php 파일을 사용하거나 사용자 정의 플러그인을 만들어서 이 기능을 구현할 수 있습니다. 핵심은 해당 기능을 위한 코드를 작성하는 것입니다. woocommerce_checkout_fields 필터 후크(Filter Hook).

이 훅을 사용하면 결제 정보 필드 배열을 수정할 수 있습니다. 예를 들어, “청구서 정보” 섹션에 회사 이름을 입력할 수 있는 필드를 추가하고 싶다면 다음과 같은 코드를 작성할 수 있습니다:

추천 읽기 WooCommerce 제품 페이지에 사용자 정의 필드와 메타데이터를 추가하는 방법

add_filter( 'woocommerce_checkout_fields', 'custom_add_checkout_field' );
function custom_add_checkout_field( $fields ) {
    $fields['billing']['billing_company_custom'] = array(
        'label'       => __('公司名称(自定义)', 'woocommerce'),
        'placeholder' => _x('请输入您的完整公司名', 'placeholder', 'woocommerce'),
        'required'    => true,
        'class'       => array('form-row-wide'),
        'clear'       => true,
        'priority'    => 25, // 控制显示顺序,数字越小越靠前
    );
    return $fields;
}

이 코드는 필수 입력 항목인 텍스트 상자를 청구서 관련 필드에 추가합니다. 중요한 점은 필드 배열의 키 이름입니다(예:…) billing_company_custom) 및 해당 필드 집합(Field Set)['billing'] 또는 ['shipping']['order'])。

WooCommerce의 조건 논리 기능을 사용하기

때로는 특정 조건이 만족될 때만 특정 필드가 표시되기를 원합니다. 예를 들어, 고객이 “선물 포장” 서비스를 선택했을 때만 “선물 카드 메시지” 필드가 표시되도록 하고 싶을 수 있습니다. 이는 JavaScript를 사용하거나 조건 논리를 지원하는 플러그인을 활용하여 구현할 수 있습니다.

순수한 코드 구현은 보통 다음과 같은 도구나 방법들의 도움을 필요로 합니다: woocommerce_after_checkout_billing_form 또는 woocommerce_after_checkout_shipping_form 후크를 사용하여 필드의 HTML 구조를 출력하고, jQuery 스크립트를 작성하여 다른 필드(예: 체크박스)의 변화를 감지함으로써 대상 필드의 표시 또는 숨김을 제어할 수 있습니다. 하지만 이 방법은 JavaScript의 기능에 일정한 요구사항이 있습니다. 더 간단한 방법은 시각적인 조건 논리 설정을 제공하는 고급 필드 관리 플러그인을 사용하는 것입니다.

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

커스텀 필드 데이터를 검증한 후 저장합니다.

단순히 페이지에 필드를 표시하는 것만으로는 충분하지 않습니다. 데이터의 유효성을 확인하고 이를 안전하게 데이터베이스에 저장하는 것이 매우 중요한 단계입니다.

프론트엔드와 백엔드의 데이터 검증

무효하거나 악의적인 데이터의 제출을 방지하기 위해서는 서버 측(백엔드)에서 데이터를 검증해야 합니다. 이는 다음과 같은 방법으로 이루어집니다: woocommerce_checkout_process 액션 훅(Action Hook)을 사용하여 구현되었습니다.

이전 예시를 이어서, 만약 우리가 무언가를 추가한다면… billing_company_custom 이 필드는 필수 입력 사항이므로, 고객이 이를 비워두지 않았는지 반드시 확인해야 합니다.

추천 읽기 WooCommerce 개발 실전: 제로에서 시작하여 전문적인 전자상거래 웹사이트 구축하기

add_action('woocommerce_checkout_process', 'custom_validate_checkout_field');
function custom_validate_checkout_field() {
    if ( isset($_POST['billing_company_custom']) && empty($_POST['billing_company_custom']) ) {
        wc_add_notice( __( '请填写“公司名称(自定义)”。', 'woocommerce' ), 'error' );
    }
}

wc_add_notice() 이 함수는 결제 페이지 상단에 오류 메시지를 표시하여 사용자가 오류를 수정할 때까지 주문 제출을 차단합니다. 이 메시지를 통해 이메일 형식 검사, 숫자 범위 확인, 정규 표현식 일치와 같은 더 복잡한 유효성 검증 로직을 구현할 수 있습니다.

필드 데이터를 주문 정보에 저장합니다.

검증이 통과되면, 사용자 정의 필드의 값을 주문 메타데이터(Order Meta)에 저장해야 합니다. 이렇게 하면 나중에 백엔드에서나 이메일을 통해 해당 정보를 확인할 수 있습니다. 이를 위해 다음과 같은 단계가 필요합니다: woocommerce_checkout_update_order_meta 액션 후크(Action Hook).

InterServer 공유 호스팅
공유 호스팅 월 $2.50 USD, 첫 달 $0.1 USD 프로모션 코드 tryinterserver, 461개 클라우드 앱 스크립트, 원클릭 설치.
add_action('woocommerce_checkout_update_order_meta', 'custom_save_checkout_field');
function custom_save_checkout_field( $order_id ) {
    if ( ! empty($_POST['billing_company_custom']) ) {
        update_post_meta( $order_id, '_billing_company_custom', sanitize_text_field($_POST['billing_company_custom']) );
    }
}

update_post_meta() 이 함수는 정리된 필드 값들을 키-값 쌍의 형태로 저장합니다. wp_postmeta 표에서 키 이름은 보통 언더스코어(_로 시작합니다(예: _billing_company_custom이는 특정 백엔드 인터페이스에서 해당 데이터를 “숨겨진” 메타데이터로 간주하는 데 도움이 됩니다.

프론트엔드와 백엔드에서 필드 데이터를 표시합니다.

데이터를 저장한 후에는 해당 데이터가 여러 중요한 위치에서 확인되고 관리될 수 있도록 해야 합니다.

주문 상세 정보와 이메일에 표시합니다.

점주와 고객 모두가 저장된 정보를 확인할 수 있도록, 해당 정보를 관리자 후단의 주문 상세 페이지에 표시하고 고객 및 관리자에게 전송되는 주문 이메일에도 포함시켜야 합니다.

관리자 후면에서 주문 상세 정보를 수정하는 데 사용할 수 있습니다. woocommerce_admin_order_data_after_billing_address 후크(Hook):

add_action('woocommerce_admin_order_data_after_billing_address', 'custom_display_field_in_admin', 10, 1);
function custom_display_field_in_admin($order){
    $company_custom = get_post_meta( $order->get_id(), '_billing_company_custom', true );
    if ( $company_custom ) {
        echo '<p><strong>'.__('自定义公司名').':</strong> '. $company_custom '.'</p>';
    }
}

마찬가지로, 사용하십시오. woocommerce_email_order_meta_fields 필터를 사용하면 해당 필드를 주문 관련 이메일의 내용에 추가할 수 있습니다.

“내 계정”의 주문 목록에서 표시됩니다.

고객이 자신의 계정 페이지에서 과거 주문 내역을 확인할 때, 당시에 입력했던 정보도 함께 보여져야 합니다. 이는 다음과 같은 방식으로 구현될 수 있습니다: woocommerce_order_details_after_order_table 액션 훅 구현:

add_action('woocommerce_order_details_after_order_table', 'custom_display_field_in_order_view', 10, 1);
function custom_display_field_in_order_view( $order ) {
    $company_custom = get_post_meta( $order-&gt;get_id(), '_billing_company_custom', true );
    if ( $company_custom ) {
        echo '<h2>'.__('额外信息').'</h2>'echo '<table class="woocommerce-table shop_table extra_info"><tbody>'echo '<tr><th>'.__('自定义公司名').':</th><td>'. $company_custom '.'</td></tr>'echo '</tbody></table>';
    }
}

요약

WooCommerce의 결제 프로세스에 사용자 정의 필드를 추가하는 것은 요구 사항 분석, 개발 구현, 데이터 관리에 이르는 전 과정을 포함합니다. 핵심은 WooCommerce의 훅(hook) 시스템을 이해하고 활용하는 데 있습니다. woocommerce_checkout_fields 필터에 필드를 추가하여 사용하는 방법입니다. woocommerce_checkout_process 동작이 검증되었으며, 승인되었습니다. woocommerce_checkout_update_order_meta 액션을 통해 데이터를 저장한 후, 여러 가지 표시 메커니즘을 활용하여 해당 데이터를 백엔드, 이메일, 그리고 사용자 인터페이스에 표시합니다. 초보자의 경우 신뢰할 수 있는 플러그인을 사용하는 것이 좋으며, 고도의 맞춤화와 성능을 추구하는 개발자에게는 직접 코드를 작성하는 것이 최선의 방법입니다. 어떤 방법을 사용하든 명확한 데이터 흐름 설계와 엄격한 검증 과정은 기능의 안정성을 보장하고 사용자 경험을 향상시키는 데 필수적입니다.

자주 묻는 질문

추가한 사용자 정의 필드가 결제 페이지에 표시되지 않는 이유는 무엇인가요?

다음 단계에 따라 문제를 조사해 보세요: 먼저, 코드가 테마에 올바르게 추가되었는지 확인하십시오. functions.php 파일이나 사용자 정의 플러그인 내에 있으며, 문법 오류는 없습니다. 다음으로, 필드 배열의 키가 올바르게 중첩되어 있는지 확인해 주세요. $fields['billing']$fields['shipping'] 또는 $fields['order'] 之中。然后,查看浏览器控制台是否有 JavaScript 错误,这可能与字段的 class 或优先级设置冲突。最后,清空网站和浏览器的缓存后再次尝试。

어떻게 사용자 정의 필드를 선택 사항으로 설정하거나 필수 사항으로 설정할 수 있나요?

코드를 통해 필드를 추가할 때, 필드 배열 내에서 해당 필드의 값을 설정할 수 있습니다. 'required' => true 또는 'required' => false만약 필드가 이미 필수 항목이지만 선택 항목으로 변경하고 싶다면, 해당 필드의 설정을 변경하기만 하면 됩니다. woocommerce_checkout_fields 필터 함수에서 해당 필드의 내용을 처리합니다. required 파라미터를 `false`로 수정하면 됩니다. 단, 수정한 후에는 관련된 설정도 적절히 조정하거나 삭제해야 합니다. woocommerce_checkout_process 중간의 검증 로직.

커스텀 필드의 데이터는 데이터베이스의 어디에 저장되나요?

커스텀 필드의 값은 주로 WordPress의 데이터베이스에 저장됩니다. wp_postmeta 데이터베이스 테이블 내에서(테이블 접두사는 다를 수 있음), 각 레코드는 다음과 같은 방식으로 저장됩니다: post_id(해당 주문 ID와 함께) wp_posts 표 내의 주문 기록들은 서로 연결되어 있습니다. meta_key(즉, 파일을 저장할 때 사용한 키 이름입니다. 예를 들어…) _billing_company_custom)로 표시합니다.meta_value 그러면 저장된 필드의 실제 값이 표시됩니다. 이 값을 확인하려면 데이터베이스 관리 도구를 사용하거나 WordPress의 관리 기능을 활용하실 수 있습니다. get_post_meta() 이 함수는 해당 데이터를 조회합니다.

다른 제품에 따라 다른 사용자 정의 필드를 표시할 수 있을까요?

네, 가능하지만 더 복잡한 논리가 필요합니다. 일반적인 방법 중 하나는 다음과 같습니다: 먼저, 제품에 그 유형을 표시하기 위한 사용자 정의 분류나 메타 필드를 추가합니다. 그런 다음 결제 페이지에서 이 정보를 사용하여 적절한 처리를 수행합니다. woocommerce_after_checkout_form 모든 가능한 사용자 정의 필드의 HTML 코드를 후크(hook) 또는 유사한 방식을 사용하여 출력하지만, 기본적으로는 CSS를 통해 해당 필드들을 숨깁니다. 그 다음, JavaScript 스크립트를 작성하여 쇼핑카트의 내용이 변경되거나 특정 제품이 선택될 때 이를 감지하고, 현재 쇼핑카트에 있는 제품의 종류에 따라 해당 필드 그룹을 동적으로 표시하거나 숨깁니다. 마지막으로, 백엔드에서 데이터를 검증하고 저장할 때도 제품의 종류에 따라 해당 필드의 데이터를 조건부로 처리해야 합니다.