我正在运行 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!
我很乐意尝试任何想法并添加调试消息。
请使用最新版本重试,该版本现已发布为 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,变化信息又消失了。
附加信息:
是基础语言还是第二语言?
基础语言。
你想让我用第二语言试试吗? (该站点只有 2 种活动语言 - 英语和德语)。
好的,问题来了:
订单.php l。 118** 函数 translateProductNameInOrdersDetails
正在尝试聪明地在每个订单项目上添加链接以返回产品详细信息以及[未能]翻译变体名称。
您可以通过添加此函数的第一行来说明这一点:
return $name;
您将在电子邮件等中获得产品变体的名称,但它始终使用商店基本语言。
乍一看,产品链接的添加似乎是一个不错的功能,而且标准 WooCommerce 客户电子邮件根本不包含任何链接(!!),这似乎非常蹩脚(!!),但它可能不应该是这个插件的工作以这种方式修改电子邮件模板。
wooCommerce 不这样做可能是有原因的:客户可能会将电子邮件作为收据保留很长时间,但产品可能会在以后编辑,因此不再与链接匹配。 如果客户稍后单击旧订单电子邮件,这看起来很糟糕。
所以我可能会选择这个...
我也有明显不一致行为的原因:
观察我在去年建立的商店中有以下格式:
因此,正确的解决方案可能具有以下要素:
从逻辑上正确地保存名称必须比尝试在任何可能使用它的地方挂钩和更改名称要好。
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 的序列。
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_
属性名称 - _西班牙变体术语_