当前位置: 首页 > 知识库问答 >
问题:

以编程方式创建产品属性并向其添加术语,但术语未显示在产品->属性中

吕宸
2023-03-14

我通过以下代码以编程方式创建了woo commerce产品属性:

$data = array(
    'name'   => 'My attribute',
    'slug'    => wc_sanitize_taxonomy_name(wp_unslash('My attribute')),
    'type'    => 'select',
    'order_by' => 'menu_order',
    'has_archives'  => 1
  );        
 wc_create_attribute( $data );

这段代码成功地添加了属性,并且在产品中的woo商务列表中可见-

wp_insert_term( 'term_1' ,'pa_'.$data['slug']);

此外,我还确认,当我转储var\u dump(get\u term\u by('name'、'term\u 1'、'pa\u'.$data['slug'))的结果时,我会得到带有术语id、名称、slug、术语分类法\u id等的结果,但问题是这些术语在woocommerce产品属性上不可见,在产品编辑页面上也是如此。

共有1个答案

郎玮
2023-03-14

因为在找到一个适用于Woocommerce 3.8的工作解决方案之前,我已经对自己进行了很多搜索,所以我给出这个答案是为了让其他人在一个真正令人困惑的话题上获得帮助,比如Woocommerce属性。

我创建了两个方法/函数:createAttributecreateTerm基于Woocomerce提供的示例代码:参见代码

function createAttribute(string $attributeName, string $attributeSlug): ?\stdClass {
    delete_transient('wc_attribute_taxonomies');
    \WC_Cache_Helper::incr_cache_prefix('woocommerce-attributes');

    $attributeLabels = wp_list_pluck(wc_get_attribute_taxonomies(), 'attribute_label', 'attribute_name');
    $attributeWCName = array_search($attributeSlug, $attributeLabels, TRUE);

    if (! $attributeWCName) {
        $attributeWCName = wc_sanitize_taxonomy_name($attributeSlug);
    }

    $attributeId = wc_attribute_taxonomy_id_by_name($attributeWCName);
    if (! $attributeId) {
        $taxonomyName = wc_attribute_taxonomy_name($attributeWCName);
        unregister_taxonomy($taxonomyName);
        $attributeId = wc_create_attribute(array(
            'name' => $attributeName,
            'slug' => $attributeSlug,
            'type' => 'select',
            'order_by' => 'menu_order',
            'has_archives' => 0,
        ));

        register_taxonomy($taxonomyName, apply_filters('woocommerce_taxonomy_objects_' . $taxonomyName, array(
            'product'
        )), apply_filters('woocommerce_taxonomy_args_' . $taxonomyName, array(
            'labels' => array(
                'name' => $attributeSlug,
            ),
            'hierarchical' => FALSE,
            'show_ui' => FALSE,
            'query_var' => TRUE,
            'rewrite' => FALSE,
        )));
    }

    return wc_get_attribute($attributeId);
}
function createTerm(string $termName, string $termSlug, string $taxonomy, int $order = 0): ?\WP_Term {
    $taxonomy = wc_attribute_taxonomy_name($taxonomy);

    if (! $term = get_term_by('slug', $termSlug, $taxonomy)) {
        $term = wp_insert_term($termName, $taxonomy, array(
            'slug' => $termSlug,
        ));
        $term = get_term_by('id', $term['term_id'], $taxonomy);
        if ($term) {
            update_term_meta($term->term_id, 'order', $order);
        }
    }

    return $term;
}

因此,它们可以像这样使用:

createAttribute('Colors', 'my-colors');
createTerm('Red', 'my-red', 'my-colors', 10);
createTerm('Green', 'my-green', 'my-colors', 20);
createTerm('Blue', 'my-blue', 'my-colors', 30);
 类似资料:
  • 如何从插件为WooCommerce创建属性?我只发现: 从这个问题 但这种方法需要某些产品的id。我需要生成一些未附加到任何产品的属性。

  • 我正在构建一个获取产品的脚本,而我被困在以编程方式添加属性的部分。所以基本上我想检查属性是否存在,如果不存在,就添加它。然后检查它的价值是否存在,如果不存在,则添加它的价值,并将所有内容附加到我的产品上。 以下是我获得产品的格式: 现在我已经尝试了两个版本,我将粘贴两个代码示例。 第1版: } 这个版本只添加了附加到产品的属性,但是在Wordpress管理的属性选项卡下不可见。我以后会想要这些属性

  • 我在任何地方都没看到有人问过这个问题,所以下面是: 我在我的Magento商店里有几个属性,但是为了让用户从过于杂乱的页面中解脱出来,我用标签把产品页面上不同类型的信息分开。第一个选项卡显示产品描述,它目前是一组HTML,基本上是通过显示易于理解的图标来镜像属性,图标下有属性值,第二个选项卡显示更深入的信息,属性是从DB调用的。 现在,当编辑或添加产品时,我基本上必须添加两次属性:一次作为实际的产

  • 我正在使用此代码添加自定义属性 这个代码的结果我得到了添加只是产品属性名称没有术语值... 我找了很多,但没有得到任何答案。

  • 我正在尝试向现有的WooCommerce产品添加一个具有多个值的新属性。 这是我正在使用的代码。我把它简化了一点,使它更清楚。 该属性显示在产品的属性列表中。然而,条款没有添加。 数据库中也有这些术语: 我做错了什么?我做了很多研究,读了一些其他的问题,但它们对我没有帮助。 在WooCommerce中以编程方式创建新产品属性

  • 问题内容: 我想以编程方式创建具有两个新的Variant属性的变量产品(“父”产品)-所有这些都来自WordPress插件(因此,无需向API发送HTTP请求)。 这两个变量属性也应该动态创建。 如何才能做到这一点 ? (使用WooCommerce版本3) 更新:我已经在此上编写了更多行代码,并使用wooCommerce对象尝试了许多解决方案,并使用WordPress数据库在数据库中添加了有关术语