Як відобразити користувацьке поле у ​​замовленнях на комерційну мережу на панелі адміністратора?


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-action-and-filters/ . Але все, що в цьому документі працює правильно, очікуйте, що billing_phone / Phone - це примітка, див. Я перевіряю параметр екрана, але я вже поставив спеціальне поле. Інше користувацьке поле та його значення можна побачити та редагувати.

Як я можу редагувати це значення у зворотному кінці. Будь ласка, допоможіть .


Перший блок коду у вашому запитанні змінює поле "Телефон ні" за замовчуванням. Це не додає жодного нового поля до форми оформлення замовлення. Поля оформлення замовлення не будуть доступні в розділі "Спеціальні поля", тому не шукайте їх там. Якщо ви хочете відредагувати будь-яке поле з адреси рахунків або адреси доставки, перейдіть до бекенда та натисніть будь-яке замовлення у списку замовлень. Потім ви побачите невеликий значок редагування, окрім заголовків "Інформація про виставлення рахунків" та "Інформація про доставку". Натиснувши на це, ви зможете редагувати ці дані. Я сподіваюся, що це допомагає.
Прасад Невасе

Будь ласка, перевірте мій код зараз
Рон,

Відповіді:


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. Ви можете отримати більше інформації тут
Prasad Nevase

Будь ласка helpt вирішити мій друг питання stackoverflow.com/questions/49505056 / ...
Рон

у моєму випадку я отримав результати, використовуючи get_post_meta ($ order-> get_id (), '_billing_phone_new', true). Я повинен був поставити підкреслення перед іменем змінної у функції get_post_meta.
Dashrath

1

Ось таке рішення: Доступ до даних про продукт заборонено, наприклад, наприклад

$product->id

Правильний метод, що рухається вперед:

$product->get_id()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.