Mar*_*ner 4 php wordpress checkout orders woocommerce
我不是开发人员,但以某种方式设法将 Woocommerce 自定义字段添加到结帐和订单编辑页面。有类似的问题,但我找不到正确的解决方案。
\n\n自定义字段在管理订单编辑页面中可见,但不显示值,也不会添加到订单电子邮件中。
\n\n我缺少什么?
\n\n请看最后的截图。
\n\n这是所有代码的组合:
\n\n// Woocommerce - Add user custom billing fields\n// =============================================================================\n\nfunction add_woocommerce_admin_billing_fields($billing_fields) {\n $billing_fields[\'billing_birthday\'] = array(\n \'label\' => __(\'Datum rojstva\', \'woocommerce\')\n );\n $billing_fields[\'billing_socialno\'] = array(\n \'label\' => __(\'Dav\xc4\x8dna \xc5\xa1tevilka\', \'woocommerce\')\n );\n\n return $billing_fields;\n}\nadd_filter(\'woocommerce_admin_billing_fields\', \'add_woocommerce_admin_billing_fields\');\n\nfunction add_woocommerce_found_customer_details($customer_data, $user_id, $type_to_load) {\n if ($type_to_load == \'billing\') {\n $customer_data[$type_to_load . \'billing_birthday\'] = get_user_meta($user_id, $type_to_load . \'billing_birthday\', true);\n $customer_data[$type_to_load . \'billing_socialno\'] = get_user_meta($user_id, $type_to_load . \'billing_socialno\', true);\n\n }\n return $customer_data;\n}\nadd_filter(\'woocommerce_found_customer_details\', \'add_woocommerce_found_customer_details\', 10, 3);\n\nfunction add_woocommerce_billing_fields($billing_fields) {\n $billing_fields[\'billing_birthday\'] = array(\n \'type\' => \'tel\',\n \'label\' => __(\'Datum rojstva\'),\n \'value\' => get_post_meta( $order->id, \'billing_birthday\', true ),\n \'placeholder\' => __(\'dd/mm/yyyy\', \'placeholder\'),\n \'pattern\' => __(\'\\d{1,2}/\\d{1,2}/\\d{4}\', \'pattern\' ),\n \'class\' => array(\'form-row-first\'),\n \'required\' => true,\n \'clear\' => true\n\n );\n $billing_fields[\'billing_socialno\'] = array(\n \'type\' => \'tel\',\n \'label\' => __(\'Dav\xc4\x8dna \xc5\xa1tevilka\'),\n \'value\' => get_post_meta( $order->id, \'billing_socialno\', true ),\n \'placeholder\' => _x(\'8-mestna \xc5\xa1tevilka\', \'placeholder\'),\n \'class\' => array(\'form-row-last\'),\n \'required\' => false,\n \'clear\' => true\n );\n\n return $billing_fields;\n}\nadd_filter(\'woocommerce_billing_fields\', \'add_woocommerce_billing_fields\');\n\n//Doda user meta v backend profil\nfunction add_woocommerce_customer_meta_fields($billing_fields) {\n if (isset($billing_fields[\'billing\'][\'fields\'])) {\n $billing_fields[\'billing\'][\'fields\'][\'billing_birthday\'] = array(\n \'label\' => __(\'Datum rojstva\', \'woocommerce\'),\n \'description\' => \'Pa kaj bo kon\xc4\x8dno ratalo memo milo?\'\n );\n $billing_fields[\'billing\'][\'fields\'][\'billing_socialno\'] = array(\n \'label\' => __(\'Dav\xc4\x8dna \xc5\xa1tevilka\', \'woocommerce\'),\n \'description\' => \'\'\n );\n\n }\n return $billing_fields;\n}\nadd_filter(\'woocommerce_customer_meta_fields\', \'add_woocommerce_customer_meta_fields\');\n\nfunction add_woocommerce_order_fields($address, $order) {\n $address[\'billing_birthday\'] = $order->billing_birthday . get_post_meta($order->id, \'_billing_birthday\', true) ;\n $address[\'billing_socialno\'] = $order->billing_socialno;\n return $address;\n}\nadd_filter(\'woocommerce_order_formatted_billing_address\', \'add_woocommerce_order_fields\', 10, 2);\n\nfunction add_woocommerce_formatted_address_replacements($replace, $args) {\n $replace[\'{billing_birthday}\'] = !empty($args[\'billing_birthday\']) ? \'Datum rojstva\' . $args[\'billing_birthday\'] : \'\';\n $replace[\'{billing_socialno}\'] = !empty($args[\'billing_socialno\']) ? \'Dav\xc4\x8dna \xc5\xa1tevilka\' . $args[\'billing_socialno\'] : \'\';\n return $replace;\n}\nadd_filter(\'woocommerce_formatted_address_replacements\', \'add_woocommerce_formatted_address_replacements\', 10, 2);\n\nfunction add_woocommerce_localisation_address_formats($formats) {\n $formats[\'default\'] = $formats[\'default\'] . "\\n{billing_birthday}\\n{billing_socialno}";\n return $formats;\n}\nadd_filter(\'woocommerce_localisation_address_formats\', \'add_woocommerce_localisation_address_formats\', 10, 1);\n\n// Change field type to tel woocommerce checkout\n\nfunction bbloomer_change_checkout_field_input_type() {\necho "<script>document.getElementById(\'billing_postcode\').type = \'tel\';</script>";\necho "<script>document.getElementById(\'billing_birthday\').type = \'tel\';</script>";\n\n}\n\nadd_action( \'woocommerce_after_checkout_form\', \'bbloomer_change_checkout_field_input_type\'); \nRun Code Online (Sandbox Code Playgroud)\n\n订单编辑页面截图
\n\n\n我测试了你的代码,只有一些小错误。您已经非常接近让它按您的预期工作了。所以你应该需要对以下代码进行一些更改:
\n\n1)删除了“值”,因为这个挂钩函数适用于结帐并且不需要值(当您尝试从不存在的订单中获取它们时更不需要值)。
\n\n\n\n\n这将避免隐藏错误,并在客户已填写先前购买\xe2\x80\xa6 中的字段时显示正确的值
\n
// Add custom Checkout billing fields\nadd_filter(\'woocommerce_billing_fields\', \'add_woocommerce_billing_fields\', 20, 1);\nfunction add_woocommerce_billing_fields( $billing_fields ) {\n\n $billing_fields[\'billing_birthday\'] = array(\n \'type\' => \'tel\',\n \'label\' => __(\'Datum rojstva\'),\n \'placeholder\' => __(\'dd/mm/yyyy\', \'placeholder\'),\n \'pattern\' => __(\'\\d{1,2}/\\d{1,2}/\\d{4}\', \'pattern\' ),\n \'class\' => array(\'form-row-first\'),\n \'required\' => true,\n \'clear\' => true\n );\n\n $billing_fields[\'billing_socialno\'] = array(\n \'type\' => \'tel\',\n \'label\' => __(\'Dav\xc4\x8dna \xc5\xa1tevilka\'),\n \'placeholder\' => _x(\'8-mestna \xc5\xa1tevilka\', \'placeholder\'),\n \'class\' => array(\'form-row-last\'),\n \'required\' => false,\n \'clear\' => true\n );\n\n return $billing_fields;\n}\n\n// Change field type to tel for woocommerce checkout\nadd_action( \'woocommerce_after_checkout_form\', \'change_checkout_field_input_type\');\nfunction change_checkout_field_input_type() {\n echo "<script>document.getElementById(\'billing_postcode\').type = \'tel\';</script>";\n echo "<script>document.getElementById(\'billing_birthday\').type = \'tel\';</script>";\n}\nRun Code Online (Sandbox Code Playgroud)\n\n2) 此处的键错误,这就是字段值未显示在管理订单编辑页面中的原因。
\n\n\n\n\n它是
\n\'birthday\'and\'socialno\'而不是\'billing_birthday\'and\'billing_socialno\'。
// Setting custom fields Keys/Labels pairs in admin edit order pages and allow edit this fields correctly.\nadd_filter(\'woocommerce_admin_billing_fields\', \'add_woocommerce_admin_billing_fields\');\nfunction add_woocommerce_admin_billing_fields($billing_fields) {\n $billing_fields[\'birthday\'] = array( \'label\' => __(\'Datum rojstva\', \'woocommerce\') );\n $billing_fields[\'socialno\'] = array( \'label\' => __(\'Dav\xc4\x8dna \xc5\xa1tevilka\', \'woocommerce\') );\n\n return $billing_fields;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n3) 正确获取订单编辑页面中显示的缺失字段值。
\n\n// Get the field values to be displayed in admin Order edit pages\nadd_filter(\'woocommerce_order_formatted_billing_address\', \'add_woocommerce_order_fields\', 10, 2);\nfunction add_woocommerce_order_fields($address, $order ) {\n $address[\'billing_birthday\'] = get_post_meta( $order->get_id(), \'_billing_birthday\', true );\n $address[\'billing_socialno\'] = get_post_meta( $order->get_id(), \'_billing_socialno\', true );\n return $address;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n4)其他未更改的挂钩函数:
\n\n//Doda user meta v backend profil\nadd_filter(\'woocommerce_customer_meta_fields\', \'add_woocommerce_customer_meta_fields\');\nfunction add_woocommerce_customer_meta_fields($fields) {\n if (isset($fields[\'billing\'][\'fields\'])) {\n $fields[\'billing\'][\'billing_birthday\'] = array(\n \'label\' => __(\'Datum rojstva\', \'woocommerce\'),\n \'description\' => \'Pa kaj bo kon\xc4\x8dno ratalo memo milo?\'\n );\n $fields[\'billing\'][\'billing_socialno\'] = array(\n \'label\' => __(\'Dav\xc4\x8dna \xc5\xa1tevilka\', \'woocommerce\'),\n \'description\' => \'\'\n );\n }\n return $fields;\n}\n\nadd_filter( \'woocommerce_found_customer_details\', \'add_woocommerce_found_customer_details\', 10, 3);\nfunction add_woocommerce_found_customer_details($customer_data, $user_id, $type_to_load) {\n if ($type_to_load == \'billing\') {\n $customer_data[$type_to_load . \'billing_birthday\'] = get_user_meta($user_id, $type_to_load . \'billing_birthday\', true);\n $customer_data[$type_to_load . \'billing_socialno\'] = get_user_meta($user_id, $type_to_load . \'billing_socialno\', true);\n\n }\n return $customer_data;\n}\n\n//add_filter(\'woocommerce_formatted_address_replacements\', \'add_woocommerce_formatted_address_replacements\', 10, 2);\nfunction add_woocommerce_formatted_address_replacements($replace, $args) {\n $replace[\'{billing_birthday}\'] = !empty($args[\'billing_birthday\']) ? \'Datum rojstva\' . $args[\'billing_birthday\'] : \'\';\n $replace[\'{billing_socialno}\'] = !empty($args[\'billing_socialno\']) ? \'Dav\xc4\x8dna \xc5\xa1tevilka\' . $args[\'billing_socialno\'] : \'\';\n return $replace;\n}\n\nadd_filter(\'woocommerce_localisation_address_formats\', \'add_woocommerce_localisation_address_formats\', 10, 1);\nfunction add_woocommerce_localisation_address_formats($formats) {\n $formats[\'default\'] = $formats[\'default\'] . "\\n{billing_birthday}\\n{billing_socialno}";\n return $formats;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n代码位于活动子主题(或活动主题)的 function.php 文件中。
\n\n电子邮件通知- 显示自定义字段(及其标签)。
\n\nemails/email-addresses.php通过您的活动子主题覆盖 Woocommerce 模板:
\n\n\n可以通过从以下位置复制来覆盖此模板:
\nplugin/woocommerce/templates/emails/email-addresses.php
\n 到yourtheme/woocommerce/emails/email-addresses.php\xe2\x80\xa6
\n 官方文档:模板结构和通过主题覆盖模板
您将在第 34 行之后 (就在计费电话之后)插入以下内容:
\n\n<?php\n // Billing birthday\n $billing_birthday = get_post_meta($order->get_id(), \'_billing_birthday\', true );\n echo $billing_birthday ? \'<br/>\'.__(\'Datum rojstva\', \'woocommerce\').\': \'.$billing_birthday : \'\';\n\n // Billing socialno\n $billing_socialno = get_post_meta($order->get_id(), \'_billing_socialno\', true );\n echo $billing_socialno ? \'<br/>\'.__(\'Dav\xc4\x8dna \xc5\xa1tevilka\', \'woocommerce\').\': \'.$billing_socialno : \'\';\n?>\nRun Code Online (Sandbox Code Playgroud)\n\n经过测试并有效。
\n| 归档时间: |
|
| 查看次数: |
5125 次 |
| 最近记录: |