Отображение значения пользовательского поля оформления заказа на страницах заказа администратора Woocommerce - PullRequest
0 голосов
/ 12 ноября 2018

В Woocommerce я использовал Добавить новое настраиваемое поле оформления заказа перед выставлением счетов в Woocommerce? от @LoicTheAztec, который отлично работает.

У меня проблемы с отображением информации на странице заказа администратора.

Затем я попытался с помощью Добавить метаданные заказа в обзор заказов администратора WooCommerce , внеся в код некоторые изменения, соответствующие моим потребностям:

// display the extra data in the order admin panel
function kia_display_order_data_in_admin( $order ){  ?>
    <div class="order_data_column">
        <h4><?php _e( 'Extra Details' ); ?></h4>
        <?php 
            echo '<p><strong>' . __( 'Some field' ) . ':</strong>' . get_post_meta( $order->id, '_my_field_name', true ) . '</p>';?>
    </div>
<?php }
add_action( 'woocommerce_admin_order_data_after_order_details', 'kia_display_order_data_in_admin' );?>

Дополнительные сведения и Некоторое поле: появляется, но значение настраиваемого поля не отображается.

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

1 Ответ

0 голосов
/ 12 ноября 2018

Обновление 3: Попробуйте следующий слегка обновленный код:

add_action( 'woocommerce_checkout_before_customer_details', 'custom_checkout_fields_before_billing_details', 20 );
function custom_checkout_fields_before_billing_details(){
    $domain = 'woocommerce';
    $checkout = WC()->checkout;

    echo '<div id="my_custom_checkout_field">';

    echo '<h3>' . __('My New Fields Section') . '</h3>';

    woocommerce_form_field( '_my_field_name', array(
        'type'          => 'text',
        'label'         => __('My 1st new field', $domain ),
        'placeholder'   => __('Please fill in "my 1st new field"', $domain ),
        'class'         => array('my-field-class form-row-wide'),
        'required'      => true, // or false
        ), $checkout->get_value( '_my_field_name' ));

    echo '</div>';
}

// Custom checkout fields validation
add_action( 'woocommerce_checkout_process', 'custom_checkout_field_process' );
function custom_checkout_field_process() {
    if ( isset($_POST['_my_field_name']) && empty($_POST['_my_field_name']) )
        wc_add_notice( __( 'Please fill in "My 1st new field".' ), 'error' );
}

// Save custom checkout fields the data to the order
add_action( 'woocommerce_checkout_create_order', 'custom_checkout_field_update_meta', 10, 2 );
function custom_checkout_field_update_meta( $order, $data ){
    if( isset($_POST['_my_field_name']) && ! empty($_POST['_my_field_name']) )
        $order->update_meta_data( '_my_field_name', sanitize_text_field( $_POST['_my_field_name'] ) );
}

// Display the extra data in the order admin panel
add_action( 'woocommerce_admin_order_data_after_order_details', 'display_order_data_in_admin', 10, 1 );
function display_order_data_in_admin( $order ){
    if( $value = $order->get_meta( '_my_field_name' ) ) {
        echo '<div class="order_data_column">
        <h4>' . __( "Extra Details", "woocommerce" ) . '</h4>
        <p><strong>' . __( 'Some field', "woocommerce" ) . ':</strong> ' . $value . '</p>
        </div>';
    }
}

Код помещается в файл function.php вашей активной дочерней темы (active theme). Проверено и работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...