使用 Woocommerce 方法保存产品属性不同步到前端

Saving product attributes with Woocommerce methods not syncing to front end

这不是一个重复的问题。

这里的问题是没有添加每个 say 的属性。问题是将添加的属性选项与我猜的正确术语相关联。从下面的图片中可以看出,属性选项设置正确,但它们与它们的术语无关(如图一所示[文本而不是图片三中看到的灰色背景属性选项]),即使我手动 运行 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 将产品与其新添加的 attributes/attribute 值同步?

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

$attribute_object->set_id($taxonomy_id);

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

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

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