Add Woocommerce Temporary product Add Woocommerce Temporary product wordpress wordpress

Add Woocommerce Temporary product


This is solved! Here is what I did just in case someone needs help with this in the future.

First I made a page with a form. Action is whichever the page will live in and method is post.

<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>

Then on the next page, I grabbed the values, created the product based on the values given, and then added a shortcode to display the cart button.

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;}

and then lastly, once an order is completed, delete the product by hooking an action to woocommerce_thankyou. I put it in the functions.

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);    }}


To Extend this topic and trash or delete products from a category when the order is successfully created.

First you need to create a custom category where all the products you'd like to trash or delete upon successful order creation will live. Then add the following code;

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 );

Code goes in function.php file of your active child theme (or active theme) or cutsom plugin. Tested and worked.