সমস্যার সমাধান পেয়েছি , উকমার্সের ব্লক চেক আউট পেইজে কাস্টম ফিল্ড কাজ করে না। তাই চেক আউট পেজকে ক্লাসিক চেক আঊট পেজে আপডেট করে কোড এপ্লাই করতে হয়।
. High-Performance Order Storage is enabled: এই ক্ষেত্রে get_post_meta ফাংশন কাজ করে না।
solution:
My code
`
// Add custom checkout fields based on product quantity (Full Names, Date of Birth, NIN Number)
add_action(‘woocommerce_after_order_notes’, ‘custom_checkout_fields’);
function custom_checkout_fields($checkout) {
// Loop through all cart items
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
$quantity = $cart_item[‘quantity’]; // Get product quantity
$product_name = $cart_item[‘data’]->get_name(); // Get product name
for ($i = 1; $i <= $quantity; $i++) {
echo "<h3>" . __("Details for {$product_name} (Item {$i})", 'woocommerce') . "</h3>";
// Full Names field
woocommerce_form_field(
"full_name_{$cart_item_key}_{$i}",
array(
'type' => 'text',
'label' => __("Full Name", 'woocommerce'),
'required' => true,
'class' => array('form-row-wide'),
'placeholder' => __('Enter Full Name', 'woocommerce'),
),
$checkout->get_value("full_name_{$cart_item_key}_{$i}")
);
// Date of Birth field
woocommerce_form_field(
"dob_{$cart_item_key}_{$i}",
array(
'type' => 'date',
'label' => __("Date of Birth", 'woocommerce'),
'required' => true,
'class' => array('form-row-wide'),
'placeholder' => __('Select Date of Birth', 'woocommerce'),
),
$checkout->get_value("dob_{$cart_item_key}_{$i}")
);
// NIN Number field
woocommerce_form_field(
"nin_number_{$cart_item_key}_{$i}",
array(
'type' => 'text',
'label' => __("NIN Number", 'woocommerce'),
'required' => true,
'class' => array('form-row-wide'),
'placeholder' => __('Enter NIN Number', 'woocommerce'),
),
$checkout->get_value("nin_number_{$cart_item_key}_{$i}")
);
}
}
}
// Save custom fields with the order
add_action(‘woocommerce_checkout_update_order_meta’, ‘save_custom_checkout_fields’);
function save_custom_checkout_fields($order_id) {
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
$quantity = $cart_item['quantity'];
$order = wc_get_order( $order_id );
for ($i = 1; $i <= $quantity; $i++) {
if (!empty($_POST["full_name_{$cart_item_key}_{$i}"])) {
// Save Full Name
$order->update_meta_data("full_name_{$cart_item_key}_{$i}", sanitize_text_field($_POST["full_name_{$cart_item_key}_{$i}"]));
}
if (!empty($_POST["dob_{$cart_item_key}_{$i}"])) {
// Save Date of Birth
$order->update_meta_data("dob_{$cart_item_key}_{$i}", sanitize_text_field($_POST["dob_{$cart_item_key}_{$i}"]));
}
if (!empty($_POST["nin_number_{$cart_item_key}_{$i}"])) {
// Save NIN Number
$order->update_meta_data("nin_number_{$cart_item_key}_{$i}", sanitize_text_field($_POST["nin_number_{$cart_item_key}_{$i}"]));
}
$order->update_meta_data("nin_card_cart_item_key", $cart_item_key );
$order->save_meta_data();
}
}
}
//display at admin page
add_action( ‘woocommerce_admin_order_data_after_billing_address’, ‘my_custom_checkout_field_display_admin_order_meta’, 10, 1 );
function my_custom_checkout_field_display_admin_order_meta( $order ){
foreach ($order->get_items() as $item_id => $item) {
$product_name = $item->get_name();
$quantity = $item->get_quantity();
?>
<h3 align="center">NIN Card Infromation</h3>
<table border="1" class="table">
<tr>
<th>S.L</th>
<th>Full Name</th>
<th>Date of Birth</th>
<th>NIN Number</th>
</tr>
<?php
for ($i = 1; $i <= $quantity; $i++) {
$nin_card_cart_item_key = $order->get_meta("nin_card_cart_item_key");
$full_name = $order->get_meta("full_name_{$nin_card_cart_item_key}_{$i}");
$dob = $order->get_meta("dob_{$nin_card_cart_item_key}_{$i}");
$nin_number = $order->get_meta("nin_number_{$nin_card_cart_item_key}_{$i}");
?>
<tr>
<th><?php echo $i; ?></th>
<th><?php echo $full_name; ?></th>
<th><?php echo $dob; ?></th>
<th><?php echo $nin_number; ?></th>
</tr>
<?php
}
?>
</table>
<?php
}
}`
@rasel @jakirsuman
Thanks again