Woo-poly-integration: 英文订单电子邮件不包含变体信息

创建于 2017-05-31  ·  14评论  ·  资料来源: hyyan/woo-poly-integration

我正在运行 WordPress 4.7.5、WooCommerce 3.0.7 和 Hyyan WooCommerce Polylang 的主分支版本(在提交 WC 3 更改后于 5 月 15 日下载)。

当订单电子邮件发送给客户和管理员时,不存在变化信息。
产品是具有为单个属性中的每个值创建的变体的可变产品。
对于具有多个属性的产品,它会为一个属性创建变体。 在这种情况下,其他属性信息确实出现在电子邮件中。

当我禁用 Hyyan WooCommerce Polylang 时,电子邮件中会出现变体信息。
电子邮件中的产品框:Unicorn Fantasy Dog Bandana
禁用插件时:Unicorn Fantasy Dog Bandana - 12 英寸

我尝试使用 'woocommerce_order_item_name' 过滤器来查看 $item_name 的值,但它始终为空!
我试图通过在 Hyyan\WPI\Order.php 的 __construct() 中禁用“translateProductNameInOrdersDetails”函数的 add_filter 调用来隔离问题,但它导致产品名称为 NULL!

我很乐意尝试任何想法并添加调试消息。

所有14条评论

请使用最新版本重试,该版本现已发布为 Hyyan WooCommerce Polylang Integration 1.0。
wooCommerce 3.0 的第一组更改不包括对变体的彻底审查。

话虽如此,我只是在重新测试它并在我的简单测试安装中:

  • 给店主的电子邮件包括变化细节
  • 给客户的电子邮件不包含变体细节

如果我然后关闭 woo-poly-integration 和 polylang,我会得到相同的结果......所以这是在 WooCommerce 模板本身中。
因此,如果您需要,您可以调整模板或将问题提交给 WooCommerce。

请在此处检查并确认。

我做了一个测试订单,变化信息不在任何一封电子邮件中。
我能做些什么来帮助您调试问题吗?

好吧,如果您确认在关闭 Polylang 和 woo-poly 时电子邮件中没有变体信息

我禁用了 woo-poly,现在我在给管理员的电子邮件中看到了变化信息。
例如“Navy Movie Stars Dog Bandana – 26inch”(其中“26inch”是变异信息)。

我再次启用 woo-poly,变化信息又消失了。

附加信息:

  • 变体详情始终显示在结帐中。
  • 当 woo-poly 处于活动状态时,变化细节不在订单接收页面中。
  • 当 woo-poly 处于活动状态时,管理电子邮件中没有变化的详细信息。
  • 当 woo-poly 处于活动状态时,变化细节不在客户电子邮件中(当 woo-poly 处于非活动状态时,与您注意到的不同)。

是基础语言还是第二语言?

基础语言。
你想让我用第二语言试试吗? (该站点只有 2 种活动语言 - 英语和德语)。

好的,问题来了:

订单.php l。 118** 函数 translateProductNameInOrdersDetails
正在尝试聪明地在每个订单项目上添加链接以返回产品详细信息以及[未能]翻译变体名称。

您可以通过添加此函数的第一行来说明这一点:
return $name;

您将在电子邮件等中获得产品变体的名称,但它始终使用商店基本语言。

乍一看,产品链接的添加似乎是一个不错的功能,而且标准 WooCommerce 客户电子邮件根本不包含任何链接(!!),这似乎非常蹩脚(!!),但它可能不应该是这个插件的工作以这种方式修改电子邮件模板。
wooCommerce 不这样做可能是有原因的:客户可能会将电子邮件作为收据保留很长时间,但产品可能会在以后编辑,因此不再与链接匹配。 如果客户稍后单击旧订单电子邮件,这看起来很糟糕。
所以我可能会选择这个...

我也有明显不一致行为的原因:

  • 标准的 wooCommerce 功能使用 product->get_name() 似乎源自 wp_posts.post_title
    通常,您不会从该字段看到变体标题,因此很难跟踪,但实际变体标题可能取决于创建或保存变体时安装的 WooCommerce 和 WooCommerce Polylang 集成版本。

观察我在去年建立的商店中有以下格式:

  • [产品名称] 已翻译但无变化信息
  • [产品名称] 的变体 #[variation_id]
  • [产品名称] [变体名称]未翻译的变体名称
  • [产品名称] [变体名称]翻译变体名称

因此,正确的解决方案可能具有以下要素:

  • 识别正确的变体名称并确保在保存/更新产品时正确设置
  • 创建一个脚本来重建正确的产品变体名称和代码,以便在插件更新时只运行一次
  • 然后可以删除函数 translateProductNameInOrdersDetails ,因为名称本身是正确的...

从逻辑上正确地保存名称必须比尝试在任何可能使用它的地方挂钩和更改名称要好。

wooCommerce 3.0 也有一些代码:

class-wc-product-variation-data-store-cpt-php ll.73-83

        /**
         * If a variation title is not in sync with the parent e.g. saved prior to 3.0, or if the parent title has changed, detect here and update.
         */
        if ( version_compare( get_post_meta( $product->get_id(), '_product_version', true ), '3.0', '<' ) && ( $parent_title = get_post_field( 'post_title', $product->get_parent_id() ) ) && 0 !== strpos( $post_object->post_title, $parent_title ) ) {
            global $wpdb;

            $new_title = $this->generate_product_title( $product );
            $product->set_name( $new_title );
            $wpdb->update( $wpdb->posts, array( 'post_title' => $new_title ), array( 'ID' => $product->get_id() ) );
            clean_post_cache( $product->get_id() );
        }

好吧,这越来越复杂了,我正要报告给wooCommerce,但5天前有一个相关的签入并添加到3.0.8: https :
所以审查这一点是明智的。

基本上 wooCommerce 3.0.7 在 Cart 和 Orders 中的变化描述仍然存在问题。
这是关闭 Polylang 和 Polylang WooCommerce 集成后纯 WooCommerce 3.0.7 的序列。

  1. 使用术语黑色和蓝色创建产品属性,例如颜色
  2. 创建具有黑色和蓝色变体的新变体产品
  3. 将术语 Blue 更改为 NewBlue
  4. 查看产品 - 现在显示变体“NewBlue”
  5. 添加到购物篮,查看购物篮
  6. 篮子现在显示:测试同步变化 - 蓝色
    颜色: 新蓝
  7. 现在编辑产品,例如更改标题...。
    变体标题永远不会完全重置并保留旧的属性值,因为 WooCommerce 代码仅对旧产品标题进行搜索替换,它永远不会完全重建标题。
    无论产品属性如何更改,标题都不会重置:
mysql> select ID, post_title from wp_posts where ID>456;
+-----+---------------------------------------------+
| ID  | post_title                                  |
+-----+---------------------------------------------+
| 457 | Test Sync variations 2                      |
| 458 | Test Sync variations 2 - Blue               |
| 459 | Test Sync variations 2 - Black              |

(属性 Blue 已重命名,但 Cart/Order 的描述从未完全正确更新)

wooCommerce 如何做链接:
保存时:
class-wc-product-variable.php save() l.394 调用
$this->data_store->sync_variation_names( $this, $previous_name, $new_name );
class-wc-product-variable-data-store-cpt.php sync_variation_names() ll.304++
在名称中替换字符串而不是新名称
所以这里没有选择翻译的变体字符串,它只是替换了标题部分

在前面的评论中, generate_product_title() 是内部数据类的受保护函数,因此不容易从 WooCommerce 外部进行覆盖访问。

因此,与这一切相关的是 WooCommerce-Polylang 的工作方式:在变体级别,WooCommerce-Polylang 添加了它自己的参考,以确保通常从变体的主语言副本中检索变体详细信息 - 请参阅问题 #168

我相信通过使用过滤器“woocommerce_product_variation_get_name”来应用临时修复。

提到了另一个奇怪的选择,关闭标题中的产品属性,这意味着它们应该打印在标题之后。
add_filter( 'woocommerce_product_variation_title_include_attributes', '__return_false' );
然而这对我不起作用。

好的,这是在 WOOCOMMERCE 中修复的!!!

使用最新代码https://github.com/woocommerce/woocommerce “版本 3.1.0-beta”进行测试
预计在 3.0.8 发布。

并关闭 woo-poly translateProductNameInOrdersDetails() 函数,
那么woocommerce修复将适用

另外如果想要
add_filter('woocommerce_product_variation_title_include_attributes', '__return_false');
适用于更新的 WooCommerce

可能是 WooCommerce 3.1 而不是 3.0.8,查看 woocommerce 博客: https ://woocommerce.wordpress.com/
从 5 月 31 日起 2 周将发布日期定为 6 月 14 日。

请注意,看起来 woocommerce/woocommerce#15315 在最后一分钟从 3.0.8 中删除,但仍将在 3.1 中进行更彻底的审查。
因此,在此之前,篮子/订单中的变化细节可能会继续变得奇怪。

典型的结果可能是:

西班牙语产品名称 - _English Variation Term_
属性名称 - _西班牙变体术语_

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

Jon007 picture Jon007  ·  19评论

Jon007 picture Jon007  ·  4评论

mrleemon picture mrleemon  ·  4评论

hyyan picture hyyan  ·  13评论

Magneticdud picture Magneticdud  ·  5评论