我正try 在WooCommerce checkout 的顶部放置两个自定义域(理想情况下是购物车页面,但我在网上找不到任何关于这一可能性的内容)
我有两个自定义字段出现在 checkout 页面上,但由于php知识非常有限,我试图创建一个下拉菜单等.表面上看起来一切都很好.这些字段显示在 checkout 页面上,但每当我输入信息并try 继续进行订单以测试这些值是否显示在感谢页面和邮箱上时,系统会要求我在这些必填字段中填写信息.出于某种原因,页面无法识别这些字段为空
我用的是这个post...https://www.businessbloomer.com/woocommerce-add-custom-checkout-field-php/
但我不得不对它进行了相当多的编辑,才走到了这一步.我相信这里面肯定有很多错误.
add_action('woocommerce_before_checkout_form', 'custom_add_custom_checkout_fields');
function custom_add_custom_checkout_fields($checkout)
{
echo '<h3>Event Information</h3>';
// Get the current user ID
$user_id = get_current_user_id();
// Fetch user meta data
$saved_event_venue = $current_user->event_venue;
$saved_hall_stand_number = $current_user->hall_stand_number;
woocommerce_form_field('event_venue', array(
'type' => 'select',
'class' => array('form-row-wide'),
'label' => 'Event/Expo & Venue',
'options' => array(
'' => 'Select an option',
'event1' => 'Event 1 Venue',
'event2' => 'Event 2 Venue',
'event3' => 'Event 3 Venue'
// Add more options as needed
),
'required' => true,
'default' => $saved_event_venue,
), $checkout->get_value('event_venue'));
woocommerce_form_field('hall_stand_number', array(
'type' => 'text',
'class' => array('form-row-wide'),
'label' => 'Hall & Stand Number',
'placeholder' => 'Enter Hall & Stand Number',
'required' => true,
'default' => $saved_hall_stand_number,
), $checkout->get_value('hall_stand_number'));
}
// Validate custom fields
add_action('woocommerce_checkout_process', 'custom_validate_checkout_fields');
function custom_validate_checkout_fields()
{
if (!$_POST['event_venue']) {
wc_add_notice('Please select an Event/Expo & Venue.', 'error');
if (!$_POST['hall_stand_number']) {
wc_add_notice('Please enter the Hall & Stand Number.', 'error');
}
}
}
// Save custom fields to order
add_action('woocommerce_checkout_update_order_meta', 'custom_save_checkout_fields');
function custom_save_checkout_fields($order_id)
{
if ($_POST['event_venue'])
update_post_meta($order_id, '_event_venue', esc_attr($_POST['event_venue']));
if ($_POST['hall_stand_number'])
update_post_meta($order_id, '_hall_stand_number', esc_attr($_POST['hall_stand_number']));
}
// Display custom fields on order received page and order emails
add_action('woocommerce_thankyou', 'custom_new_checkout_field_thankyou');
function custom_new_checkout_field_thankyou($order_id)
{
if (get_post_meta($order_id, 'event_venue', true))
echo '<p><strong>Event/Expo &Venue:</strong> ' . get_post_meta($order_id, '_Event_venue', true) . '</p>';
if (get_post_meta($order_id, 'hall_stand_number ', true))
echo '<p><strong>Hall - Stand Number:</strong> ' . get_post_meta($order_id, '_hall_stand_number', true) . '</p>';
}
add_action('woocommerce_admin_order_data_after_billing_address', 'bbloomer_show_new_checkout_field_order');
function custom_new_checkout_field_order($order)
{
$order_id = $order->get_id();
if (get_post_meta($order_id, '_event_venue', true))
echo '<p><strong>Event/Expo - Venue:</strong> ' . get_post_meta($order_id, '_event_venue', true) . '</p>';
if (get_post_meta($order_id, '_hall_stand_number', true))
echo '<p><strong>Hall - Stand Number:</strong> ' . get_post_meta($order_id, '_hall_stand_number', true) . '</p>';
}
add_action('woocommerce_email_after_order_table', 'custom_new_checkout_field_emails', 20, 4);
function bbloomer_show_new_checkout_field_emails($order, $sent_to_admin, $plain_text, $email ) {
if (get_post_meta($order->get_id(), '_license_no', true))
echo '<p><strong>Event/Expo - Venue: </strong> ' . get_post_meta($order->get_id(), '_event_venue', true) . '</p>';
if (get_post_meta($order->get_id(), '_hall_stand_number', true))
echo '<p><strong>Hall - Stand Number:</strong> ' . get_post_meta($order->get_id(), '_hall_stand_number', true) . '</p>';
}