有条件地删除 Woocommerce 中的订单详细信息部分
Conditionally remove order details section in Woocommerce
如果 if 语句为真,我想在我的 functions.php 中删除 WooCommerce 中的订单详细信息 table。我搜索了很多,但不知道该怎么做。
这是文件包含在 WooCommerce wc-template-functions.php 中的方式:
if ( ! function_exists( 'woocommerce_order_details_table' ) ) {
/**
* Displays order details in a table.
*
* @param mixed $order_id Order ID.
*/
function woocommerce_order_details_table( $order_id ) {
if ( ! $order_id ) {
return;
}
wc_get_template( 'order/order-details.php', array(
'order_id' => $order_id,
) );
}
}
所以我需要这样的东西:
if ( value != true ) {
hide_order_details();
}
据我所知,模板中没有可以使用的挂钩。
但您可以轻松覆盖主题中的 order/order-details.php
模板,以添加是否输出详细信息 table 的条件。
相关模板在woocommerce/templates/order/order-details.php
中。您可以将其复制到 your-theme/woocommerce/templates/order/order-details.php
并进行所需的更改。
通过这种方式,您无需编辑原始 Woocommerce 文件并使用正确的方式覆盖 woocommerce 输出。自己检查 order-details
模板,你会发现这里没有允许阻止输出 table 的钩子。但是一个简单的 if
包装器和 <table>
代码周围的条件应该可以解决问题。
编辑:order-details-item.php
模板中使用的过滤器 woocommerce_order_item_visible
似乎可以帮助您防止在订单详细信息 table 中显示某些行。但是该模板在订单详细信息 table html 中被调用,因此您无法使用它完全删除 table。
注意:我不确定这个模板部分是否用在其他地方。如果是这种情况,您应该添加显示条件以检查实际页面是否是您要应用更改的页面(客户仪表板订单详细信息)。如果该模板在其他地方使用,它将在使用该模板的每个地方应用您的更改。
已更新 (可选择显示客户详细信息)
您可以在 if 语句 (其中您将定义 $value
)
以下将删除“我的帐户”>“查看订单”中的订单详细信息table:
add_action( 'woocommerce_view_order', 'custom_action_view_order', 5, 1 );
function custom_action_view_order( $order_id ){
$value = false;
if( ! $value ){
remove_action( 'woocommerce_view_order', 'woocommerce_order_details_table', 10 );
## ----- Optionally show customer details (if needed) ----- ##
if ( ! $order = wc_get_order( $order_id ) ) {
return;
}
if( is_user_logged_in() ){
wc_get_template( 'order/order-details-customer.php', array( 'order' => $order ) );
}
}
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
1) 包含客户详细信息:
2) 没有客户详细信息:
如果 if 语句为真,我想在我的 functions.php 中删除 WooCommerce 中的订单详细信息 table。我搜索了很多,但不知道该怎么做。
这是文件包含在 WooCommerce wc-template-functions.php 中的方式:
if ( ! function_exists( 'woocommerce_order_details_table' ) ) {
/**
* Displays order details in a table.
*
* @param mixed $order_id Order ID.
*/
function woocommerce_order_details_table( $order_id ) {
if ( ! $order_id ) {
return;
}
wc_get_template( 'order/order-details.php', array(
'order_id' => $order_id,
) );
}
}
所以我需要这样的东西:
if ( value != true ) {
hide_order_details();
}
据我所知,模板中没有可以使用的挂钩。
但您可以轻松覆盖主题中的 order/order-details.php
模板,以添加是否输出详细信息 table 的条件。
相关模板在woocommerce/templates/order/order-details.php
中。您可以将其复制到 your-theme/woocommerce/templates/order/order-details.php
并进行所需的更改。
通过这种方式,您无需编辑原始 Woocommerce 文件并使用正确的方式覆盖 woocommerce 输出。自己检查 order-details
模板,你会发现这里没有允许阻止输出 table 的钩子。但是一个简单的 if
包装器和 <table>
代码周围的条件应该可以解决问题。
编辑:order-details-item.php
模板中使用的过滤器 woocommerce_order_item_visible
似乎可以帮助您防止在订单详细信息 table 中显示某些行。但是该模板在订单详细信息 table html 中被调用,因此您无法使用它完全删除 table。
注意:我不确定这个模板部分是否用在其他地方。如果是这种情况,您应该添加显示条件以检查实际页面是否是您要应用更改的页面(客户仪表板订单详细信息)。如果该模板在其他地方使用,它将在使用该模板的每个地方应用您的更改。
已更新 (可选择显示客户详细信息)
您可以在 if 语句 (其中您将定义 $value
)
以下将删除“我的帐户”>“查看订单”中的订单详细信息table:
add_action( 'woocommerce_view_order', 'custom_action_view_order', 5, 1 );
function custom_action_view_order( $order_id ){
$value = false;
if( ! $value ){
remove_action( 'woocommerce_view_order', 'woocommerce_order_details_table', 10 );
## ----- Optionally show customer details (if needed) ----- ##
if ( ! $order = wc_get_order( $order_id ) ) {
return;
}
if( is_user_logged_in() ){
wc_get_template( 'order/order-details-customer.php', array( 'order' => $order ) );
}
}
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
1) 包含客户详细信息:
2) 没有客户详细信息: