Помогите, пожалуйста, с woocommerce.
При оплате заказа, под выбранным пунктом доставки нужно вывести поле, где клиент будет указывать время (текстом).
Это поле должно отправляться на почту с другими данными заказа.
add_action( 'woocommerce_after_shipping_rate', 'carrier_custom_fields', 20, 2 );
function carrier_custom_fields( $method, $index ) {
if( ! is_checkout()) return; // Only on checkout page
$customer_carrier_method = 'local_pickup:2';
if( $method->id != $customer_carrier_method ) return; // Only display for "local_pickup"
$chosen_method_id = WC()->session->chosen_shipping_methods[ $index ];
// Если выбран метод доставки "самовывоз", показываем:
if($chosen_method_id == $customer_carrier_method ):
echo '<div class="custom-carrier">';
woocommerce_form_field( 'carrier_name' , array(
'type' => 'text',
'class' => array('form-row-wide carrier-name'),
'label' => 'Время самовывоза:',
'required' => false,
), WC()->checkout->get_value( 'carrier_name' ));
echo '</div>';
endif;
}
// Валидация поля
add_action('woocommerce_checkout_process', 'carrier_checkout_process');
function carrier_checkout_process() {
if( isset( $_POST['carrier_name'] ) && empty( $_POST['carrier_name'] ) )
wc_add_notice( ( "Пожалуйста, введите время самовывоза" ), "error" );
}
add_action( 'woocommerce_checkout_update_order_meta', 'carrier_update_order_meta', 30, 1 );
function carrier_update_order_meta( $order_id ) {
if( isset( $_POST['carrier_name'] ))
update_post_meta( $order_id, '_carrier_name', sanitize_text_field( $_POST['carrier_name'] ) );
}
Поле появляется, но страница после отправки заказа — выдает ошибку.
Добавлял ключи, тоже не помогло.
add_action( 'woocommerce_admin_order_data_after_shipping_address', 'custom_field_display_admin_order_meta', 10, 1 );
function custom_field_display_admin_order_meta($order){
echo '<p><strong>'.__('Время самовывоза').':</strong> ' . get_post_meta( $order->id, '_carrier_name', true ) . '</p>';
}
// Выводим значения полей в шаблоне письма с заказом
add_filter('woocommerce_email_order_meta_keys', 'email_checkout_field_order_meta_keys');
function email_checkout_field_order_meta_keys( $keys ) {
$keys['Время самовывоза'] = '_carrier_name';
return $keys;
}
Как можно пофиксить эту ошибку? Заказ оформляется в админке, но уведомления на почту не приходят