Php 使用未同步到前端的方法保存产品属性

Php 使用未同步到前端的方法保存产品属性,php,wordpress,woocommerce,taxonomy-terms,Php,Wordpress,Woocommerce,Taxonomy Terms,这不是一个重复的问题 这里的问题是没有添加每个属性。问题是将添加的属性选项与正确的术语关联起来。如下图所示,属性选项设置正确,但它们不与其术语相关联(如图1所示[文本,而非图3所示的灰色背景属性选项]),即使我手动为每个产品运行set_object_terms,并且在数据库中正确设置了关系 foreach($terms as $term_id) { $term = get_term( $term_id ); $term_name = $term->name; $te

这不是一个重复的问题

这里的问题是没有添加每个属性。问题是将添加的属性选项与正确的术语关联起来。如下图所示,属性选项设置正确,但它们不与其术语相关联(如图1所示[文本,而非图3所示的灰色背景属性选项]),即使我手动为每个产品运行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将产品与其新添加的属性/属性值同步?

对于任何有相同问题的人,我花了一些时间,但我最终找到了答案。在上面的示例中,wc_product_属性对象缺少一个属性:

$attribute_object->set_id($taxonomy_id);
此外,set_选项的值应包含在数组中:

$attribute_object->set_options( [$value] );
希望这对其他面临同样问题的人有用