WooCommerce 从前端隐藏订单项元数据(不是管理员)
WooCommerce hide order item meta from front end (not admin)
我有几个我不希望客户看到的订单项目元详细信息(在帐户信息下的查看订单页面上)。我找到了一个过滤器,可以从 ADMIN 中删除这些数据(我仍然希望在其中看到它),但是找不到类似的过滤器来将其从 FRONT END(应该隐藏的地方)中删除。
下面是将(对我来说毫无用处)从后端管理员中删除它的代码:
add_filter( 'woocommerce_hidden_order_itemmeta', 'add_hidden_order_items' );
function add_hidden_order_items( $order_items ) {
$order_items[] = 'paid_already';
$order_items[] = 'variation_sku';
// and so on...
return $order_items;
}
如果您想从前端订单视图中隐藏某些项目元数据,您将需要覆盖
order-details-item.php
woocommerce 模板文件。
我推荐你:Overriding woocommerce templates via a Theme 方法,将模板 woocommerce 文件夹复制到你的活动主题(或子主题更好)并重命名它 "woocommerce"。
复制到该 woocommerce 文件夹(在您的活动主题内)后,您将在 order
子文件夹中找到 order-details-item.php
。
在 order-details-item.php
的第 36 行中,您会发现:
$order->display_item_meta( $item );
$order->display_item_downloads( $item );
您可以更改此添加条件,例如:
if ( $item != 'paid_already' || $item != 'variation_sku') {
$order->display_item_meta( $item );
$order->display_item_downloads( $item );
}
我不确定这个条件的真实性,无法测试。您可能需要稍微更改一下……
仅供参考,函数 display_item_meta() 是这样工作的:
/**
* Display meta data belonging to an item.
* @param array $item
*/
public function display_item_meta( $item ) {
$product = $this->get_product_from_item( $item );
$item_meta = new WC_Order_Item_Meta( $item, $product );
$item_meta->display();
}
参考文献:
好吧,它最终比我想象的要容易得多,模板实际上已经推出了一个 class 和我的项目元名称,所以我只是将它隐藏在 css像这样:
.order_details .variation-variation_sku, .order_details .variation-paid_already {
display: none !important;
}
虽然知道如何防止这些项目元数据被输出会很好,但我可以接受这个作为解决方案。
//remove order item meta key
add_filter( 'woocommerce_order_item_get_formatted_meta_data', 'mobilefolk_order_item_get_formatted_meta_data', 10, 1 );
function mobilefolk_order_item_get_formatted_meta_data($formatted_meta){
$temp_metas = [];
foreach($formatted_meta as $key => $meta) {
if ( isset( $meta->key ) && ! in_array( $meta->key, [
'lyric_id',
'lyric_song_title',
'lyric_artist_name'
] ) ) {
$temp_metas[ $key ] = $meta;
}
}
return $temp_metas;
}
处理商品元数据,我只是使用 CSS:
从购物车中隐藏商品元数据
.wc-item-meta {display:none;}
用下划线前缀保存值,这样就不会显示,只是保存。像这样:
$item->add_meta_data('_hidden_field', '123', true);
在订单项元数据前使用“_”meta_key它会自动隐藏
我有几个我不希望客户看到的订单项目元详细信息(在帐户信息下的查看订单页面上)。我找到了一个过滤器,可以从 ADMIN 中删除这些数据(我仍然希望在其中看到它),但是找不到类似的过滤器来将其从 FRONT END(应该隐藏的地方)中删除。
下面是将(对我来说毫无用处)从后端管理员中删除它的代码:
add_filter( 'woocommerce_hidden_order_itemmeta', 'add_hidden_order_items' );
function add_hidden_order_items( $order_items ) {
$order_items[] = 'paid_already';
$order_items[] = 'variation_sku';
// and so on...
return $order_items;
}
如果您想从前端订单视图中隐藏某些项目元数据,您将需要覆盖 order-details-item.php
woocommerce 模板文件。
我推荐你:Overriding woocommerce templates via a Theme 方法,将模板 woocommerce 文件夹复制到你的活动主题(或子主题更好)并重命名它 "woocommerce"。
复制到该 woocommerce 文件夹(在您的活动主题内)后,您将在 order
子文件夹中找到 order-details-item.php
。
在 order-details-item.php
的第 36 行中,您会发现:
$order->display_item_meta( $item );
$order->display_item_downloads( $item );
您可以更改此添加条件,例如:
if ( $item != 'paid_already' || $item != 'variation_sku') {
$order->display_item_meta( $item );
$order->display_item_downloads( $item );
}
我不确定这个条件的真实性,无法测试。您可能需要稍微更改一下……
仅供参考,函数 display_item_meta() 是这样工作的:
/**
* Display meta data belonging to an item.
* @param array $item
*/
public function display_item_meta( $item ) {
$product = $this->get_product_from_item( $item );
$item_meta = new WC_Order_Item_Meta( $item, $product );
$item_meta->display();
}
参考文献:
好吧,它最终比我想象的要容易得多,模板实际上已经推出了一个 class 和我的项目元名称,所以我只是将它隐藏在 css像这样:
.order_details .variation-variation_sku, .order_details .variation-paid_already {
display: none !important;
}
虽然知道如何防止这些项目元数据被输出会很好,但我可以接受这个作为解决方案。
//remove order item meta key
add_filter( 'woocommerce_order_item_get_formatted_meta_data', 'mobilefolk_order_item_get_formatted_meta_data', 10, 1 );
function mobilefolk_order_item_get_formatted_meta_data($formatted_meta){
$temp_metas = [];
foreach($formatted_meta as $key => $meta) {
if ( isset( $meta->key ) && ! in_array( $meta->key, [
'lyric_id',
'lyric_song_title',
'lyric_artist_name'
] ) ) {
$temp_metas[ $key ] = $meta;
}
}
return $temp_metas;
}
处理商品元数据,我只是使用 CSS:
从购物车中隐藏商品元数据.wc-item-meta {display:none;}
用下划线前缀保存值,这样就不会显示,只是保存。像这样:
$item->add_meta_data('_hidden_field', '123', true);
在订单项元数据前使用“_”meta_key它会自动隐藏