如何安全修改WooCommerce核心文件html-order-item-meta.php且避免更新覆盖
如何安全修改WooCommerce核心文件html-order-item-meta.php且避免更新覆盖
嘿,我太懂你这种头疼的情况了——直接改WooCommerce核心文件解决了YITH元数据不显示的问题,但每次插件更新都会把修改冲掉,子主题又不管用,对吧?别慌,咱们用WooCommerce原生的钩子就能干净彻底地解决这个问题,完全不用碰核心文件。
方法一:用woocommerce_order_item_display_meta_key过滤器直接替换显示的键
这个过滤器专门用来控制订单项元数据的键显示内容,我们可以在这里判断如果display_key存在,就用它代替原来的key。
把下面的代码添加到子主题的functions.php文件或者自定义插件里:
add_filter( 'woocommerce_order_item_display_meta_key', 'replace_meta_key_with_display_key', 10, 2 ); function replace_meta_key_with_display_key( $display_key, $meta ) { // 检查display_key是否存在,存在就替换 if ( isset( $meta->display_key ) ) { $display_key = $meta->display_key; } return $display_key; }
方法二:用woocommerce_order_item_get_formatted_meta_data过滤器修改元数据对象
如果需要更底层的控制,我们可以直接修改格式化后的元数据数组,把每个元数据的key字段替换成display_key,这样核心文件调用$meta->key时拿到的就是我们想要的值了。
代码如下:
add_filter( 'woocommerce_order_item_get_formatted_meta_data', 'modify_order_item_meta_data', 10, 2 ); function modify_order_item_meta_data( $formatted_meta, $item ) { foreach ( $formatted_meta as $meta_key => $meta ) { if ( isset( $meta->display_key ) ) { $formatted_meta[ $meta_key ]->key = $meta->display_key; } } return $formatted_meta; }
为什么子主题不行?
你之前尝试用子主题覆盖这个文件没效果,是因为WooCommerce的后台模板(比如/includes/admin/下的这些文件)不在子主题的模板覆盖范围内——子主题只能覆盖前端的用户-facing模板(比如woocommerce/目录下的那些),后台的模板修改必须用钩子或者自定义插件。
更稳妥的方式:自定义插件
如果不想依赖子主题,推荐创建一个简单的自定义插件:
- 在
wp-content/plugins/目录下新建一个文件夹,比如woocommerce-yith-meta-fix - 在文件夹里新建一个PHP文件,比如
woocommerce-yith-meta-fix.php - 把下面的代码粘贴进去:
<?php /** * Plugin Name: WooCommerce YITH Meta Display Fix * Description: 修复后台订单页YITH插件元数据不显示的问题 * Version: 1.0 * Author: 你的名字 */ add_filter( 'woocommerce_order_item_display_meta_key', 'replace_meta_key_with_display_key', 10, 2 ); function replace_meta_key_with_display_key( $display_key, $meta ) { if ( isset( $meta->display_key ) ) { $display_key = $meta->display_key; } return $display_key; }
- 登录WordPress后台,找到这个插件并激活即可。这样哪怕你切换主题,修改也依然生效。
备注:内容来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

