У меня есть следующий код, который добавляет настраиваемое поле для оформления заказа для определенного продукта, добавляет его на страницу нового заказа, отправляет его в электронном письме о новом заказе и показывает на странице благодарности за заказ.
// Utility function: Delivery partner options (array)
function get_delivery_partner_options() {
return array(
'' => __('---Please select your Delivery Partner', 'woocommerce'),
'1' => __('Learners University College (LUC), Dubai', 'woocommerce' ),
'2' => __('Elite Training Services (ECS), KSA ', 'woocommerce' ),
'3' => __('MELI, KSA', 'woocommerce' ),
'4' => __('KLD Management Training, Dubai', 'woocommerce' ),
);
}
// Display "Delivery Partner" custom checkout field
add_action( 'woocommerce_after_checkout_billing_form', 'my_custom_checkout_field', 10, 1 );
function my_custom_checkout_field( $checkout ) {
$targeted_product_id = 6245; //Global Membership ID
foreach( WC()->cart->get_cart() as $item ){
if ( ! in_array($targeted_product_id, [$item['product_id'], $item['variation_id']]) ) {
return; // Exit if there are other products in cart than the targeted one.
}
}
echo '
' . __('Please select your Delivery Partner', 'woocommerce') . '';
woocommerce_form_field( 'delivery_partner', array(
'type' => 'select',
'required' => 'true',
'options' => get_delivery_partner_options(),
'class' => array('my-field-class form-row-wide'),
'label' => __('Delivery Partner', 'woocommerce'),
), $checkout->get_value( 'delivery_partner' ));
echo '';
}
// Validate delivery partner field
add_action( 'woocommerce_checkout_process', 'custom_checkout_field_validation' );
function custom_checkout_field_validation() {
$field_key = 'delivery_partner';
if ( isset($_POST[$field_key]) && empty($_POST[$field_key]) ) {
wc_add_notice( __('[b]'.__('Delivery Partner', 'woocommerce').'[/b] is a required field.', 'woocommerce'),'error' );
}
}
// Save the selected delivery partner as order custom metadata:
add_action( 'woocommerce_checkout_create_order', 'save_selected_delivery_partner' );
function save_selected_delivery_partner( $order ) {
$field_key = 'delivery_partner';
$options = get_delivery_partner_options();
if ( isset($_POST[$field_key]) && ! empty($_POST[$field_key]) ) {
$order->update_meta_data( 'delivery_partner', esc_attr($options[$field_key]) );
}
}
// Display the custom field value on admin order pages after billing adress:
add_action( 'woocommerce_admin_order_data_after_billing_address', 'display_selected_delivery_partner_in_admin_orders', 10, 1 );
function display_selected_delivery_partner_in_admin_orders( $order ) {
if ( $delivery_partner = $order->get_meta('delivery_partner') ) {
echo '
[b]'.__('Delivery Partner', 'woocommerce').':[/b] ' . $delivery_partner . '
';
}
}
// Display on customer orders and email notifications
add_filter( 'woocommerce_get_order_item_totals', 'display_delivery_on_order_item_totals', 10, 3 );
function display_delivery_on_order_item_totals( $total_rows, $order, $tax_display ) {
if ( $delivery_partner = $order->get_meta('delivery_partner') ) {
$new_total_rows = [];
// Loop through order total rows
foreach( $total_rows as $key => $values ) {
// Inserting before payment method
if( $key === 'payment_method' ) {
$new_total_rows['gift_order'] = array(
'label' =>__('Delivery Partner', 'woocommerce') . ':',
'value' => $delivery_partner,
);
}
$new_total_rows[$key] = $values;
}
return $new_total_rows;
}
return $total_rows;
}
Кажется, все работает нормально, за исключением того, что если я использую купон на 100 % скидку (то есть цена составляет 0 фунтов стерлингов), он не отображается на экране благодарности за заказ. / электронная почта.
На этих изображениях вы увидите, что партнер по доставке не отображается, когда применяется купон на 100 % скидку, а не при его оплате/наложенным платежом.
У меня есть следующий код, который добавляет настраиваемое поле для оформления заказа для определенного продукта, добавляет его на страницу нового заказа, отправляет его в электронном письме о новом заказе и показывает на странице благодарности за заказ. [code]// Utility function: Delivery partner options (array) function get_delivery_partner_options() { return array( '' => __('---Please select your Delivery Partner', 'woocommerce'), '1' => __('Learners University College (LUC), Dubai', 'woocommerce' ), '2' => __('Elite Training Services (ECS), KSA ', 'woocommerce' ), '3' => __('MELI, KSA', 'woocommerce' ), '4' => __('KLD Management Training, Dubai', 'woocommerce' ), ); }
// Display "Delivery Partner" custom checkout field add_action( 'woocommerce_after_checkout_billing_form', 'my_custom_checkout_field', 10, 1 ); function my_custom_checkout_field( $checkout ) {
$targeted_product_id = 6245; //Global Membership ID
foreach( WC()->cart->get_cart() as $item ){ if ( ! in_array($targeted_product_id, [$item['product_id'], $item['variation_id']]) ) { return; // Exit if there are other products in cart than the targeted one. } }
// Validate delivery partner field add_action( 'woocommerce_checkout_process', 'custom_checkout_field_validation' ); function custom_checkout_field_validation() { $field_key = 'delivery_partner'; if ( isset($_POST[$field_key]) && empty($_POST[$field_key]) ) { wc_add_notice( __('[b]'.__('Delivery Partner', 'woocommerce').'[/b] is a required field.', 'woocommerce'),'error' ); } }
// Save the selected delivery partner as order custom metadata: add_action( 'woocommerce_checkout_create_order', 'save_selected_delivery_partner' ); function save_selected_delivery_partner( $order ) { $field_key = 'delivery_partner'; $options = get_delivery_partner_options(); if ( isset($_POST[$field_key]) && ! empty($_POST[$field_key]) ) { $order->update_meta_data( 'delivery_partner', esc_attr($options[$field_key]) ); } }
// Display the custom field value on admin order pages after billing adress: add_action( 'woocommerce_admin_order_data_after_billing_address', 'display_selected_delivery_partner_in_admin_orders', 10, 1 ); function display_selected_delivery_partner_in_admin_orders( $order ) { if ( $delivery_partner = $order->get_meta('delivery_partner') ) { echo ' [b]'.__('Delivery Partner', 'woocommerce').':[/b] ' . $delivery_partner . ' '; } }
// Display on customer orders and email notifications add_filter( 'woocommerce_get_order_item_totals', 'display_delivery_on_order_item_totals', 10, 3 ); function display_delivery_on_order_item_totals( $total_rows, $order, $tax_display ) { if ( $delivery_partner = $order->get_meta('delivery_partner') ) { $new_total_rows = [];
// Loop through order total rows foreach( $total_rows as $key => $values ) { // Inserting before payment method if( $key === 'payment_method' ) { $new_total_rows['gift_order'] = array( 'label' =>__('Delivery Partner', 'woocommerce') . ':', 'value' => $delivery_partner, ); } $new_total_rows[$key] = $values; } return $new_total_rows; } return $total_rows; } [/code] Кажется, все работает нормально, за исключением того, что если я использую купон на 100 % скидку (то есть цена составляет 0 фунтов стерлингов), он не отображается на экране благодарности за заказ. / электронная почта. На этих изображениях вы увидите, что партнер по доставке не отображается, когда применяется купон на 100 % скидку, а не при его оплате/наложенным платежом. [img]https://i.sstatic.net/2HOCzyM6.png[/img]
У меня есть следующий код, который добавляет настраиваемое поле для оформления заказа для определенного продукта, добавляет его на страницу нового заказа и отправляет его в электронном письме о новом заказе.
add_action(...
У меня есть следующий код, который добавляет настраиваемое поле для оформления заказа для определенного продукта, добавляет его на страницу нового заказа и отправляет его в электронном письме о новом заказе.
add_action(...
У меня есть следующий код, который добавляет настраиваемое поле для оформления заказа для определенного продукта, добавляет его на страницу нового заказа, отправляет его в электронном письме о новом заказе и показывает на странице благодарности за...
У меня есть несколько пользовательских полей проверки WooCommerce в виде раскрывающихся меню. Я хочу, чтобы любые параметры, выбранные в этих раскрывающихся списках, отображались в деталях заказа на стороне администратора, а также в электронных...
У меня есть этот код в моем function.php, как я могу отобразить значение этого поля в почтовом заказе администратора? Спасибо!
//1.1 Поле отображения в админке add_action('woocommerce_product_options_inventory_product_data',...