Tho*_*Gee 3 php wordpress woocommerce
目前,订单中的 WooCommerce 订单项目具有以下列:
我的目标是添加一个额外的列(或元),它有一个产品状态的下拉字段。
有没有人对我如何实现这一点有任何想法?
万一其他人偶然发现了这一点,我需要在编辑订单屏幕上的订单项元框中添加一些自定义订单元。在 2017 年,我就是这样解决这个困境的。
class-wc-meta-box-order-items.php下找到的文件includes/admin/meta-boxes自 2014 年以来略有变化,但它确实包含模板文件html-order-items.php。
在最后一个文件中,您会发现两个未记录的钩子woocommerce_admin_order_item_headers,您可以使用它来添加自定义列标题文本并可以访问 $order 对象和woocommerce_admin_order_item_values,它将您的自定义内容放在 Cost 列之前并具有访问权限到 $product、$item 和 $item_id。
所以要添加一个自定义列,它看起来像这样。
add_action( 'woocommerce_admin_order_item_headers', 'pd_admin_order_items_headers' );
function pd_admin_order_items_headers($order){
?>
<th class="line_customtitle sortable" data-sort="your-sort-option">
Custom Title
</th>
<?php
}
Run Code Online (Sandbox Code Playgroud)
您的排序选项在哪里取决于您要排序的数据。我在我的情况下使用了弦乐。
比您将拥有的每个订单项中的内容。
add_action( 'woocommerce_admin_order_item_values', 'pd_admin_order_item_values' );
function pd_admin_order_item_values( $product, $item, $item_id ) {
//Get what you need from $product, $item or $item_id
?>
<td class="line_customtitle">
<?php //your content here ?>
</td>
<?php
}
Run Code Online (Sandbox Code Playgroud)
如果您需要该元框中不同位置的内容,该模板文件中还有一些其他钩子和过滤器,绝对值得一看。
我也正在对该表进行一些重大调整,我还没有完全弄清楚,但我知道这么多,如果您查看其中的 class- wc -meta-box-order-items.php在插件目录中,您将找到以下代码片段:
// List order items
$order_items = $order->get_items( apply_filters( 'woocommerce_admin_order_item_types', array( 'line_item', 'fee' ) ) );
foreach ( $order_items as $item_id => $item ) {
switch ( $item['type'] ) {
case 'line_item' :
$_product = $order->get_product_from_item( $item );
$item_meta = $order->get_item_meta( $item_id );
include( 'views/html-order-item.php' );
break;
case 'fee' :
include( 'views/html-order-fee.php' );
break;
}
do_action( 'woocommerce_order_item_' . $item['type'] . '_html', $item_id, $item );
}
Run Code Online (Sandbox Code Playgroud)
不要编辑此片段!
从这里您可以开始查看该表的组成部分。我相信(据我目前对 WooCommerce 的了解)您可以创建一个挂钩过滤器的函数:woocommerce_admin_order_item_types();
这就是我会做这样的事情:
# Admin Panel Updates
add_filter( 'woocommerce_add_order_item_meta', array( $this, 'display_order_item_meta' ), 10, 2 );
public function display_order_item_meta( $order_items ) {
array_push($order_items,'event'); //Not sure how to manipulate this yet
return $order_items;
}
Run Code Online (Sandbox Code Playgroud)
而且看起来我们需要对动作钩子(woocommerce_order_item_' . $item['type'] . '_html', $item_id, $item)做一些事情,也许是这样的:
add_filter( 'woocommerce_order_item_event_html', array( $this, 'display_event_item_meta' ), 10, 2 );
public function display_event_item_meta( $item_id, $item) {
switch ( $item['type'] ) {
case 'event' :
include( 'views/html-order-event-item.php' );
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这是迄今为止我最好的猜测,但我确信这是要剖析的正确代码片段。
| 归档时间: |
|
| 查看次数: |
9017 次 |
| 最近记录: |