Я использую WordPress 3.9.1 и последнюю версию WooCommerce (2.1.10) и пытаюсь создать страницу «Оплата счета», где люди указывают номер и сумму своего счета и сразу переходят на страницу оформления заказа.
Как я это делаю сейчас:
У меня есть страница с формой, где люди вводят сумму:
<form action="#" onsubmit="location.href = 'http://protexfs.co/invoicepage/?date=' + this.elements.date.value; return false;">
<input type="text" name="date">
<input type="submit" value="Go">
</form>
Кнопка отправки ведет на страницу, которая автоматически создает продукт Woocommerce на ту же сумму, добавляет его в корзину и автоматически перенаправляет на страницу оформления заказа (я использую плагин Insert PHP для всех моих потребностей PHP):
[insert_php]
//empty cart
global $woocommerce;
$woocommerce->cart->empty_cart();
// Remove default cart message
$woocommerce->clear_messages();
//price
$invoiceprice = filter_input(INPUT_GET,"date",FILTER_SANITIZE_STRING);
//Generate title
$timestampedtitle = "Date: ".date("d/m/Y")." Amount: £".$invoiceprice;
//Generate message
$message = date_timestamp_get(date_create())." Date: ".date('m/d/Y h:i:s a', time())." Invoice amount: £".$invoiceprice;
$post = array(
'post_author' => '2',
'post_status' => "publish",
'post_title' => $timestampedtitle,
'post_content' => $message,
'post_parent' => '',
'post_type' => "product",
//'post_status' => 'private',
);
//Create post
$post_id = wp_insert_post( $post, $wp_error );
if($post_id){
$attach_id = get_post_meta($product->parent_id, "_thumbnail_id", true);
add_post_meta($post_id, '_thumbnail_id', $attach_id);
}
wp_set_object_terms($post_id, 'simple', 'product_type');
update_post_meta( $post_id, '_visibility', 'search' );
update_post_meta( $post_id, '_stock_status', 'instock');
update_post_meta( $post_id, '_virtual', 'yes');
update_post_meta( $post_id, '_regular_price', $invoiceprice );
update_post_meta( $post_id, '_sale_price', $invoiceprice );
update_post_meta( $post_id, '_purchase_note', "" );
update_post_meta( $post_id, '_featured', "no" );
update_post_meta( $post_id, '_weight', "" );
update_post_meta( $post_id, '_length', "" );
update_post_meta( $post_id, '_width', "" );
update_post_meta( $post_id, '_height', "" );
update_post_meta($post_id, '_sku', "");
update_post_meta( $post_id, '_product_attributes', array());
update_post_meta( $post_id, '_sale_price_dates_from', "" );
update_post_meta( $post_id, '_sale_price_dates_to', "" );
update_post_meta( $post_id, '_price', $invoiceprice );
update_post_meta( $post_id, '_sold_individually', "" );
update_post_meta( $post_id, '_manage_stock', "no" );
update_post_meta( $post_id, '_backorders', "no" );
update_post_meta( $post_id, '_stock', "" );
update_post_meta( $post_id, '_et_pb_page_layout', 'et_full_width_page' );
if( $woocommerce->cart ) {
$woocommerce->cart->add_to_cart( $post_id, $quantity=1 );}
$url = $woocommerce->cart->get_checkout_url();
header("Location: $url");
[/insert_php]
Кажется, это работает отлично, пока я вошел в систему. Однако, если пользователь не вошел в систему, продукт все еще генерируется, но не может быть добавлен в корзину, показывая следующее сообщение: «К сожалению, этот продукт не может быть куплено». (что все портит).
Странно то, что любой другой продукт, который я создаю через интерфейс WooCommerce, может быть доступен гостям (поэтому, если у меня есть общедоступный продукт, и я программно меняю его цену и добавляю его в корзину, это работает -> но это создает проблемы когда 2 человека нажимают кнопку одновременно).
Прежде чем вы спросите, я включил гостевую проверку в настройках WooCommerce.
Любые идеи о том, как это исправить? (Или, возможно, совершенно другой способ достижения моей цели?)
Влад