在进行了大量搜索和到处碰头之后,我成功地实现了通过RESTAPI添加WooCommerce产品。以下是我的完整工作代码供参考:-
$api_response = wp_remote_get(\'www.myapi.com\');
$body = wp_remote_retrieve_body($api_response);
/****** API not ready yet...working on it *******/
$data = [
\'type\' => \'variable\',
\'description\' => \'Trying it out for real\',
\'short_description\' => \'Pellentesque habitant.\',
\'categories\' => [
[
\'id\' => 37
],
[
\'id\' => 38
]
],
\'images\' => [
[
\'src\' => \'http://demo.woothemes.com/woocommerce/wp-content/uploads/sites/56/2013/06/T_4_front.jpg\',
\'position\' => 0
]
],
\'attributes\' => [
[
\'name\' => \'Color\',
\'position\' => 0,
\'visible\' => true,
\'variation\' => true,
\'options\' => [
\'Black\',
\'Green\'
]
],
[
\'name\' => \'Size\',
\'position\' => 0,
\'visible\' => true,
\'variation\' => true,
\'options\' => [
\'S\',
\'M\'
]
]
],
\'default_attributes\' => [
[
\'name\' => \'Color\',
\'option\' => \'Black\'
],
[
\'name\' => \'Size\',
\'option\' => \'S\'
]
],
\'variations\' => [
[
\'regular_price\' => \'29.98\',
\'attributes\' => [
[
\'slug\'=>\'color\',
\'name\'=>\'Color\',
\'option\'=>\'Black\'
]
]
],
[
\'regular_price\' => \'69.98\',
\'attributes\' => [
[
\'slug\'=>\'color\',
\'name\'=>\'Color\',
\'option\'=>\'Green\'
]
]
]
]
];
$wp_rest_request = new WP_REST_Request( \'POST\' );
$wp_rest_request->set_body_params( $data );
$products_controller = new WC_REST_Products_Controller;
$res = $products_controller->create_item( $wp_rest_request );
$res = $res->data;
// The created product must have variations
// If it doesn\'t, it\'s the new WC3+ API which forces us to build those manually
if ( !isset( $res[\'variations\'] ) ){
$res[\'variations\'] = array();
}
if ( count( $res[\'variations\'] ) == 0 && count( $data[\'variations\'] ) > 0 ) {
if ( ! isset( $variations_controler ) ) {
$variations_controler = new WC_REST_Product_Variations_Controller();
}
foreach ( $data[\'variations\'] as $variation ) {
$wp_rest_request = new WP_REST_Request( \'POST\' );
$variation_rest = array(
\'product_id\' => $res[\'id\'],
\'regular_price\' => $variation[\'regular_price\'],
\'attributes\' => $variation[\'attributes\'],
);
$wp_rest_request->set_body_params( $variation_rest );
$new_variation = $variations_controler->create_item( $wp_rest_request );
$res[\'variations\'][] = $new_variation->data;
}
}