【问题标题】:Conditionally remove order details section in Woocommerce有条件地删除 Woocommerce 中的订单详细信息部分
【发布时间】:2018-09-30 16:21:12
【问题描述】:

如果 if 语句为真,我想在我的 functions.php 中删除 WooCommerce 中的订单详细信息表。我搜索了很多,但不知道该怎么做。

这是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();
}

【问题讨论】:

    标签: php wordpress templates woocommerce orders


    【解决方案1】:

    更新 (可选择显示客户详细信息)

    你可以简单地使用下面的钩子函数(它有$order_id作为可用参数)在if语句中你的条件(你将定义$value em>

    以下将删除我的帐户>查看订单中的订单详情表:

    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) 没有客户详细信息:

    【讨论】:

    • 不错的一个!但它也删除了帐单/运输详细信息。我不知道这是否是操作目标。还是不错的答案。
    • 是否可以将内容替换为其他 php 文件?因此,不是订单详细信息,而是使用 include 设置另一个 php?
    • 您可以使用 Loic 代码删除表格(以及运输/账单详细信息)。然后,您可以在woocommerce_order_details_after_order_table 操作上添加一个新方法,该方法可以在order-detail 模板中的表格之后输出内容。注意woocommerce_view_order 操作也会在order/tracking.php 模板上调用。
    • @Mtxz 当我之前删除了订单详细信息时,woocommerce_order_details_after_order_table 应该如何工作?对我来说听起来不合逻辑。
    • @Mtxz 已更新(有或没有客户详细信息)...
    【解决方案2】:

    据我所知,模板中没有可以使用的钩子。

    但是您可以轻松地覆盖主题中的order/order-details.php 模板,以添加是否输出明细表的条件。

    相关模板在woocommerce/templates/order/order-details.php。您可以将其复制到your-theme/woocommerce/templates/order/order-details.php 并进行所需的更改。

    这样,您无需编辑原始 Woocommerce 文件并使用正确的方式覆盖 woocommerce 输出。自己检查order-details 模板,你会看到这里没有允许阻止输出表格的钩子。但是一个简单的if 包装器和<table> 代码周围的条件应该可以解决问题。

    编辑:order-details-item.php 模板中使用的过滤器woocommerce_order_item_visible 似乎可以帮助您防止在订单详细信息表中显示某些行。但是该模板是在订单明细表 html 中调用的,因此您无法使用它完全删除该表。

    注意:我不确定此模板部分是否在其他地方使用。如果是这种情况,您应该添加到显示条件以检查实际页面是否是您要应用更改的页面(客户仪表板订单详细信息)。如果模板在其他地方使用,它将在使用该模板的每个地方应用您的更改。

    【讨论】:

    • 请阅读我的问题。我的结帐表单挂钩中不需要这个。如果我的 var 为真,我需要将其从视图订单页面中删除
    • 啊,是的,我看错了。您是在谈论从客户仪表板查看订单详细信息的页面吗?
    • 编辑了我的答案,对不起第一个
    • 我会试试这个。我使用 Divi 主题,所以不确定是否可以覆盖:/
    • 它应该可以工作。 Woocommerce 将查看您的主题文件层次结构以选择覆盖模板文件,如果不存在,请使用其插件文件夹中的默认文件。我刚刚测试了一个随机主题,我可以从我的主题中覆盖的order-details 模板中删除表格。
    猜你喜欢
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 2016-12-28
    • 2015-01-28
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多