Php 订单自定义字段未显示在WooCommerce电子邮件通知上
我编写了一个小插件,在结帐页面上添加了几个自定义字段。这些字段与B2B买家相关,因此他们可以输入公司名称、许可证号码和地址 一切都很好,除了值没有显示在订单电子邮件中,最重要的是,订单完成的电子邮件 这是我遇到麻烦的代码部分Php 订单自定义字段未显示在WooCommerce电子邮件通知上,php,wordpress,woocommerce,checkout,custom-fields,Php,Wordpress,Woocommerce,Checkout,Custom Fields,我编写了一个小插件,在结帐页面上添加了几个自定义字段。这些字段与B2B买家相关,因此他们可以输入公司名称、许可证号码和地址 一切都很好,除了值没有显示在订单电子邮件中,最重要的是,订单完成的电子邮件 这是我遇到麻烦的代码部分 add_filter('woocommerce_email_order_meta_fields', 'mx_woocommerce_email_order_meta_fields'); function mx_woocommerce_email_order_meta_fi
add_filter('woocommerce_email_order_meta_fields', 'mx_woocommerce_email_order_meta_fields');
function mx_woocommerce_email_order_meta_fields( $fields ) {
if (isset($_POST['r1_checkbox']) && !empty($_POST['r1_checkbox'])) {
echo '<h2>R1 račun za kupca</h2>';
$fields[] = 'Ime tvrtke';
$fields[] = 'Adresa tvrtke';
$fields[] = 'OIB tvrtke';
return $fields;
}
}
请注意,
r1\u checkbox
只是一个复选框,用于切换其下的3个字段。您的代码有一些小错误,我已经对其进行了修改
我还更改了一个不推荐使用的钩子:
bywoocommerce\u email\u order\u meta\u key
woocommerce\u checkout\u create\u order
bywoocommerce\u checkout\u update\u order\u meta
woocommerce\u email\u order\u meta\u字段
/**
*让我们将新字段添加到签出
*/
函数mx_自定义_签出_字段($checkout){
回音'.''。''('Pravne osobe')。Trebate li R1 račun?
;
woocommerce\u表单\u字段('r1\u复选框',数组(
'键入'=>'复选框',
'class'=>array('r1 checkbox form row-wide'),
“label'=>”(“Da”),
),$checkout->get_值('r1_复选框');
woocommerce\u form\u字段('r1\u ime\u tvrtke',数组(
'类型'=>'文本',
'class'=>数组('r1文本格式行宽'),
“label'=>”(“Ime-tvrtke”),
“占位符”=>ux('Upišite ime tvrtke','placeholder','woocommerce'),
),$checkout->get_value('r1_ime_tvrtke');
woocommerce_form_字段('r1_adresa_tvrtke',数组(
'类型'=>'文本',
'class'=>数组('r1文本格式行宽'),
“label”=>(“Adresa tvrtke”),
“占位符”=>ux('Upišite adresu tvrtke','placeholder','woocommerce'),
),$checkout->get_value('r1_adresa_tvrtke');
woocommerce_表单_字段('r1_oib_tvrtke',数组(
'类型'=>'文本',
'class'=>数组('r1文本格式行宽'),
“标签”=>(“OIB tvrtke”),
“占位符”=>ux('Upišite OIB tvrtke','placeholder','woocommerce'),
),$checkout->get_value('r1_oib_tvrtke');
回声';
}
添加\过滤器('woocommerce\在\结帐\账单\表单之后,'mx\自定义\结帐\字段',10,1);
/**
*让我们节约
**/
函数mx_oib_签出_字段_创建_订单($order,$data){
//检查$\u POST是否有我们的自定义字段,并相应地更新此订单的meta
if(设置($_POST['r1\u checkbox'])和&!空($_POST['r1\u checkbox'])){
$order->update_meta_数据('r1_checkbox',清理_text_字段($_POST['r1_checkbox']);
}
如果(设置($_POST['r1\u ime\u tvrtke'])和&!空($_POST['r1\u ime\u tvrtke'])){
$order->update_meta_data('r1_ime_tvrtke',sanitize_text_字段($_POST['r1_ime_tvrtke'));
}
如果(设置($_POST['r1\u adresa\u tvrtke'])和&!空($_POST['r1\u adresa\u tvrtke'])){
$order->update_meta_data('r1_adresa_tvrtke',sanitize_text_字段($_POST['r1_adresa_tvrtke'));
}
如果(设置($_POST['r1_oib_tvrtke'])和&!空($_POST['r1_oib_tvrtke'])){
$order->update_meta_data('r1_oib_tvrtke',sanitize_text_字段($_POST['r1_oib_tvrtke'));
}
}
添加操作('woocommerce\u checkout\u create\u order'、'mx\u oib\u checkout\u field\u create\u order',10,2);
/**
*让我们在账单地址后的订单编辑页面上显示字段值
*/
功能mx_oib_签出_字段_显示_管理_订单_元($order){
$r1\u checkbox=$order->get\u meta('r1\u checkbox');
如果($r1\u复选框){
回音“.uur1(“račun”)”;
回显“”。(Ime-tvrtke'):”。$order->get-meta(“r1-Ime-tvrtke”)。;
回音“”。(Adresa tvrke'):“$order->get_meta('r1_Adresa_tvrtke')。”;
回显“”。(OIB电视节目”):“$order->get_meta('r1_OIB电视节目”)。”;
}
}
添加操作('woocommerce\u admin\u order\u data\u after\u billing\u address','mx\u oib\u checkout\u field\u display\u admin\u order\u meta',10,1);
/**
*让我们在订单详细信息页面上显示字段值
*/
函数mx\u oib\u字段\u显示\u客户订单\u元($order){
$r1\u checkbox=$order->get\u meta('r1\u checkbox');
如果($r1\u复选框){
回音“.uur1(“račun”)”;
回显“”。(Ime-tvrtke'):”。$order->get-meta(“r1-Ime-tvrtke”)。;
回音“”。(Adresa tvrke'):“$order->get_meta('r1_Adresa_tvrtke')。”;
回显“”。(OIB电视节目”):“$order->get_meta('r1_OIB电视节目”)。”;
}
}
添加操作('WOOMerce\u order\u details\u在订单表之后,'mx\u oib\u字段\u display\u cust\u order\u meta',10,1);
/**
*让我们为订购电子邮件添加新字段
**/
函数mx_oib_checkout_field_meta_fields($fields,$sent_to_admin,$order){
如果(!$order->get\u meta('r1\u复选框'))
返回$fields;
回音“.uuuuuuuuuuuur1 račun”,“woocommerce”);
$fields[]=数组(
'label'=>\('Ime-tvrtke','woocommerce'),
'value'=>$order->get\u meta('r1\u ime\u tvrtke')
);
$fields[]=数组(
“标签”=>uuuuuuu('Adresa tvrke','woocommerce'),
'value'=>$order->get\u meta('r1\u adresa\u tvrtke')
);
$fields[]=数组(
'label'=>uuuu('OIB tvrtke','woocommerce'),
'value'=>$order->get\u meta('r1\u oib\u tvrtke')
);
返回$fields;
}
添加过滤器(“woocommerce\u email\u order\u meta\u fields”、“mx\u oib\u checkout\u field\u meta\u fields”,20,3);
/**
*让我们在订单管理中添加R1列
**/
函数mx_r1_顺序_列($columns){
/*
$offset=9;
$updated_columns=数组_切片($columns,0,$offset,true)+
数组('r1_checkbox'=>esc_html_('r1 račun','woocommerce'))+
数组_切片($columns,$offset,NULL,true);
*/
$columns['r1\u复选框']=__(
/**
* Let's add our new fields to the checkout
*/
add_action( 'woocommerce_after_checkout_billing_form', 'mx_custom_checkout_field' );
function mx_custom_checkout_field( $checkout ) {
echo '<div id="mx_custom_checkout_field"><h3>' . __( 'Pravne osobe' ) . '</h3><p style="margin: 0 0 5px;">Trebate li R1 račun?</p>';
woocommerce_form_field( 'r1_checkbox', array(
'type' => 'checkbox',
'class' => array( 'r1-checkbox form-row-wide' ),
'label' => __( 'Da' ),
), $checkout->get_value( 'r1_checkbox' ) );
woocommerce_form_field( 'r1_ime_tvrtke', array(
'type' => 'text',
'class' => array( 'r1-text form-row-wide' ),
'label' => __( 'Ime tvrtke' ),
'placeholder' => _x('Upišite ime tvrtke', 'placeholder', 'woocommerce'),
), $checkout->get_value( 'r1_ime_tvrtke' ) );
woocommerce_form_field( 'r1_adresa_tvrtke', array(
'type' => 'text',
'class' => array( 'r1-text form-row-wide' ),
'label' => __( 'Adresa tvrtke' ),
'placeholder' => _x('Upišite adresu tvrtke', 'placeholder', 'woocommerce'),
), $checkout->get_value( 'r1_adresa_tvrtke' ) );
woocommerce_form_field( 'r1_oib_tvrtke', array(
'type' => 'text',
'class' => array( 'r1-text form-row-wide' ),
'label' => __( 'OIB tvrtke' ),
'placeholder' => _x('Upišite OIB tvrtke', 'placeholder', 'woocommerce'),
), $checkout->get_value( 'r1_oib_tvrtke' ) );
echo '</div>';
}
/**
* Let's update the order meta with fields values
**/
add_action( 'woocommerce_checkout_update_order_meta', 'mx_oib_checkout_field_update_order_meta' );
function mx_oib_checkout_field_update_order_meta( $order_id ) {
//check if $_POST has our custom fields and accordingly update meta for this order
if ( $_POST['r1_checkbox'] ) {
update_post_meta( $order_id, 'R1 račun', esc_attr( $_POST['r1_checkbox'] ) );
}
if ( $_POST['r1_ime_tvrtke'] ) {
update_post_meta( $order_id, 'Ime tvrtke', esc_attr( $_POST['r1_ime_tvrtke'] ) );
}
if ( $_POST['r1_adresa_tvrtke'] ) {
update_post_meta( $order_id, 'Adresa tvrtke', esc_attr( $_POST['r1_adresa_tvrtke'] ) );
}
if ( $_POST['r1_oib_tvrtke'] ) {
update_post_meta( $order_id, 'OIB tvrtke', esc_attr( $_POST['r1_oib_tvrtke'] ) );
}
}
/**
* Let's display fields values on the Order edit page
*/
add_action( 'woocommerce_admin_order_data_after_billing_address', 'mx_oib_checkout_field_display_admin_order_meta', 10, 1 );
function mx_oib_checkout_field_display_admin_order_meta($order){
$r1_checkbox = get_post_meta( $order->id, 'R1 račun', true );
if( !empty( $r1_checkbox ) ) {
echo '<h4>'.__('R1 račun').'</h4>';
echo '<p><strong>'.__('Ime tvrtke').':</strong> ' . get_post_meta( $order->id, 'Ime tvrtke', true ) . '</p>';
echo '<p><strong>'.__('Adresa tvrke').':</strong> ' . get_post_meta( $order->id, 'Adresa tvrtke', true ) . '</p>';
echo '<p><strong>'.__('OIB tvrtke').':</strong> ' . get_post_meta( $order->id, 'OIB tvrtke', true ) . '</p>';
}
}
/**
* Let's display fields values on the Order details page
*/
add_action( 'woocommerce_order_details_after_order_table', 'mx_oib_field_display_cust_order_meta', 10, 1 );
function mx_oib_field_display_cust_order_meta($order){
$r1_checkbox = get_post_meta( $order->id, 'R1 račun', true );
if( !empty( $r1_checkbox ) ) {
echo '<h2>'.__('Podaci za R1 račun').'</h2>';
echo '<p><strong>'.__('Ime tvrtke').':</strong> ' . get_post_meta( $order->id, 'Ime tvrtke', true ) . '</p>';
echo '<p><strong>'.__('Adresa tvrke').':</strong> ' . get_post_meta( $order->id, 'Adresa tvrtke', true ) . '</p>';
echo '<p><strong>'.__('OIB tvrtke').':</strong> ' . get_post_meta( $order->id, 'OIB tvrtke', true ) . '</p>';
}
}
/**
* Let's add the new fields to order emails
**/
add_filter('woocommerce_email_order_meta_keys', 'mx_woocommerce_email_order_meta_keys');
function mx_woocommerce_email_order_meta_keys( $keys ) {
if ( $_POST['r1_checkbox'] ) {
echo '<h2>R1 račun za kupca</h2>';
$keys[] = 'Ime tvrtke';
$keys[] = 'Adresa tvrtke';
$keys[] = 'OIB tvrtke';
return $keys;
}
}
/**
* Let's add the R1 column in order administration
**/
add_filter( 'manage_edit-shop_order_columns', 'mx_r1_order_column', 20 );
function mx_r1_order_column( $columns ) {
$offset = 9;
$updated_columns = array_slice( $columns, 0, $offset, true) +
array( 'r1_checkbox' => esc_html__( 'R1 račun', 'woocommerce' ) ) +
array_slice($columns, $offset, NULL, true);
return $updated_columns;
}
// Populate R1 column
add_action( 'manage_shop_order_posts_custom_column', 'mx_r1_order_column_values', 2 );
function mx_r1_order_column_values( $column ) {
global $post;
if ( $column == 'r1_checkbox' ) {
$r1_checkbox = get_post_meta( $post->ID, 'R1 račun', true );
if ( $r1_checkbox > 0 )
print ("DA");
else print '-';
}
}
add_filter( 'woocommerce_email_order_meta_fields', 'filter_email_order_meta_fields_callback', 10, 3 );
function filter_email_order_meta_fields_callback( $fields, $send_to_admin, $order ) {
if ( $order->get_meta('R1 račun') ) {
echo '<h2>R1 račun za kupca</h2>';
// Defined array of meta keys (labels)
$meta_keys = ['Ime tvrtke', 'Adresa tvrtke', 'OIB tvrtke'];
// Loop though meta keys array to set the fields
foreach( $meta_keys as $meta_key ){
if( $meta_value = $order->get_meta($meta_key) ){
$fields[] = array(
'label' => $meta_key,
'value' => $meta_value,
);
}
}
}
return $fields;
}
add_filter('woocommerce_email_order_meta_keys', 'mx_woocommerce_email_order_meta_keys');
function mx_woocommerce_email_order_meta_keys( $keys ) {
if ( $_POST['r1_checkbox'] ) {
echo '<h2>R1 račun za kupca</h2>';
$keys[] = 'Ime tvrtke';
$keys[] = 'Adresa tvrtke';
$keys[] = 'OIB tvrtke';
return $keys;
}
}