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

在WooCommerce 3中以编程方式创建产品时设置产品类型

袁成化
2023-03-14

在WooCommerce中,我试图找到一种类似于WC_Product方法set_name()set_status()的方法,例如,设置产品类型,如简单或变化。

实际上,我使用的是WC\u产品对象如下:

    $product = new WC_Product;

    $product->set_name($data['product']['title']);

    $product->set_status('pending');

    $product->save();

如果用户选中“简单产品”或“可变产品”,我如何设置产品类型?

任何帮助都很感激。

共有3个答案

裴展
2023-03-14

虽然WooCommerce没有公开用于更改产品类型的API,但事实上,WooCommerce确实实现了此功能,因为有必要使用管理页面(如https://aaa)上的“产品类型”选择框来支持更改产品类型。bbb。ccc/wp管理员/职位。php?员额=12345

    $classname = WC_Product_Factory::get_product_classname( $post_id, $product_type );
    $product   = new $classname( $post_id );
    $product->save();

请注意,此处发生产品类型转换,因为id==$post\U id的现有产品的产品类型可能不同于$product\U type。显然,可以使用不同类型的产品构造函数,而不是最初用于构造产品的构造函数。这看起来很奇怪,但是当你在管理页面中更改产品类型时,WooCommerce代码就是这么做的。

RESTAPI以基本相同的方式实现产品类型的更改。

华凌
2023-03-14

类型通常是在创建产品时设置的:

$prod_data = [
    'name'          => 'A great product',
    'type'          => 'simple',
    'regular_price' => '15.00',
    'description'   => 'A very meaningful product description',
    'images'        => [
        [
            'src'      => 'https://shop.local/path/to/image.jpg',
            'position' => 0,
        ],
    ],
    'categories'    => [
        [
            'id' => 1,
        ],
    ],
];

$woocommerce->post( 'products', $prod_data );

我不确定是否有修改产品类型的函数,但可以使用REST API进行修改:

$api_response = wp_remote_post( 'https://your-website/wp-json/wc/v2/products/{PRODUCT ID}', array(
    //'method'    => 'PUT',
    'headers' => array(
        'Authorization' => 'Basic ' . base64_encode( 'KEY:SECRET' )
    ),
    'body' => array(
        'type' => 'simple', // just update the product type
        // Options: simple, grouped, external and variable
        // more params http://woocommerce.github.io/woocommerce-rest-api-docs/?shell#product-properties
    )
) );

$body = json_decode( $api_response['body'] );
//print_r( $body );

if( wp_remote_retrieve_response_message( $api_response ) === 'OK' ) {
    echo 'The product ' . $body->name . ' has been updated';
}
傅鸿波
2023-03-14

WC\u产品类没有类型方法。产品类型由产品子类管理…

您将首先获得所需产品类型的WC\u Product对象的空实例:

  1. 变量类型:$product=new WC_product_Variable()

然后,您可以在选定的产品类型上使用任何WC_product方法或对应的Products subClass方法,对象是:

$product->set_name($data['product']['title']);
$product->set_status('publish');

然后您将保存产品(并且它将选择性地返回产品ID):

$product_id = $product->save();

请参阅:在WooCommerce 3中使用CRUD方法以编程方式创建产品

产品变化

对于产品变化,这是不同的,因为它们总是现有变量产品的一部分...

// Get the Variable product object (parent) from an existing product ID
$product = wc_get_product( $product_id );

// Define the variation data
$variation_post = array(
    'post_title'  => $product->get_title(),
    'post_name'   => 'product-'.$product_id.'-variation',
    'post_status' => 'publish',
    'post_parent' => $product_id,
    'post_type'   => 'product_variation',
    'guid'        => $product->get_permalink()
);

// Creating the product variation
$variation_id = wp_insert_post( $variation_post );

// Get an instance of the product variation Object
$variation = new WC_Product_Variation( $variation_id );

// Set existing product attribute values (defined in the variable product)
$variation->update_meta_data( 'attribute_'.'pa_color', 'blue' );
$variation->update_meta_data( 'attribute_'.'pa_size', 'xxl' );

# You can use any WC_Product allowed setter methods on the $variation object

$variation->set_regular_price( 25 );
$variation->set_price( 25 );

$variation->save();

请参阅以下两个相关线程:

  • 以编程方式创建具有新属性值的WooCommerce产品变体

 类似资料:
  • 我有一个WS,它返回非常基本的产品数据:代码、价格和图像。我需要用这些基本数据以编程方式创建Hybris产品,然后进行同步,以便在店面上看到这些产品。 创建具有这些基本信息的产品的步骤是什么?有OOTB服务吗?

  • 我需要从php脚本手动创建一个产品(例如,我正在开发一个自定义前端表单以插入产品) 谷歌我看到一些支持论坛手动创建帖子(使用wp\u insert\u post功能)。我认为这个解决方案是不可靠的(随着woocommerce的更新,情况可能会发生变化)。 我需要一个wc函数为我做这件事,一种wc_create_product(像wc_create_order函数)。 我发现似乎是我需要的,但在网上

  • 如何从插件为WooCommerce创建属性?我只发现: 从这个问题 但这种方法需要某些产品的id。我需要生成一些未附加到任何产品的属性。

  • 我想创建一个产品从前端直接到一个分组的产品在WooCommerce。现在它正在“简单产品”中创建一个产品。 截图: 当前代码:

  • 我有一个Woocommerce商店,里面有各种各样的产品。 我要给所有产品打八折,属于产品类别Cuckoo 现在我所要做的就是在我的functions.php中设定一个销售价格 它的做法如下: 如果我在计算后var_dump$sale_price的结果,我会得到正确的答案,但是前端的价格显示会击出正常价格,并将销售价格显示为正常价格。 是否有一个钩子/过滤器可以用来实现这一点? 我还尝试通过以下方

  • 我试图以编程方式创建一个订单。使用非常简单: 这符合预期,并且为ID为100的简单产品创建了正确数量的订单。 然而,如果我尝试用一个变体来实现这一点,它的行为似乎并不正确。经过多次尝试和错误,我以这种方式完成了工作: 然而,尽管它确实创建了具有正确产品和正确变化ID的订单,订单的总数总是0(巧合的是,这是第一个变化的价格)。 最初我尝试的是