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