【问题标题】:WooCommerce hide order item meta from Customer E-MailsWooCommerce 从客户电子邮件中隐藏订单项元数据
【发布时间】:2017-08-25 18:01:23
【问题描述】:

我有一个用于自定义元数据的 Woocommerce 插件。我有四个,但其中两个不应显示在客户电子邮件中(但在我的后端)。所以我尝试编辑 email-order-items.php 并删除标准 wc_display_item_meta( $item ); 在我的代码的第一部分中,我尝试删除其中两个,在第二部分中,我尝试显示另外两个

$_product = apply_filters('woocommerce_order_item_product', $order->get_product_from_item($item), $item);

        $item_meta = wc_gzdp_get_order_meta($_product, $item);
        $item_meta_print = '';

        if ($item_meta->meta) {

            if (is_array($item_meta->meta)) {
                foreach ($item_meta->meta as $key => $value) {
                    if (stripos($key, "_wccf_pf_donotshow") === 0 || 
                    stripos($key, "_wccf_pf_donotshow2") === 0) {
                        unset($item_meta->meta[$key]);
                    }
                }
            }
            $item_meta_print = $item_meta->display(true, true, '_', ", ");

            if(isset($item_meta->meta['_wccf_pf_show'])) {
                $item_meta_print .= ', Name: '. $item_meta->meta[_'wccf_pf_show'];
            } elseif(isset($item_meta->meta['_wccf_pf_show2'])) {
                $item_meta_print .= ', Name2: '. $item_meta->meta['_wccf_pf_show2'];
            }

        }

这适用于以前的 Woocommerce 版本,但在 Woocommerce 3 中不再适用。客户电子邮件中不再有元数据:-(

如果有任何帮助,我将不胜感激。

【问题讨论】:

  • 任何以_ 开头的元键,即:_hidden_meta_key 将不会通过wc_display_item_meta() 显示,因此您可以尝试重命名元键并恢复为默认功能。
  • 我删除了元数据中的 _,现在每个元数据都出现了 :-( 顺便说一下,我的 PDF 发票也可以使用相同的代码
  • 使用 _ 为元添加前缀会隐藏它,因此删除该前缀将显示它。我的建议只是为您需要隐藏的元字段添加前缀。但请记住,如果您需要保持向后兼容性,更改名称确实会产生影响......就像您已经保存了一堆数据一样。

标签: php wordpress woocommerce


【解决方案1】:

这将通过过滤woocommerce_order_item_get_formatted_meta_data的结果,在前端的任何地方隐藏一个键:

/**
 * Hide container meta in emails.
 *
 * @param  array  $meta
 * @return array
 */
function kia_hide_mnm_meta_in_emails( $meta ) {
    if( ! is_admin() ) {
        $criteria = array(  'key' => 'Part of' );
        $meta = wp_list_filter( $meta, $criteria, 'NOT' );
    }
    return $meta;
}
add_filter( 'woocommerce_order_item_get_formatted_meta_data', 'kia_hide_mnm_meta_in_emails' );

我不认为只在电子邮件中进行此过滤是有条件的。

【讨论】:

【解决方案2】:

我找到了解决方案。也许它可以帮助别人

              if ( $item != '_wccf_pf_donotshow' || $item != '_wccf_pf_donotshow2') {
            $order->display_item_meta( $item );

        }

                $_product = apply_filters('woocommerce_order_item_product', $order->get_product_from_item($item), $item);

        $item_meta = wc_gzdp_get_order_meta($_product, $item);


        if ($item_meta->meta) {

            if(isset($item_meta->meta['_wccf_pf_show'])) {
             echo 'Name: ' . $order->get_item_meta($item_id, '_wccf_pf_show', true) . '<br><br>';
            } elseif(isset($item_meta->meta['_wccf_pf_show2'])) {
             echo 'Name2: ' . $order->get_item_meta($item_id, '_wccf_pf_show2', true) . '<br><br>';
            }

        }

【讨论】:

    猜你喜欢
    • 2017-08-08
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2016-10-26
    • 2018-06-07
    • 2023-02-04
    相关资源
    最近更新 更多