添加Woocommerce临时产品

时间:2017-09-18 14:03:34

标签: wordpress woocommerce product variations

需要帮助: 是否有可能将用户生成的临时产品添加到WooCommerce的购物车中?我正在尝试将非wordpress网站转移到WordPress,但该网站已经拥有一个客户不想改变的复杂电子商务系统。基本上发生的是访问者指定客户正在销售的产品的度量,添加不同的变化,然后在提交后,网站根据访问者的输入生成产品的价格。添加产品将非常繁琐,因为它们有太多的产品,有数千种变化。所以我们的解决方案是这样除了WooCommerce之外,我对其他插件建议持开放态度。我已经尝试过使用Gravity Forms,但我最终陷入困境,因为我们客户的当前网站在添加到购物车后必须是一个电子商务网站。提前谢谢!

2 个答案:

答案 0 :(得分:4)

这已经解决了! 这是我做的,以防将来有人需要帮助。

首先,我创建了一个带有表单的页面。动作是页面将存在的任何一个,方法发布。

<form method="post" action="/order-page">

    <label for="tc_name" title="Full Name">Full Name</label>
    <input type="text" name="tc_name"/>

    <label for="tc_title" title="Product Name">Product Name</label>
    <input type="text" name="tc_title">

    <label for="tc_description" title="Product Description">Product Description</label>
    <textarea name="tc_description"></textarea>

    <label for="tc_price" title="Price">Price</label>
    <input type="number" name="tc_price"/>

    <input type="submit" value="Submit"/>
</form>

然后在下一页上,我抓住了值,根据给定的值创建了产品,然后添加了一个短代码来显示购物车按钮。

if('POST' == $_SERVER['REQUEST_METHOD'] && !empty($_POST['tc_price'])) {

    //grab the values
    $pName = $_POST["tc_name"];
    $pDescription = $_POST["tc_description"];
    $pPrice = $_POST["tc_price"];
    $post_title = $_POST["tc_title"];

    //add them in an array
    $post = array(
        'post_author' => $pName,
        'post_content' => $pDescription,
        'post_status' => "publish",
        'post_title' => $post_title,
        'post_type' => "product",
    );
    //create product
    $product_id = wp_insert_post( $post, __('Cannot create product', 'bones') );

    //type of product
    wp_set_object_terms($product_id, 'simple', 'product_type');

    //add price to the product, this is where you can add some descriptions such as sku's and measurements
    update_post_meta( $product_id, '_regular_price', $pPrice );
    update_post_meta( $product_id, '_sale_price', $pPrice );
    update_post_meta( $product_id, '_price', $pPrice );

    //get woocommerce shortcode for add to cart
    $myButton = do_shortcode('[add_to_cart id="' . $product_id . '"]');

    //display product
    echo $myButton;
}

然后最后,订单完成后,通过将操作挂钩到woocommerce_thankyou来删除产品。我把它放在了函数中。

function mysite_completed($order_id) {
    //get order ID
    $order = new WC_Order( $order_id );

    //grab items from the order id
    $items = $order->get_items();

    //loop thru all products in the order section and get product ID 
    foreach ( $items as $item ) {
        $product_id = $item['product_id'];

        //choose whatever suites you, trash the product is what I picked

        //permanently deletes product
        //wp_delete_post($product_id);

        //trashes post
        wp_trash_post($product_id);
    }
}

答案 1 :(得分:0)

在成功创建订单后扩展此主题并从类别中删除或删除产品。

首先,您需要创建一个自定义类别,在您成功创建订单后,您要垃圾或删除的所有产品都将存在。然后添加以下代码;

function delete_product_on_woocommerce_complete_order( $order_id ) { 

    if ( ! $order_id ) {
        return;
    }

    // 1. Get order object
    $order = wc_get_order( $order_id );

    // 2. Initialize $cat_in_order variable
    $cat_in_order = false;

    foreach ( $items as $item ) {       
        $product_id = $item['product_id'];  
        if ( has_term( 'machine', 'product_cat', $product_id ) ) { //Where machine is the custom product category slug

            // 3. choose whatever suites you, delete the product is what I picked
            //To Delete Product
            wp_delete_post($product_id); 

            //To Trash Product
            //wp_trash_post($product_id); 
        }
    }   

}
add_action( 'woocommerce_thankyou', 'delete_product_on_woocommerce_complete_order', 5 );

代码进入活动子主题(或活动主题)或cutsom插件的function.php文件。经过测试和工作。