在订单历史记录中隐藏总计 table 并根据 WooCommerce 中的订单状态查看订单弹出窗口
Hide totals in the order history table and view order popup based on order status in WooCommerce
我正在使用一个订单提案插件,它在结帐页面上为用户创建一个自定义网关,这样当他们结帐时,他们的订单就会被创建,状态为“已请求提案”。
目前,我已经设置了我的网站,以便价格隐藏在前端(在大多数地方,例如产品循环、单一商店页面、购物车、迷你购物车、结帐等),因为流量该网站的
- 一位顾客将他们想要的商品添加到购物车。
- 他们在结帐页面上请求报价,他们的订单创建时订单状态设置为“已请求提案”。目前,客户会在他们的订单历史记录中看到此订单 table 并且会显示他们订单的总数。
- 店长收到通知,在填写了所要求产品的价格等后,将订单状态从“Proposal Requested”更改为“Proposal”
- 客户收到提案已发送的通知,他们可以接受或拒绝该提案。 此时,当订单状态设置为“建议”时,客户应该最终能够在其订单历史记录 table 的“总计”列中看到总计,对于特定的顺序.
所以基本上,我要做的是,如果特定订单的订单状态设置为“proposal_requested”,那么该订单的总计列中的单元格应该显示适用的内容像“-”或“N/A”,因为客户在报价发送给他们之前不允许看到价格。如果可能,还应隐藏此订单状态的“查看订单”弹出窗口中的价格。
这是我迄今为止尝试过的有效方法,从订单视图弹出窗口的 table 中删除价格列。
- 已将订单详细信息-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' table.
为避免这种情况,我们可以通过 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 );
我正在使用一个订单提案插件,它在结帐页面上为用户创建一个自定义网关,这样当他们结帐时,他们的订单就会被创建,状态为“已请求提案”。
目前,我已经设置了我的网站,以便价格隐藏在前端(在大多数地方,例如产品循环、单一商店页面、购物车、迷你购物车、结帐等),因为流量该网站的
- 一位顾客将他们想要的商品添加到购物车。
- 他们在结帐页面上请求报价,他们的订单创建时订单状态设置为“已请求提案”。目前,客户会在他们的订单历史记录中看到此订单 table 并且会显示他们订单的总数。
- 店长收到通知,在填写了所要求产品的价格等后,将订单状态从“Proposal Requested”更改为“Proposal”
- 客户收到提案已发送的通知,他们可以接受或拒绝该提案。 此时,当订单状态设置为“建议”时,客户应该最终能够在其订单历史记录 table 的“总计”列中看到总计,对于特定的顺序.
所以基本上,我要做的是,如果特定订单的订单状态设置为“proposal_requested”,那么该订单的总计列中的单元格应该显示适用的内容像“-”或“N/A”,因为客户在报价发送给他们之前不允许看到价格。如果可能,还应隐藏此订单状态的“查看订单”弹出窗口中的价格。
这是我迄今为止尝试过的有效方法,从订单视图弹出窗口的 table 中删除价格列。
- 已将订单详细信息-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' table.
为避免这种情况,我们可以通过 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 );