覆盖 WooCommerce 中的管理员视图

Lau*_*ent 2 wordpress woocommerce

我知道您可以通过定义自己的模板并将其命名为与核心模板相同的名称来覆盖 WooCommerce 核心模板。但我想做的是自定义管理视图的一些部分,即订单编辑屏幕。

我想调整的文件是 /includes/admin/meta-boxes/views/html-order-item.php 但显然我不想应用核心文件中的更改,因为我的更改将在下一个文件中丢失WooCommerce 更新。

有没有一种方法可以创建我自己的 html-order-item.php 文件来运行而不是核心文件?我已经搜索了很长一段时间了,但我无法弄清楚......

谢谢!

MST*_*nnu 5

您将很难从这些屏幕上删除功能。这需要替换太多代码才能使插件以后可以升级。我想你可以用 css 样式隐藏或改变一些样式的外观。

您可以做的是在各种do_action调用中添加您自己的功能。例如,在html-order-items.php包含您提到的文件的地方,您有以下操作调用:

include( 'html-order-item.php' );

do_action( 'woocommerce_order_item_' . $item['type'] . '_html', $item_id, $item );
Run Code Online (Sandbox Code Playgroud)

你可以在那里挂钩你自己的领域。

你还有html-order-item.php另外三个钩子:

<?php do_action( 'woocommerce_before_order_itemmeta', $item_id, $item, $_product ) ?>

<?php do_action( 'woocommerce_after_order_itemmeta', $item_id, $item, $_product ) ?>

<?php do_action( 'woocommerce_admin_order_item_values', $_product, $item, absint( $item_id ) ); ?>
Run Code Online (Sandbox Code Playgroud)

您可能还需要查找保存数据的挂钩。

编辑:将项目添加到要跳过的元字段列表:

function remove_order_item_meta_fields( $fields ) {
    $fields[] = '_subscription_period';
    $fields[] = '_subscription_interval';

    return $fields;
}
add_filter( 'woocommerce_hidden_order_itemmeta', 'remove_order_item_meta_fields' );
Run Code Online (Sandbox Code Playgroud)