在订单电子邮件模板(例如email-order-items.php
)中,WooCommerce使用功能wc_display_item_meta
在订单表中显示产品详细信息。功能代码存在于wc-template-functions.php
文件中(行号3011)。我正在复制下面的功能代码以供参考
function wc_display_item_meta( $item, $args = array() ) {
$strings = array();
$html = '';
$args = wp_parse_args( $args, array(
'before' => '<ul class="wc-item-meta"><li>',
'after' => '</li></ul>',
'separator' => '</li><li>',
'echo' => true,
'autop' => false,
) );
foreach ( $item->get_formatted_meta_data() as $meta_id => $meta ) {
$value = $args['autop'] ? wp_kses_post( $meta->display_value ) : wp_kses_post( make_clickable( trim( $meta->display_value ) ) );
$strings[] = '<strong class="wc-item-meta-label">' . wp_kses_post( $meta->display_key ) . ':</strong> ' . $value;
}
if ( $strings ) {
$html = $args['before'] . implode( $args['separator'], $strings ) . $args['after'];
}
$html = apply_filters( 'woocommerce_display_item_meta', $html, $item, $args );
if ( $args['echo'] ) {
echo $html; // WPCS: XSS ok.
} else {
return $html;
}
}
问题是:它没有任何参数可以帮助我过滤掉不想在订单电子邮件中显示的项目数据。我不想在wc-template-functions.php
中更改此功能,因为它是核心文件。因此,我想知道是否可以向functions.php
添加一段代码,从而以某种方式修改此wc_display_item_meta
函数以过滤出特定的项目元。
注意:我知道有人可能会建议为什么不仅要从产品详细信息中删除该特定项目数据,而且该数据对于内部订单处理至关重要。我只是不想让它展示给客户。
更新#1:我不想在订单电子邮件中显示哪些元数据?以下是订单电子邮件的屏幕截图。我突出显示了三个项目数据。“数量选择器”,“数量”和“总计”。我希望所有这三个都不显示在订单电子邮件中。
参考方案
不做任何保证就尝试以下操作(因为我实际上没有真正必要的密钥):
add_filter( 'woocommerce_order_item_get_formatted_meta_data', 'unset_specific_order_item_meta_data', 10, 2);
function unset_specific_order_item_meta_data($formatted_meta, $item){
// Only on emails notifications
if( is_admin() || is_wc_endpoint_url() )
return $formatted_meta;
foreach( $formatted_meta as $key => $meta ){
if( in_array( $meta->key, array('Qty Selector', 'Qty', 'Total') ) )
unset($formatted_meta[$key]);
}
return $formatted_meta;
}
代码进入您的活动子主题(活动主题)的function.php文件中。经过除您的工作之外的其他元数据测试。我希望它也对您有用。
现在,与此代码一起使用的the hook是正确的过滤器挂钩。它位于WC_Order_Item
方法get_formatted_meta_data()
中,并允许过滤订单项元数据。
请如何排序以下数组Array ( 'ben' => 1.0, 'ken' => 2.0, 'sam' => 1.5 ) 至Array ( 'ken' => 2.0, 'sam' => 1.5, 'ben' =&…
PHP strtotime困境 - php有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00…
PHP-全局变量的性能和内存问题 - php假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…
php-casperjs获取内部文本 - php我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…
PHP PDO组按列名称查询结果 - php以下PDO查询返回以下结果:$db = new PDO('....'); $sth = $db->prepare('SELECT ...'); 结果如下: name curso ABC stack CDE stack FGH stack IJK stack LMN overflow OPQ overflow RS…