Я реализовал настраиваемую HTML-форму и запрашиваю некоторые данные, которые мои клиенты будут передавать для успешного размещения заказа. Без этих деталей мой заказ не имеет значения.
Для HTML-формы я ссылаюсь на некоторый настраиваемый PHP-скрипт, который находится ниже и который обрабатывает данные POST из формы и программно создает корзину с этими данными. Спасибо @LoicTheAztec за помощь в этом.
Код файла script.php
:
<?php
require_once("../wp-load.php");
$customer_name = $_POST["customer_name"];
$customer_email = $_POST["customer_email"];
$customer_sex = $_POST["customer_sex"];
$customer_age = $_POST["customer_age"];
$product_id = $_POST["product_id"];
$custom_data = array(); // Initializing
if( isset($_POST['customer_name']) && ! empty($_POST['customer_name']) )
$custom_data['custom_data']['name'] = $_POST['customer_name'];
if( isset($_POST['customer_email']) && ! empty($_POST['customer_email']) )
$custom_data['custom_data']['email'] = $_POST['customer_email'];
if( isset($_POST['customer_sex']) && ! empty($_POST['customer_sex']) )
$custom_data['custom_data']['sex'] = $_POST['customer_sex'];
if( isset($_POST['customer_age']) && ! empty($_POST['customer_age']) )
$custom_data['custom_data']['age'] = $_POST['customer_age'];
global $woocommerce;
if (WC()->cart->add_to_cart( $product_id, '1', '0', array(), $custom_data )) {
var_dump($product_id);
} else {
var_dump($customer_name);
}
header("Location: ./checkout");
?>
Как видите, мы программно создали элемент корзины, используя метод WC_Cart
add_to_cart()
. Таким образом, все пользовательские данные сохраняются в корзине как данные пользовательского элемента корзины.
И теперь мы также поместили блок кода в functions.php
для печати этих данных на странице оформления заказа.
add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field' );
function my_custom_checkout_field( $checkout ) {
//var_dump($checkout);
global $woocommerce;
echo '<div id="my_custom_checkout_field"><h2>' . __('Child Info') . '</h2>';
foreach ( $woocommerce->cart->get_cart() as $cart_item ) {
if( isset($cart_item['custom_data']) ) {
$custom_data = $cart_item['custom_data'];
echo("<div>Name: <strong>" . $custom_data['name'] . "</strong></div>");
echo("<div>Email: <strong>" . $custom_data['email'] . "</strong></div>");
echo("<div>Gender: <strong>" . $custom_data['sex'] . "</strong></div>");
echo("<div>Age: <strong>" . $custom_data['age'] . "</strong></div>");
}
}
echo '</div>';
}
Теперь я пытаюсь добавить эти данные, напечатанные на странице оформления заказа, на страницу заказа. Поскольку мой заказ не может быть выполнен без этих данных, пользователю необходимо заполнить эти данные, и когда он создает заказ, эти данные также необходимо передать на страницу «Сводка заказа». И администратору также необходимо иметь возможность видеть эти данные, чтобы он мог обработать заказ.
Я надеюсь, что это описание все проясняет, и еще раз спасибо @LoicTheAztec за то, что помогли мне это сделать. Большое Вам спасибо.
global $woocommerce;
, поскольку при использованииWC()
он уже включен в него… ДокументыWC()
- person LoicTheAztec   schedule 06.08.2018