WooCommerce从前端隐藏订单商品元(不是管理员)

时间:2016-06-02 15:44:19

标签: php wordpress woocommerce product orders

我有一些订单项元细节,我不希望客户看到(在帐户信息下的查看订单页面上)。我找到了一个过滤器,它将从ADMIN(我仍然希望看到它)中删除这些数据,但无法找到类似的过滤器将其从FRONT END(它应隐藏在哪里)中删除。

以下代码(对我来说无用)将其从后端管理员中删除:

add_filter( 'woocommerce_hidden_order_itemmeta', 'add_hidden_order_items' );
function add_hidden_order_items( $order_items ) {
    $order_items[] = 'paid_already';
    $order_items[] = 'variation_sku';
    // and so on...
    return $order_items;
}

6 个答案:

答案 0 :(得分:4)

使用下划线前缀保存值,这样就不会显示它,而是保存它。像这样:

$item->add_meta_data('_hidden_field', '123', true);

答案 1 :(得分:1)

如果您想隐藏前端订单视图中的某些商品元素,则需要覆盖
order-details-item.php woocommerce模板文件。

我建议您:Overriding woocommerce templates via a Theme方法,将模板woocommerce文件夹复制到您的活动主题(或更好的儿童主题)并重命名为" woocommerce"。 复制到该woocommerce文件夹(在您的活动主题中)后,您会在order-details-item.php子文件夹中找到order

order-details-item.php的第36行,你会发现:

            $order->display_item_meta( $item );
            $order->display_item_downloads( $item );

您可以更改此条件,例如:

            if ( $item != 'paid_already' || $item != 'variation_sku') {
                $order->display_item_meta( $item );
                $order->display_item_downloads( $item );
            }

我不确定这种条件的真实性,无法对其进行测试。你可能不得不改变它......

仅供参考,功能 display_item_meta()以这种方式运作:

/**
 * Display meta data belonging to an item.
 * @param  array $item
 */
public function display_item_meta( $item ) {
    $product   = $this->get_product_from_item( $item );
    $item_meta = new WC_Order_Item_Meta( $item, $product );
    $item_meta->display();
}

参考文献:

答案 2 :(得分:0)

好吧,它最终比我想象的容易得多,模板实际上已经推出了一个名为meta item的类,所以我只是把它隐藏在css中:

.order_details .variation-variation_sku, .order_details .variation-paid_already {
    display: none !important;
}

虽然知道如何防止这些item meta被输出会很好,但我可以将其作为一种解决方案。

答案 3 :(得分:0)

//remove order item meta key
add_filter( 'woocommerce_order_item_get_formatted_meta_data', 'mobilefolk_order_item_get_formatted_meta_data', 10, 1 );

function mobilefolk_order_item_get_formatted_meta_data($formatted_meta){
    $temp_metas = [];
    foreach($formatted_meta as $key => $meta) {
        if ( isset( $meta->key ) && ! in_array( $meta->key, [
                'lyric_id',
                'lyric_song_title',
                'lyric_artist_name'
            ] ) ) {
            $temp_metas[ $key ] = $meta;
        }
    }
    return $temp_metas;
}

答案 4 :(得分:0)

处理商品元数据时,我只是使用CSS隐藏购物车中的商品元数据:

.wc-item-meta {display:none;}

答案 5 :(得分:0)

在订购商品meta_key前使用“_”会自动隐藏