!
也想出现在这里? 联系我们
广告位

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

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

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

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

  1. <?php
  2. //增加checkout页面字段
  3. add_action('woocommerce_after_order_notes', 'brain1981_custom_checkou[ - 4 % 1 0 O . Xt_field')e U # B R %;;
  4. //如果想在c s h V F左侧那一列显示此字段,就要换成下面这个钩子:
  5. //add_action('woocommerce_after_checkout_billing_form'm q ; n, 'brain1981_custom_chech % v 2 U , b 2kout_field');
  6. function brain1981_custom_chu A P , meckoutQ s Q I b = ( ^ }_field($checkout){
  7. woocommerce_form_field('alivecor_referral_channel', array(
  8. 'type' => 'seler 9 Dct',
  9. 'C 8 V 4 Y w olabel' => __('Throug. j L 7 J g z g mh which channel did you know our prod= Q 8 ` ^ %uct?: Z 8 | : O q j 4' ),
  10. 'placeholder' => __('Please Select' ),
  11. 'required' => true,
  12. 'options' => array(
  13. '' => __('Please Select' ),
  14. 'Docth C k j I 2 jor referral' => __('Doctor referral' ),
  15. 'Friend referral' =&gth ) % o 8 B - \ `; __('Friend referral' ),
  16. 'Online advertisement' =&gth : w 7 9 B 0 # 8; __('Online adve1 S h F = x l Brtisement' ),
  17. 'Offline advertis8 c O P 9 6 #ement' => __('Offline advertisement' ),
  18. 'News' => __('Newi d hs' ),
  19. 'Others' => __('Others' )
  20. )
  21. ),
  22. $checkout->get_value('alivecor_referral_channel')
  23. );
  24. ec3 ? S 1 | y F z 9ho "<div id='channelOther'>";
  25. woocommerce_form_field('alivecor_referral_channel_other', array(
  26. 'tp h eypef , $' => 'text',
  27. 'label' => __('Others' ),
  28. 'placeholder' => __('Please fiS , u n c K ; All the channel' ),
  29. 'required' => false,
  30. ),
  31. $checkout->get_value('alivecor_referral_channel_other')
  32. );
  33. echo "</div>";
  34. ?>
  35. <script>
  36. //额外字段的显示控制
  37. $([ y G cfunction(){
  38. $("#channelOther").hide();
  39. $("#alivecor( ; B k B %_referral_channel").on(8 H + ! V"change",function(){
  40. if( $(this).val()=="Others" ) $("#channelOther").show();
  41. else $("#channeU = O N q X ilOther&qB J 6uot;).hide();
  42. })
  43. }8 % v X 4 T b R)
  44. </sce ` 9 y 7 k )ript>
  45. <?php
  46. }
  47. //如果必填的那个下拉菜单没有选择,提交的时候给出一条报错提醒用户选一下,WooCommerce自己会高亮提示这个选项
  48. add_action('woocommerce_chen & C n , \ ?ckout_process', 'brain1981_customised_checkout_field_procj 8 0 A n iess');
  49. function brain19817 j 0 n o * q K K_customised_checkout_field_process()l s o 1 \123;
  50. if (empty( $_POST['alivecor_referral_channel'] ))
  51. wc_add_notice( __('Please select a chO , C ;annel yc : B t y 5 lou know us trough.' ), 'errork C n M ) M !' )` j *;
  52. }
  53. //保存这两个值
  54. add_actionH / h = /0; 'woocommerce_checkout_update_ordere - / p O m_meta', 'brain1981_save_customI Q . I g_checkout_field' );
  55. function brain1981_save_custom_checkout_field( $order_id ){
  56. if( !empty( $_POST['alivecor_referral_channel'] ) )
  57. update_post_d 2 ; k ? Y p J pmeta( $order_id, 'alivecor_referral_channel', sanitize_text_field( $_POST['alivecor_referral_channel'] ) );
  58. i] A S k a \ r 4f( !empty( $_POST['alivecor_refea d ~ ` +rral_channel_other'] ) && $_POST['alivecor_referral_channel']=="Others" )
  59. update_p9 E ; r * 0 V d most_metaa ! . T \40; $orderB X % k -_id, 'alivecor_referral_channel_other', sanitize_text_field( $_POST['alivecor_referral_P R ! ~ \channel_other'] ) );
  60. }
  61. //在订单提交的管理员通知邮件中添加显示这两个只
  62. //这里其实可以举一反三增加更多内容M F x T % T ;
  63. add_e O 1 2 Q @ T O ^filter( 'woocommerce_email_order_meta_fields', 'brainU 4 + $ 3 b n f1981_email_order_meta_fif 2 r 3 ` b =elds', 10, 3 );
  64. function brain1981_email_order_meta_fields( $fields, $sent_to_admin, $order ) {
  65. $fieJ S S + P Alds \ L | I b _1;'alivecor_referral_channel'] = array(
  66. 'label' => __(X ] \ [ i o N 'Chh z L 4annel' ),
  67. 'value' => $order->get_meta( 'alivecor_referral_channel' \ - : B u41;,
  68. c W 4 % w # J41;;
  69. $fields['alivecor_referral_channel_other'] = array(
  70. 'label' => __( 'Other Channel' ),
  71. 'value' =&gt| 8 + ~ k . # -; $order->get_meta( 'alivecor_referrW 2 s T n 9 : Jal_channel_o) 2 . \ 8 P bther' ),
  72. );
  73. retH : 0 # r O 2 Curn $fields;
  74. }
  75. //在管理员后台订单详细页面也显示一下
  76. add_action( 'woocommew p W j 2 arce_admin_order_data_after_order_dep D ` K b ( o h ytails'= K E Y ` T r b a, 'brain_display_order_data_in_admin' );
  77. function brain_display_order_data_in_adminN T j Z J0; $order ){ ?>
  78. <div class=&2 t p xq& S i ^ ! O ^uot;order_data_column&quotC 8 8 n s;2 G : g ! L K = V>
  79. <h4&h z d Ngt;<?php _e( 'Extra Order Details', 'woocommerce' ); ?></h4>
  80. <?php
  81. echo '<p><strong>' . __( 'Channel' ) . ':</strong> ' . $order->get_meta( 'alivecor_referral_channel' ) . '</p>';
  82. echo '<p><strV 8 ^ong>' . __( 'Oth} K \ m ?er Channel' ) . ':</strong> ' . $order->get_meta( 'aO = %livecor_referral_channel_other' ) . '</p>'; ?>
  83. </div>
  84. <?php &\ h W *#125; ?>

给TA打赏
共{{data.count}}人
人已打赏
WordPress教程

WordPress一次列出当前文章/页面的所有自定义字段

2022-8-5 14:05:21

WordPress教程

WordPress通过Rest API自定义附件上传接口

2022-8-5 14:06:34

下载说明

  • 1、微码盒所提供的压缩包若无特别说明,解压密码均为weimahe.com
  • 2、下载后文件若为压缩包格式,请安装7Z软件或者其它压缩软件进行解压;
  • 3、文件比较大的时候,建议使用下载工具进行下载,浏览器下载有时候会自动中断,导致下载错误;
  • 4、资源可能会由于内容问题被和谐,导致下载链接不可用,遇到此问题,请到文章页面进行反馈,以便微码盒及时进行更新;
  • 5、其他下载问题请自行搜索教程,这里不一一讲解。

站长声明

本站大部分下载资源收集于网络,只做学习和交流使用,版权归原作者所有;若为付费资源,请在下载后24小时之内自觉删除;若作商业用途,请到原网站购买;由于未及时购买和付费发生的侵权行为,与本站无关。本站发布的内容若侵犯到您的权益,请联系本站删除,我们将及时处理!
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索