사용자 지정 필드 데이터를 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
'programing' 카테고리의 다른 글
AngularJS는 객체 배열 내의 객체 속성을 감시합니다. (0) | 2023.03.21 |
---|---|
현재 루트명/컨트롤러를 기반으로 클래스를 설정하는 방법 (0) | 2023.03.21 |
React-Query 훅을 사용한 조건부 API 호출 (0) | 2023.03.21 |
단순한 어레이 초기화를 사용한ng-timeout (0) | 2023.03.21 |
WebSocket 연결 실패:WebSocket 핸드쉐이크 중 오류 발생:예기치 않은 응답 코드: 400 (0) | 2023.03.21 |