php - 在订单历史记录表中隐藏总计,并根据 WooCommerce 中的订单状态查看订单弹出窗口
问题描述
我正在使用一个订单提案插件,它在结帐页面上为用户创建一个自定义网关,这样当他们结帐时,他们的订单就会以“已请求提案”状态创建。
目前,我已经设置了我的网站,以便价格隐藏在前端(在大多数地方,如产品循环、单个商店页面、购物车、迷你购物车、结帐等),因为网站的流程是
- 客户将他们想要的物品添加到购物车中。
- 他们在结帐页面上请求报价,然后他们的订单被创建,订单状态设置为“已请求提案”。目前,客户在其订单历史记录表中看到此订单,并显示其订单的总数。
- 店长收到通知,在填写所要求的产品价格等后,将订单状态从“已请求提案”更改为“提案”。
- 客户收到提案已发送的通知,他们可以接受或拒绝该提案。此时,当订单状态设置为“建议”时,客户最终应该能够在其订单历史记录表的“总计”列中看到该特定订单的总数。
所以基本上,我要做的是,如果特定订单的订单状态设置为“proposal_requested”,那么该订单的“总计”列中的单元格应该显示适用的内容,如“-”或“N/A” ",因为在向他们发送报价之前,客户不得查看价格。如果可能,该订单状态的“查看订单”弹出窗口中的价格也应该被隐藏。
这是我迄今为止尝试过的方法,可以从订单视图弹出窗口中的表格中删除价格列。
- 将 order-details-item.php 文件复制
woocommerce/templates/order/
到我的子主题:my-child-theme/woocommerce/order/
- 查找以下行
<?php echo $order->get_formatted_line_subtotal( $item ); ?>
并将其(以及<td>
环绕它的标签)替换为以下内容:
$order_data = $order->get_data();
$order_status = $order_data['status'];
if( $order_status == 'order-proposalreq' ) {
echo '<td class="woocommerce-table__product-total product-total"> - </td>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
else{
echo '<td class="woocommerce-table__product-total product-total">' . $order->get_formatted_line_subtotal( $item ) . '</td>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
这基本上在价格单元格中为处于“order-proposalreq”状态的订单输入“-”。
解决方案
从模板文件中可以看出,两个总计都使用该get_formatted_order_total()
函数。
因此,要根据订单状态调整总计的显示,我们可以使用woocommerce_get_formatted_order_total
过滤器挂钩。
注意:根据您的需要调整“有订单状态”:
function filter_woocommerce_get_formatted_order_total( $formatted_total, $order, $tax_display, $display_refunded ) {
// For a certain order status
if ( $order->has_status( 'completed' ) ) {
return __( 'N/A', 'woocommerce' );
}
// Show the original
return $formatted_total;
}
add_filter( 'woocommerce_get_formatted_order_total', 'filter_woocommerce_get_formatted_order_total', 10, 4 );
结果:
如您所见,这在这两种情况下都有效,只是订单历史记录表中多了一个文本“for ... items” 。
为了避免这种情况woocommerce_my_account_my_orders_column_{$column_id}
,我们可以通过钩子覆盖现有的列。
// Overwrite the existing 'order-total' column
function filter_woocommerce_my_account_my_orders_column_order_total( $order ) {
// For a certain order status
if ( $order->has_status( 'completed' ) ) {
echo __( 'N/A', 'woocommerce' );
// Show the original
} else {
// Get item count
$item_count = $order->get_item_count() - $order->get_item_count_refunded();
// translators: 1: formatted order total 2: total order items
echo wp_kses_post( sprintf( _n( '%1$s for %2$s item', '%1$s for %2$s items', $item_count, 'woocommerce' ), $order->get_formatted_order_total(), $item_count ) );
}
}
add_action( 'woocommerce_my_account_my_orders_column_order-total', 'filter_woocommerce_my_account_my_orders_column_order_total', 10, 1 );
推荐阅读
- javascript - 如何遮蔽 ChartJS 线的一部分 grph=
- c++ - How can I "convert" ISO-8859-7 strings to UTF-8 in C++?
- node.js - MongoDB聚合与数组对象值的总和
- swift - SwiftUI VStack 对齐错误?
- excel-formula - 在excel中制定规则时遇到问题
- docker - Dockerfile CMD 忽略参数
- stripe-payments - 如何为条带会话结帐设置超时?
- regex - 在 ping 另一个单元格时,使 regexmatch 查询不区分大小写的语法是什么?
- ssl - SIM868E如何开启SSL?
- java - 如何直接将asn1架构转换为xsd?