WordPress教程

给WooCommerce订单添加自定义字段并添加到管理员通知邮件

阿里云

给 WooCommerce 的订单页面添加自定义字段其实这也算是一个常见需求,有些人喜欢一碰到这类需求就找插件实现,其实大可不必。在 WordPress 里面找对钩子,添加对应的代码段就行了。

今天刚完成一个小需求如下:在 WooCommerce 的 Checkout 页面增加一个了解用户渠道的下拉字段,并且如果选了”Others”选项,会再多出现一个文本字段。下拉字段为必填,多出的文本字段为可选,效果如图:

直接上代码,要点都在注释中了:

也想出现在这里?联系我们
创客主机
  1. <?php
  2. //增加checkout页面字段
  3. add_action('woocommerce_after_order_notes', 'brain1981_custom_checkout_field');
  4. //如果想在左侧那一列显示此字段,就要换成下面这个钩子:
  5. //add_action('woocommerce_after_checkout_billing_form', 'brain1981_custom_checkout_field');
  6. function brain1981_custom_checkout_field($checkout){
  7. 	woocommerce_form_field('alivecor_referral_channel', array(
  8. 		'type' => 'select',
  9. 		'label' => __('Through which channel did you know our product?' ),
  10. 		'placeholder' => __('Please Select' ),
  11. 		'required'	=> true,
  12. 		'options' => array(
  13. 			''		=> __('Please Select' ),
  14. 			'Doctor referral' => __('Doctor referral' ),
  15. 			'Friend referral' => __('Friend referral' ),
  16. 			'Online advertisement' => __('Online advertisement' ),
  17. 			'Offline advertisement' => __('Offline advertisement' ),
  18. 			'News' => __('News' ),
  19. 			'Others' => __('Others' )
  20. 			)
  21. 		),
  22. 		$checkout->get_value('alivecor_referral_channel')
  23. 	);
  24. 	echo "<div id='channelOther'>";
  25. 	woocommerce_form_field('alivecor_referral_channel_other', array(
  26. 		'type' => 'text',
  27. 		'label' => __('Others' ),
  28. 		'placeholder' => __('Please fill the channel' ),
  29. 		'required'	=> false,
  30. 		),
  31. 		$checkout->get_value('alivecor_referral_channel_other')
  32. 	);
  33. 	echo "</div>";
  34. 	?>
  35. <script>
  36. //额外字段的显示控制
  37. $(function(){
  38. 	$("#channelOther").hide();
  39. 	$("#alivecor_referral_channel").on("change",function(){
  40. 		if( $(this).val()=="Others" ) $("#channelOther").show();
  41. 		else $("#channelOther").hide();
  42. 	})
  43. })
  44. </script>
  45. 	<?php
  46. }
  47.  
  48. //如果必填的那个下拉菜单没有选择,提交的时候给出一条报错提醒用户选一下,WooCommerce自己会高亮提示这个选项
  49. add_action('woocommerce_checkout_process', 'brain1981_customised_checkout_field_process');
  50. function brain1981_customised_checkout_field_process(){
  51. 	if (empty( $_POST['alivecor_referral_channel'] ))
  52. 		wc_add_notice( __('Please select a channel you know us trough.' ), 'error' );
  53. }
  54.  
  55. //保存这两个值
  56. add_action( 'woocommerce_checkout_update_order_meta', 'brain1981_save_custom_checkout_field' );
  57. function brain1981_save_custom_checkout_field( $order_id ){
  58. 	if( !empty( $_POST['alivecor_referral_channel'] ) )
  59. 		update_post_meta( $order_id, 'alivecor_referral_channel', sanitize_text_field( $_POST['alivecor_referral_channel'] ) );
  60. 	if( !empty( $_POST['alivecor_referral_channel_other'] ) &&  $_POST['alivecor_referral_channel']=="Others" )
  61. 		update_post_meta( $order_id, 'alivecor_referral_channel_other', sanitize_text_field( $_POST['alivecor_referral_channel_other'] ) );
  62. }
  63.  
  64. //在订单提交的管理员通知邮件中添加显示这两个只
  65. //这里其实可以举一反三增加更多内容
  66. add_filter( 'woocommerce_email_order_meta_fields', 'brain1981_email_order_meta_fields', 10, 3 );
  67. function brain1981_email_order_meta_fields( $fields, $sent_to_admin, $order ) {
  68. 	$fields['alivecor_referral_channel'] = array(
  69. 				'label' => __( 'Channel' ),
  70. 				'value' => $order->get_meta( 'alivecor_referral_channel' ),
  71. 		);
  72. 	$fields['alivecor_referral_channel_other'] = array(
  73. 				'label' => __( 'Other Channel' ),
  74. 				'value' => $order->get_meta( 'alivecor_referral_channel_other' ),
  75. 		);
  76. 	return $fields;
  77. }
  78.  
  79. //在管理员后台订单详细页面也显示一下
  80. add_action( 'woocommerce_admin_order_data_after_order_details', 'brain_display_order_data_in_admin' );
  81. function brain_display_order_data_in_admin( $order ){  ?>
  82.     <div class="order_data_column">
  83.         <h4><?php _e( 'Extra Order Details', 'woocommerce' ); ?></h4>
  84.         <?php 
  85.             echo '<p><strong>' . __( 'Channel' ) . ':</strong> ' . $order->get_meta( 'alivecor_referral_channel' ) . '</p>';
  86.             echo '<p><strong>' . __( 'Other Channel' ) . ':</strong> ' . $order->get_meta( 'alivecor_referral_channel_other' ) . '</p>'; ?>
  87.     </div>
  88. <?php } ?>

给 WooCommerce 订单添加自定义字段并添加到管理员通知邮件

已有 267 人购买
查看演示升级 VIP立刻购买

收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!