我有一个针对自定义元数据的Woocommerce插件。我有四个,但其中两个不应该显示在客户的电子邮件中(但在我的后端)。所以我尝试编辑email-order-items.php并删除标准wc_display_item_meta($ item); 在我的代码的第一部分,我尝试删除其中的两个,在第二部分,我尝试显示其他两个
$_product = apply_filters('woocommerce_order_item_product', $order->get_product_from_item($item), $item);
$item_meta = wc_gzdp_get_order_meta($_product, $item);
$item_meta_print = '';
if ($item_meta->meta) {
if (is_array($item_meta->meta)) {
foreach ($item_meta->meta as $key => $value) {
if (stripos($key, "_wccf_pf_donotshow") === 0 ||
stripos($key, "_wccf_pf_donotshow2") === 0) {
unset($item_meta->meta[$key]);
}
}
}
$item_meta_print = $item_meta->display(true, true, '_', ", ");
if(isset($item_meta->meta['_wccf_pf_show'])) {
$item_meta_print .= ', Name: '. $item_meta->meta[_'wccf_pf_show'];
} elseif(isset($item_meta->meta['_wccf_pf_show2'])) {
$item_meta_print .= ', Name2: '. $item_meta->meta['_wccf_pf_show2'];
}
}
这适用于之前的Woocommerce版本,但不再适用于Woocommerce 3.客户电子邮件中不再有任何形式: - (
如果有任何帮助,我将非常感激。
答案 0 :(得分:1)
通过过滤woocommerce_order_item_get_formatted_meta_data
的结果,这将在前端的任何地方隐藏键:
/**
* Hide container meta in emails.
*
* @param array $meta
* @return array
*/
function kia_hide_mnm_meta_in_emails( $meta ) {
if( ! is_admin() ) {
$criteria = array( 'key' => 'Part of' );
$meta = wp_list_filter( $meta, $criteria, 'NOT' );
}
return $meta;
}
add_filter( 'woocommerce_order_item_get_formatted_meta_data', 'kia_hide_mnm_meta_in_emails' );
我认为没有条件仅在电子邮件中进行此过滤。
答案 1 :(得分:0)
我找到了解决方案。也许它可以帮助别人
if ( $item != '_wccf_pf_donotshow' || $item != '_wccf_pf_donotshow2') {
$order->display_item_meta( $item );
}
$_product = apply_filters('woocommerce_order_item_product', $order->get_product_from_item($item), $item);
$item_meta = wc_gzdp_get_order_meta($_product, $item);
if ($item_meta->meta) {
if(isset($item_meta->meta['_wccf_pf_show'])) {
echo 'Name: ' . $order->get_item_meta($item_id, '_wccf_pf_show', true) . '<br><br>';
} elseif(isset($item_meta->meta['_wccf_pf_show2'])) {
echo 'Name2: ' . $order->get_item_meta($item_id, '_wccf_pf_show2', true) . '<br><br>';
}
}