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.