Как отобразить пользовательское поле в заказах 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');

мне нужно отредактировать значение этого поля на стороне администратора. В настоящее время я могу редактировать все другие значения в адресе выставления счета, но это значение не отображается в разделе администратора. Я использую следующий код только для того, чтобы увидеть значение в разделе администратора.

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 см. В разделе «Пользовательское поле». Я проверяю опцию экрана, но я уже поставил галочку в произвольном поле. Другое настраиваемое поле и его значение отображаются и редактируются.

Как я могу редактировать это значение в бэк-энде. Пожалуйста помоги .

Рон
источник
Первый блок кода в вашем вопросе изменяет поле «Phone no» по умолчанию. Это не добавляет новое поле в форму заказа. Поля оформления заказа не будут доступны в разделе "Пользовательские поля", поэтому, пожалуйста, не ищите их там. Если вы хотите изменить какое-либо поле из адреса выставления счета или адреса доставки, перейдите в бэкэнд и щелкните любой заказ в списке заказов. Затем вы увидите небольшой значок редактирования, кроме заголовков «Платежная информация» и «Сведения о доставке». Нажав на это, вы сможете редактировать эти детали. Надеюсь, это поможет.
Прасад Невасе
Пожалуйста, проверьте мой код сейчас
Рон

Ответы:

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. Смотрите скриншот ниже.

введите описание изображения здесь

Прасад Невасе
источник
"" Любое имя ключа настраиваемого поля, начинающееся с _ (подчеркивание), является скрытым настраиваемым полем и не будет отображаться в бэкэнде в разделе "Пользовательские поля". откуда вы получаете эту информацию?
Рон
2
На WordPress кодекс. Вы можете получить больше информации здесь
Прасад Невасе
Пожалуйста, помогите решить вопрос моего друга stackoverflow.com/questions/49505056/…
Рон
в моем случае я получил результаты с помощью get_post_meta ($ order-> get_id (), '_billing_phone_new', true). Мне пришлось поставить подчеркивание перед именем переменной в функции get_post_meta.
Dashrath
1

Вот решение: прямой доступ к данным продукта не разрешен, например

$product->id

Правильный метод продвижения вперед:

$product->get_id()
Гаэль
источник