카테고리 보관물: wordpress

워드프레스

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

현재 나는 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이 사용자 정의 필드 아래에 있습니다. 화면 옵션을 확인했지만 이미 사용자 정의 필드를 선택했습니다. 다른 사용자 정의 필드 및 해당 값을보고 편집 할 수 있습니다.

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



답변

제공하신 코드가 불완전합니다. 그것이 원하는 것을 달성하기 위해 사용하는 유일한 코드인지 확실하지 않습니다. 따라서 제공 한 첫 번째 코드 블록 외에도 ‘주문 세부 정보’상자에 백엔드에 새 필드를 표시하고 사용자 정의 필드를 통해 편집 할 수 있도록 나머지 모든 코드를 추가하고 있습니다. 두 번째 코드 블록에서는 필드 키의 이름을로 지정했습니다 _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의 표준 사용자 정의 필드 블록을 통해 동일하게 편집 할 수 있습니다. 아래 스크린 샷을 참조하십시오.


답변

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

$product->id

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

$product->get_id()

답변