Woocommerce-为变量产品添加新的属性值

时间:2020-04-19 13:11:11

标签: php wordpress woocommerce

第一件事: 这是我在stackoverflow上发布的第一个问题。换句话说,这是我在您的帮助下无法独自解决的第一个问题(非常感谢大家,您使世界运转起来!)。

我的问题与@LoictheAztec给出的另一个问题的答案有关(我原本计划将我的问题发布在该帖子的评论中,但由于我是个潜伏者,所以我没有这样做的声誉): https://stackoverflow.com/a/47766413/13263330

我创建了一个可变产品,并希望以编程方式向该产品添加新的属性值。

我复制并稍微修改了上面链接中的代码,但是当我尝试执行该代码时,收到以下错误:

Notice: wc_get_product was called incorrectly. wc_get_product should not be called before the woocommerce_init, woocommerce_after_register_taxonomy and woocommerce_after_register_post_type actions have finished. Backtrace: require_once('wp-load.php'), require_once('wp-config.php'), require_once('wp-settings.php'), do_action('plugins_loaded'), WP_Hook->do_action, WP_Hook->apply_filters, execute_active_snippets, execute_snippet, eval, create_product_variation, wc_get_product, wc_doing_it_wrong

Fatal error: Uncaught Error: Call to a member function get_name() on boolean

问题似乎主要与上面链接中的以下代码行有关:

'post_title'  => $product->get_name()

提醒一下,出于方便起见,product变量的定义如下:

$product = wc_get_product($product_id)

属性值已正确添加到变量产品中,因此代码执行了我期望和想要的操作,但是站点仍然崩溃。

据我了解情况,发生的问题(及其原因)可能与以下方面有关:

  1. 我在代码中所做的修改(已经使用默认代码和@LoictheAztec在他的帖子中给出的示例进行了检查,同样的问题)
  2. 与往常一样,插件和/或主题的兼容性问题(已经检查,停用了所有其他插件并更改为默认主题;还尝试了使用全新WP安装的代码)
  3. 根据对类似问题(https://github.com/woocommerce/woocommerce/issues/23160)的回答,该问题也可能是由于$ product变量未正确地“与有效产品相关联”引起的(不确定此问题,但我认为已经创建的“父级”可变产品很好)或“该产品不再存在”(可以肯定地排除这种情况)。

任何帮助都是值得赞赏的。

1 个答案:

答案 0 :(得分:1)

如果您使用的是代码片段插件,请尝试以下代码。 (在woocommerce挂钩中运行示例代码)

add_action('woocommerce_after_register_post_type', 'test_create_product_variation');
function test_create_product_variation(){
    $parent_id = 746; // Or get the variable product id dynamically

    // The variation data
    $variation_data =  array(
        'attributes' => array(
            'size'  => 'M',
            'color' => 'Green',
        ),
        'sku'           => '',
        'regular_price' => '22.00',
        'sale_price'    => '',
        'stock_qty'     => 10,
    );

    // The function to be run
    create_product_variation( $parent_id, $variation_data );
}