有条件地删除 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) 没有客户详细信息: