programing

사용자 지정 필드 데이터를 WooCommerce 주문에 추가합니다.

css3 2023. 3. 21. 22:25

사용자 지정 필드 데이터를 WooCommerce 주문에 추가합니다.

저는 WooCommerce 단일 제품에 대한 커스텀 필드를 가지고 있습니다.카트에 정상적으로 전송되고 체크아웃 시 정상적으로 표시되며 대시보드에 순서대로 표시됩니다.

지금 하려고 하는 것은 주문 페이지에서 값을 커스텀 필드로 설정하여 필요에 따라 텍스트를 수정할 수 있도록 하는 것입니다.어떤 이유에서인지 양식을 제출할 때 이 단계가 작동하지 않습니다.

내 코드에 사용되는 코드functions.php파일:

// Add the field to the product
add_action('woocommerce_before_add_to_cart_button', 'my_custom_checkout_field');

function my_custom_checkout_field() {
    echo '<div id="my_custom_checkout_field"><h3>'.__('My Field').'</h3>';
    echo  '<label>fill in this field</label> <input type="text" name="my_field_name">';
    echo '</div>';
}

// Store custom field
function save_my_custom_checkout_field( $cart_item_data, $product_id ) {
    if( isset( $_REQUEST['my_field_name'] ) ) {
        $cart_item_data[ 'my_field_name' ] = $_REQUEST['my_field_name'];
        /* below statement make sure every add to cart action as unique line item */
        $cart_item_data['unique_key'] = md5( microtime().rand() );
    }
    return $cart_item_data;
}
add_action( 'woocommerce_add_cart_item_data', 'save_my_custom_checkout_field', 10, 2 );

// Render meta on cart and checkout
function render_meta_on_cart_and_checkout( $cart_data, $cart_item = null ) {
    $custom_items = array();
    /* Woo 2.4.2 updates */
    if( !empty( $cart_data ) ) {
        $custom_items = $cart_data;
    }
    if( isset( $cart_item['my_field_name'] ) ) {
        $custom_items[] = array( "name" => 'My Field', "value" => $cart_item['my_field_name'] );
    }
    return $custom_items;
}
add_filter( 'woocommerce_get_item_data', 'render_meta_on_cart_and_checkout', 10, 2 );

// Display as order meta
function my_field_order_meta_handler( $item_id, $values, $cart_item_key ) {
    if( isset( $values['my_field_name'] ) ) {
        wc_add_order_item_meta( $item_id, "my_field_name", $values['my_field_name'] );
    }
}
add_action( 'woocommerce_add_order_item_meta', 'my_field_order_meta_handler', 1, 3 );

/** THIS IS WHERE I'M STUCK **/

add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
    global $woocommerce;

    // Check if set, if its not set add an error. This one is only requite for companies
    if ($_POST['billing_company'])
        if (!$_POST['my_field_name']) 
            $woocommerce->add_error( __('Please enter your XXX.') );
}
// Update the user meta with field value
add_action('woocommerce_checkout_update_user_meta', 'my_custom_checkout_field_update_user_meta');
function my_custom_checkout_field_update_user_meta( $user_id ) {
    if ($user_id && $_POST['my_field_name']) update_user_meta( $user_id, 'my_field_name', esc_attr($_POST['my_field_name']) );
}

// Update the order meta with field value

add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta');
function my_custom_checkout_field_update_order_meta( $order_id ) {
    if ($_POST['my_field_name']) update_post_meta( $order_id, 'My Field', esc_attr($_POST['my_field_name']));
}

현재 발생한 상황의 스크린샷:

현재 발생한 상황의 스크린샷



내가 하고 싶은 일:

일어나고 싶은 일


어떤 도움이라도 주시면 감사하겠습니다.

갱신: Woocommerce 버전 3+와의 호환성

주문 편집 페이지에 이 사용자 지정 필드 값을 표시하는 기능이 없습니다.

/**
 * Display field value on the order edit page
 */
add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );
function my_custom_checkout_field_display_admin_order_meta( $order ){
    $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;
    echo '<p><strong>'.__('My Field Name').':</strong> ' . get_post_meta( $order_id, 'my_field_name', true ) . '</p>';
}

아래 참조 링크에는 오리지널 wooThemes 기능 동작 코드 스니펫이 있습니다.이 튜토리얼은 완전히 기능합니다.

참조: [액션과 필터를 사용한 체크아웃 필드 맞춤][1]


편집: 주문 항목 메타에서 사용자 지정 필드 값과 함께 표시되는 사용자 지정 레이블을 가져옵니다.

my_field_name과 같은 슬래그 대신 커스텀필드 값(메타 순서 항목)사용하여 "MY field name"과 같은 커스텀라벨을 취득하려면 다음 절차를 참조하십시오.

이것이 아직 유효한지는 모르겠습니다만, 코드로 하려고 하고 있습니다만, 유감스럽게도 방해되고 있습니다.woocommerce 체크 아웃필드 에디터 플러그인을 사용해 보았습니다.이 플러그인은 커스텀필드 데이터를 woocomerce 오더에 추가하는 데 성공했습니다.

언급URL : https://stackoverflow.com/questions/37766926/add-custom-field-data-to-woocommerce-order