首页 > 解决方案 > 使用未同步到前端的 Woocommerce 方法保存产品属性

问题描述

这不是一个重复的问题。

这里的问题是没有添加每个说的属性。问题是将添加的属性选项与我猜的正确术语相关联。如下图所示,属性选项设置正确,但它们与它们的术语无关(如图一所示[文本而不是图三所示的灰色背景属性选项]),即使我手动运行每个产品的 set_object_terms 和关系在数据库中正确设置。

foreach($terms as $term_id) {
    $term = get_term( $term_id );
    $term_name = $term->name;
    $term_taxonomy = $term->taxonomy;
    $term_slug = $term->slug;
                            
    if( ! has_term( $term_name, $term_taxonomy, $parent_id ) ) {
        $set_terms = wp_set_object_terms($parent_id, $term_slug, $term_taxonomy, true );
    }
                            
}

在将某些属性从一个数据库传输到另一个数据库时,我遇到了一个问题,即属性被正确传输但它们以文本形式保存......

在此处输入图像描述

我需要在 wordpress 管理 > 产品编辑中手动单击“保存属性”...

在此处输入图像描述

让它真正在系统中正确注册,如此处所示。

在此处输入图像描述

主要问题是,虽然在第一个屏幕截图中显示为文本形式,但这些属性在面向用户的商店中实际上是不可见的,并且它们在产品的变体中也不可用。

我正在使用 woocommerce 方法来更新产品。这是一个代码示例:

$attribute_object = new WC_Product_Attribute();
$attribute_object->set_name( $attribute_name );
$attribute_object->set_options( $value );
$attribute_object->set_visible(1);
$attribute_object->set_variation(1);
$attribute_object->set_position(0);
$attribute_object->set_id( 0 );
$new_product_attributes[$attribute_name] = $attribute_object;
$new_product->set_attributes($new_product_attributes);
                        
$new_product->save();

如何让 WP 将产品与其新添加的属性/属性值同步?

标签: phpwordpresswoocommercetaxonomy-terms

解决方案


对于任何有同样问题的人,我花了一段时间,但我终于弄明白了。在上面的示例中,wc_product_attribute 对象中缺少一个属性:

$attribute_object->set_id($taxonomy_id);

set_options 的值也应该包含在一个数组中:

$attribute_object->set_options( [$value] );

希望这对面临同样问题的其他人有用。


推荐阅读