在 WooCommerce 电子邮件订单元中获取自定义字段数组值
Get a custom field array values within WooCommerce email order meta
我正在使用 FooEvents 插件来捕获有关 WooCommerce 活动产品的活动参与者信息。下订单时,该插件会将与会者信息作为自定义字段数组保存到 WooCommerce 订单元中。
使用 Post Meta Inspector 插件,我可以看到与会者信息被保存为元键 WooCommerceEventsOrderTickets
,值为:
'a:1:{i:1;a:1:{i:1;a:18:{s:26:"WooCommerceEventsProductID";i:454;s:24:"WooCommerceEventsOrderID";i:4609;s:27:"WooCommerceEventsTicketType";s:0:"";s:23:"WooCommerceEventsStatus";s:6:"Unpaid";s:27:"WooCommerceEventsCustomerID";s:2:"64";s:29:"WooCommerceEventsAttendeeName";s:13:"AttendeeFirst";s:33:"WooCommerceEventsAttendeeLastName";s:12:"AttendeeLast";s:30:"WooCommerceEventsAttendeeEmail";s:19:"jon@freshysites.com";s:34:"WooCommerceEventsAttendeeTelephone";s:12:"607-123-4567";s:32:"WooCommerceEventsAttendeeCompany";s:0:"";s:36:"WooCommerceEventsAttendeeDesignation";s:0:"";s:27:"WooCommerceEventsVariations";a:1:{s:33:"attribute_pa_registration-options";s:14:"nassgap-member";}s:28:"WooCommerceEventsVariationID";i:4078;s:22:"WooCommerceEventsPrice";s:118:"<span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">$</span>675.00</span>";s:35:"WooCommerceEventsPurchaserFirstName";s:3:"Jon";s:34:"WooCommerceEventsPurchaserLastName";s:6:"Fuller";s:31:"WooCommerceEventsPurchaserEmail";s:19:"example@gmail.com";s:37:"WooCommerceEventsCustomAttendeeFields";a:6:{s:24:"fooevents_custom_address";s:15:"123 Attendee St";s:21:"fooevents_custom_city";s:13:"Attendee City";s:31:"fooevents_custom_state/province";s:6:"Nevada";s:28:"fooevents_custom_postal_code";s:5:"13813";s:29:"fooevents_custom_organization";s:12:"Attendee LLC";s:22:"fooevents_custom_title";s:14:"Attendee Title";}}}}'
我希望获取数组中的值,以使用该信息 — 能够在以下范围内显示某些字段值:
- WooCommerce 订单电子邮件
- 在后端订单 table 屏幕中(作为新列)
- 在 "Order details" 时 viewing/editing 订单中,以便数据更容易看到(例如,在账单或送货详细信息下方)
我希望能够从数组中获取某些元值,例如 WooCommerceEventsAttendeeName
、WooCommerceEventsAttendeeLastName
、fooevents_custom_state/province
、fooevents_custom_address
、fooevents_custom_title
,等等
此 PHP 代码段将向订单电子邮件添加一个字段,但是 我如何编辑它以使其显示该数组中的一些元数据?
/**
* Add a custom field (in an order) to the emails
*/
add_filter( 'woocommerce_email_order_meta_fields', 'custom_woocommerce_email_order_meta_fields', 10, 3 );
function custom_woocommerce_email_order_meta_fields( $fields, $sent_to_admin, $order ) {
$fields['meta_key'] = array(
'label' => __( 'Label' ),
'value' => get_post_meta( $order->id, 'meta_key', true ),
);
return $fields;
}
更新:
对于特定的 WooCommerce 订单,我已经使用
回显了该键的元值
echo '<pre>'; print_r( get_post_meta( '4609', 'WooCommerceEventsOrderTickets', true ) ); echo '</pre>';
这是显示的内容:
Array
(
[1] => Array
(
[1] => Array
(
[WooCommerceEventsProductID] => 454
[WooCommerceEventsOrderID] => 4609
[WooCommerceEventsTicketType] =>
[WooCommerceEventsStatus] => Unpaid
[WooCommerceEventsCustomerID] => 64
[WooCommerceEventsAttendeeName] => AttendeeFirst
[WooCommerceEventsAttendeeLastName] => AttendeeLast
[WooCommerceEventsAttendeeEmail] => jon@freshysites.com
[WooCommerceEventsAttendeeTelephone] => 607-123-4567
[WooCommerceEventsAttendeeCompany] =>
[WooCommerceEventsAttendeeDesignation] =>
[WooCommerceEventsVariations] => Array
(
[attribute_pa_registration-options] => nassgap-member
)
[WooCommerceEventsVariationID] => 4078
[WooCommerceEventsPrice] => 5.00
[WooCommerceEventsPurchaserFirstName] => Jon
[WooCommerceEventsPurchaserLastName] => Fuller
[WooCommerceEventsPurchaserEmail] => freshyjon@gmail.com
[WooCommerceEventsCustomAttendeeFields] => Array
(
[fooevents_custom_address] => 123 Attendee St
[fooevents_custom_city] => Attendee City
[fooevents_custom_state/province] => Nevada
[fooevents_custom_postal_code] => 13813
[fooevents_custom_organization] => Attendee LLC
[fooevents_custom_title] => Attendee Title
)
)
)
)
您发布的元数据似乎是序列化数组。看来您应该能够简单地反序列化它,然后遍历数组以检索所需的值。
$meta = get_post_meta( $order->id, 'meta_key', true );
$unserialized = unserialize($meta);
foreach ($unserialized as $key => $value) {
// Isolate values
}
试试下面的方法(因为我不能真正测试它,你可以安排一下):
add_filter( 'woocommerce_email_order_meta_fields', 'custom_woocommerce_email_order_meta_fields', 10, 3 );
function custom_woocommerce_email_order_meta_fields( $fields, $sent_to_admin, $order ) {
$event = get_post_meta( $order->get_id(), 'WooCommerceEventsOrderTickets', true );
if( ! is_array($event) ) return $fields;
$event = isset($event[1][1]) ? $event[1][1] : '';
if( sizeof($event) == 0 ) return $fields;
$custom = isset($event['WooCommerceEventsCustomAttendeeFields']) ? $event['WooCommerceEventsCustomAttendeeFields'] : '';
// Set our array of needed data
$fields_array = [
__('First name') => isset($event['WooCommerceEventsAttendeeName']) ? $event['WooCommerceEventsAttendeeName'] : '',
__('Last name') => isset($event['WooCommerceEventsAttendeeLastName']) ? $event['WooCommerceEventsAttendeeLastName'] : '',
__('Title') => isset($custom['fooevents_custom_title']) ? $custom['fooevents_custom_title'] : '',
__('Organization') => isset($custom['fooevents_custom_organization']) ? $custom['fooevents_custom_organization'] : '',
__('Address') => isset($custom['fooevents_custom_address']) ? $custom['fooevents_custom_address'] : '',
__('City') => isset($custom['fooevents_custom_city']) ? $custom['fooevents_custom_city'] : '',
__('Postcode') => isset($custom['fooevents_custom_postal_code']) ? $custom['fooevents_custom_postal_code'] : '',
__('State') => isset($custom['fooevents_custom_state/province']) ? $custom['fooevents_custom_state/province'] : '',
];
// Loop though the data array to set the fields
foreach( $fields_array as $label => $value ){
if( ! empty($value) ){
$fields[] = array(
'label' => $label,
'value' => $value,
);
}
}
return $fields;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。它应该可以工作。
你会得到类似的东西:
我正在使用 FooEvents 插件来捕获有关 WooCommerce 活动产品的活动参与者信息。下订单时,该插件会将与会者信息作为自定义字段数组保存到 WooCommerce 订单元中。
使用 Post Meta Inspector 插件,我可以看到与会者信息被保存为元键 WooCommerceEventsOrderTickets
,值为:
'a:1:{i:1;a:1:{i:1;a:18:{s:26:"WooCommerceEventsProductID";i:454;s:24:"WooCommerceEventsOrderID";i:4609;s:27:"WooCommerceEventsTicketType";s:0:"";s:23:"WooCommerceEventsStatus";s:6:"Unpaid";s:27:"WooCommerceEventsCustomerID";s:2:"64";s:29:"WooCommerceEventsAttendeeName";s:13:"AttendeeFirst";s:33:"WooCommerceEventsAttendeeLastName";s:12:"AttendeeLast";s:30:"WooCommerceEventsAttendeeEmail";s:19:"jon@freshysites.com";s:34:"WooCommerceEventsAttendeeTelephone";s:12:"607-123-4567";s:32:"WooCommerceEventsAttendeeCompany";s:0:"";s:36:"WooCommerceEventsAttendeeDesignation";s:0:"";s:27:"WooCommerceEventsVariations";a:1:{s:33:"attribute_pa_registration-options";s:14:"nassgap-member";}s:28:"WooCommerceEventsVariationID";i:4078;s:22:"WooCommerceEventsPrice";s:118:"<span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">$</span>675.00</span>";s:35:"WooCommerceEventsPurchaserFirstName";s:3:"Jon";s:34:"WooCommerceEventsPurchaserLastName";s:6:"Fuller";s:31:"WooCommerceEventsPurchaserEmail";s:19:"example@gmail.com";s:37:"WooCommerceEventsCustomAttendeeFields";a:6:{s:24:"fooevents_custom_address";s:15:"123 Attendee St";s:21:"fooevents_custom_city";s:13:"Attendee City";s:31:"fooevents_custom_state/province";s:6:"Nevada";s:28:"fooevents_custom_postal_code";s:5:"13813";s:29:"fooevents_custom_organization";s:12:"Attendee LLC";s:22:"fooevents_custom_title";s:14:"Attendee Title";}}}}'
我希望获取数组中的值,以使用该信息 — 能够在以下范围内显示某些字段值:
- WooCommerce 订单电子邮件
- 在后端订单 table 屏幕中(作为新列)
- 在 "Order details" 时 viewing/editing 订单中,以便数据更容易看到(例如,在账单或送货详细信息下方)
我希望能够从数组中获取某些元值,例如 WooCommerceEventsAttendeeName
、WooCommerceEventsAttendeeLastName
、fooevents_custom_state/province
、fooevents_custom_address
、fooevents_custom_title
,等等
此 PHP 代码段将向订单电子邮件添加一个字段,但是 我如何编辑它以使其显示该数组中的一些元数据?
/**
* Add a custom field (in an order) to the emails
*/
add_filter( 'woocommerce_email_order_meta_fields', 'custom_woocommerce_email_order_meta_fields', 10, 3 );
function custom_woocommerce_email_order_meta_fields( $fields, $sent_to_admin, $order ) {
$fields['meta_key'] = array(
'label' => __( 'Label' ),
'value' => get_post_meta( $order->id, 'meta_key', true ),
);
return $fields;
}
更新:
对于特定的 WooCommerce 订单,我已经使用
回显了该键的元值echo '<pre>'; print_r( get_post_meta( '4609', 'WooCommerceEventsOrderTickets', true ) ); echo '</pre>';
这是显示的内容:
Array
(
[1] => Array
(
[1] => Array
(
[WooCommerceEventsProductID] => 454
[WooCommerceEventsOrderID] => 4609
[WooCommerceEventsTicketType] =>
[WooCommerceEventsStatus] => Unpaid
[WooCommerceEventsCustomerID] => 64
[WooCommerceEventsAttendeeName] => AttendeeFirst
[WooCommerceEventsAttendeeLastName] => AttendeeLast
[WooCommerceEventsAttendeeEmail] => jon@freshysites.com
[WooCommerceEventsAttendeeTelephone] => 607-123-4567
[WooCommerceEventsAttendeeCompany] =>
[WooCommerceEventsAttendeeDesignation] =>
[WooCommerceEventsVariations] => Array
(
[attribute_pa_registration-options] => nassgap-member
)
[WooCommerceEventsVariationID] => 4078
[WooCommerceEventsPrice] => 5.00
[WooCommerceEventsPurchaserFirstName] => Jon
[WooCommerceEventsPurchaserLastName] => Fuller
[WooCommerceEventsPurchaserEmail] => freshyjon@gmail.com
[WooCommerceEventsCustomAttendeeFields] => Array
(
[fooevents_custom_address] => 123 Attendee St
[fooevents_custom_city] => Attendee City
[fooevents_custom_state/province] => Nevada
[fooevents_custom_postal_code] => 13813
[fooevents_custom_organization] => Attendee LLC
[fooevents_custom_title] => Attendee Title
)
)
)
)
您发布的元数据似乎是序列化数组。看来您应该能够简单地反序列化它,然后遍历数组以检索所需的值。
$meta = get_post_meta( $order->id, 'meta_key', true );
$unserialized = unserialize($meta);
foreach ($unserialized as $key => $value) {
// Isolate values
}
试试下面的方法(因为我不能真正测试它,你可以安排一下):
add_filter( 'woocommerce_email_order_meta_fields', 'custom_woocommerce_email_order_meta_fields', 10, 3 );
function custom_woocommerce_email_order_meta_fields( $fields, $sent_to_admin, $order ) {
$event = get_post_meta( $order->get_id(), 'WooCommerceEventsOrderTickets', true );
if( ! is_array($event) ) return $fields;
$event = isset($event[1][1]) ? $event[1][1] : '';
if( sizeof($event) == 0 ) return $fields;
$custom = isset($event['WooCommerceEventsCustomAttendeeFields']) ? $event['WooCommerceEventsCustomAttendeeFields'] : '';
// Set our array of needed data
$fields_array = [
__('First name') => isset($event['WooCommerceEventsAttendeeName']) ? $event['WooCommerceEventsAttendeeName'] : '',
__('Last name') => isset($event['WooCommerceEventsAttendeeLastName']) ? $event['WooCommerceEventsAttendeeLastName'] : '',
__('Title') => isset($custom['fooevents_custom_title']) ? $custom['fooevents_custom_title'] : '',
__('Organization') => isset($custom['fooevents_custom_organization']) ? $custom['fooevents_custom_organization'] : '',
__('Address') => isset($custom['fooevents_custom_address']) ? $custom['fooevents_custom_address'] : '',
__('City') => isset($custom['fooevents_custom_city']) ? $custom['fooevents_custom_city'] : '',
__('Postcode') => isset($custom['fooevents_custom_postal_code']) ? $custom['fooevents_custom_postal_code'] : '',
__('State') => isset($custom['fooevents_custom_state/province']) ? $custom['fooevents_custom_state/province'] : '',
];
// Loop though the data array to set the fields
foreach( $fields_array as $label => $value ){
if( ! empty($value) ){
$fields[] = array(
'label' => $label,
'value' => $value,
);
}
}
return $fields;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。它应该可以工作。
你会得到类似的东西: