관리자 패널에서 woocommerce 주문에 사용자 정의 필드를 표시하는 방법은 무엇입니까?


13

현재 나는 woocommerce에 사용자 정의 청구 필드를 추가합니다.

function custom_override_checkout_fields( $fields ) {
     $fields['billing']['billing_phone_new'] = array(
        'label'     => __('Phone 2', 'woocommerce'),
    'placeholder'  => _x('Phone 2', 'placeholder', 'woocommerce'),
    'required'  => false,
    'class'     => array('form-row-wide'),
    'clear'     => true
     );

     return $fields;
}

add_filter('woocommerce_checkout_fields','custom_override_checkout_fields');

관리자 측에서이 필드 값을 편집해야합니다. 현재 청구 지 주소의 다른 모든 값을 편집 할 수 있지만이 값은 관리자 섹션에 나타나지 않습니다. 나는 admin 섹션의 값을보기 위해 다음 코드 만 사용합니다.

function order_phone_backend($order){
    echo "<p><strong>Billing phone 2:</strong> " . get_post_meta( $order->id, '_billing_phone_new', true ) . "</p><br>";
} 

add_action( 'woocommerce_admin_order_data_after_billing_address', 'order_phone_backend', 10, 1 );

https://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/ 문서를 읽었습니다 . 그러나이 문서에서 올바르게 작동하는 모든 내용은 billing_phone / Phone이 사용자 정의 필드 아래에 있습니다. 화면 옵션을 확인했지만 이미 사용자 정의 필드를 선택했습니다. 다른 사용자 정의 필드 및 해당 값을보고 편집 할 수 있습니다.

백엔드에서이 값을 편집하는 방법 도와주세요 .


질문의 첫 번째 코드 블록은 기본 '전화 번호'필드를 수정합니다. 결제 양식에 새 필드를 추가하지 않습니다. 결제 입력란은 '맞춤 입력란'에서 사용할 수 없으므로 검색하지 마십시오. 청구서 수신 주소 또는 운송 주소에서 필드를 편집하려면 백엔드로 이동하여 주문 목록에서 주문을 클릭하십시오. 그런 다음 '결제 세부 사항'및 '배송 세부 사항'표제 옆에 작은 편집 아이콘이 표시됩니다. 이를 클릭하면 해당 세부 정보를 편집 할 수 있습니다. 이게 도움이 되길 바란다.
Prasad Nevase

지금 내 코드를 확인하십시오
Ron

답변:


22

제공하신 코드가 불완전합니다. 그것이 원하는 것을 달성하기 위해 사용하는 유일한 코드인지 확실하지 않습니다. 따라서 제공 한 첫 번째 코드 블록 외에도 '주문 세부 정보'상자에 백엔드에 새 필드를 표시하고 사용자 정의 필드를 통해 편집 할 수 있도록 나머지 모든 코드를 추가하고 있습니다. 두 번째 코드 블록에서는 필드 키의 이름을로 지정했습니다 _billing_new_phone. _ (밑줄)로 시작하는 사용자 정의 필드 키 이름은 숨겨진 사용자 정의 필드이며 "사용자 정의 필드"아래의 백엔드에 표시되지 않습니다.

/**
 * Process the checkout
 */
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {
    // Check if set, if its not set add an error.
    if ( ! $_POST['billing_phone_new'] )
        wc_add_notice( __( 'Phone 2 is compulsory. Please enter a value' ), 'error' );
}


/**
 * 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 ( ! empty( $_POST['billing_phone_new'] ) ) {
        update_post_meta( $order_id, 'billing_phone_new', sanitize_text_field( $_POST['billing_phone_new'] ) );
    }
}


/**
 * 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){
    echo '<p><strong>'.__('Phone 2').':</strong> <br/>' . get_post_meta( $order->get_id(), 'billing_phone_new', true ) . '</p>';
}

WooCommerce는 표준 '주문 세부 사항'상자에서 새 결제 필드를 편집 할 수 없도록합니다. 해당 상자에서 '보기 전용'모드로 사용할 수 있지만 WordPress의 표준 사용자 정의 필드 블록을 통해 동일하게 편집 할 수 있습니다. 아래 스크린 샷을 참조하십시오.

여기에 이미지 설명을 입력하십시오


""_ (밑줄)으로 시작하는 모든 사용자 정의 필드 키 이름은 숨겨진 사용자 정의 필드이며 "사용자 정의 필드"아래의 백엔드에 표시되지 않습니다. ""이 정보를 어디서 얻을 수 있습니까?
Ron

2
워드 프레스 코덱에서. 더 많은 정보를 얻을
Prasad Nevase

친구 질문을 해결하도록 도와주세요 stackoverflow.com/questions/49505056/…
Ron

필자의 경우 get_post_meta ($ order-> get_id (), '_billing_phone_new', true)를 사용하여 결과를 얻었습니다. get_post_meta 함수에서 변수 이름 앞에 밑줄을 붙여야했습니다.
Dashrath

1

해결책은 다음과 같습니다. 직접 제품 데이터에 액세스 할 수 없습니다. 예 :

$product->id

앞으로 올바른 방법은 다음과 같습니다.

$product->get_id()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.