Добавьте пользовательское поле в оформление заказа и отобразите его на страницах заказа администратора WooCommerce. - PullRequest
1 голос
/ 20 апреля 2020

В WooCommerce я пытаюсь добавить настраиваемое поле для оформления покупки, используя «Настройка полей оформления покупки с помощью действий и фильтров» официальная документация. Я вижу поле, и оно работает хорошо, но проблема в том, что я пытаюсь увидеть информацию, введенную клиентом, в панели администратора.

Я использую , просто показываю хуки , чтобы посмотреть, какие хуки запущены и так далее. И я не вижу woocommerce_admin_order_data_after_shipping_address стрельбы. Что мне не хватает ?! Вот мой код в functions.php файле:

add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );

// Our hooked in function - $fields is passed via the filter!
function custom_override_checkout_fields( $fields ) {
     unset($fields['billing']['billing_address_2']);
     unset($fields['shipping']['shipping_address_2']);
          $fields['billing']['shipping_time'] = array(
            'type' => 'select',
        'label'     => __('Laikas', 'woocommerce'),
    'placeholder'   => _x('Laikas', 'placeholder', 'woocommerce'),
    'required'  => true,
    'class'     => array('form-row-wide'),
    'clear'     => true,
    'options' => array(
        'option_1' => 'nesvarbu',
        'option_2' => '8-12',
        'option_3' => '12-16',
        'option_4' => '16-20'
        )
     );


     return $fields;
}

add_action( 'woocommerce_admin_order_data_after_shipping_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );

function my_custom_checkout_field_display_admin_order_meta($order){
    global $post_id;
    $order = new WC_Order( $post_id );
    echo '<p><strong>'.__('Laikas').':</strong> ' . get_post_meta($order->get_id(), '_shipping_ftime', true ) . '</p>';
}

1 Ответ

0 голосов
/ 20 апреля 2020

enter image description here

add_filter( 'woocommerce_checkout_fields', 'custom_override_checkout_fields' );

// Our hooked in function - $fields is passed via the filter!
function custom_override_checkout_fields( $fields ) {
    unset( $fields[ 'billing' ][ 'billing_address_2' ] );
    unset( $fields[ 'shipping' ][ 'shipping_address_2' ] );
    $fields[ 'billing' ][ 'shipping_time' ] = array(
        'type'           => 'select',
        'label'          => __( 'Laikas', 'woocommerce' ),
        'placeholder'    => _x( 'Laikas', 'placeholder', 'woocommerce' ),
        'required'       => true,
        'class'          => array( 'form-row-wide' ),
        'clear'          => true,
        'options'        => array(
            'option_1'   => 'nesvarbu',
            'option_2'   => '8-12',
            'option_3'   => '12-16',
            'option_4'   => '16-20'
        )
    );


    return $fields;
}

add_action( 'woocommerce_admin_order_data_after_shipping_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );

function my_custom_checkout_field_display_admin_order_meta( $order ) {
    global $post_id;
    $order = new WC_Order( $post_id );
    $options         = array(
            'option_1'   => 'nesvarbu',
            'option_2'   => '8-12',
            'option_3'   => '12-16',
            'option_4'   => '16-20'
        );
    echo '<p><strong>' . __( 'Laikas' ) . ':</strong> ' . $options[get_post_meta( $order->get_id(), '_shipping_time', true )] . '</p>';
}

Пожалуйста, попробуйте этот фрагмент.

...