// ثبت نوع پست سفارشی برای بازههای زمانی
function odt_register_custom_post_type() {
register_post_type('delivery_slot', array(
'labels' => array(
'name' => 'بازههای زمانی تحویل',
'singular_name' => 'بازه زمانی',
'add_new' => 'افزودن بازه',
'add_new_item' => 'افزودن بازه جدید',
'edit_item' => 'ویرایش بازه',
'new_item' => 'بازه جدید',
'view_item' => 'مشاهده بازه',
'menu_name' => 'زمانبندی تحویل'
),
'public' => false,
'show_ui' => true,
'menu_icon' => 'dashicons-clock',
'supports' => array('title'),
));
}
add_action('init', 'odt_register_custom_post_type');
// فیلدهای متاباکس برای تعیین روز هفته و ساعت شروع/پایان
function odt_add_custom_meta_boxes() {
add_meta_box('delivery_slot_meta', 'جزئیات بازه زمانی', 'odt_render_meta_box', 'delivery_slot', 'normal', 'high');
}
add_action('add_meta_boxes', 'odt_add_custom_meta_boxes');
function odt_render_meta_box($post) {
$days = ['شنبه','یکشنبه','دوشنبه','سهشنبه','چهارشنبه','پنجشنبه'];
$selected_day = get_post_meta($post->ID, '_delivery_day', true);
$start_time = get_post_meta($post->ID, '_delivery_start', true);
$end_time = get_post_meta($post->ID, '_delivery_end', true);
echo '
';
echo '
';
echo '
';
}
function odt_save_meta_fields($post_id) {
if (isset($_POST['delivery_day'])) {
update_post_meta($post_id, '_delivery_day', sanitize_text_field($_POST['delivery_day']));
update_post_meta($post_id, '_delivery_start', sanitize_text_field($_POST['delivery_start']));
update_post_meta($post_id, '_delivery_end', sanitize_text_field($_POST['delivery_end']));
}
}
add_action('save_post', 'odt_save_meta_fields');
// افزودن جدول در صفحه تسویه حساب
add_action('woocommerce_review_order_before_payment', 'odt_display_delivery_slots');
function odt_display_delivery_slots() {
$slots = get_posts([
'post_type' => 'delivery_slot',
'posts_per_page' => -1,
'orderby' => 'meta_value',
'meta_key' => '_delivery_day',
]);
if ($slots):
echo '
روز | ساعت | انتخاب |
---|---|---|
'.esc_html($day).' | '; echo ''.esc_html($start.' - '.$end).' | '; echo ''; echo ''; echo ' |
بازه تحویل: '.esc_html($slot).'
'; } } // نمایش بازه برای کاربر در صفحه "سفارشات من" add_action('woocommerce_order_details_after_order_table', 'odt_display_slot_to_customer'); function odt_display_slot_to_customer($order) { $slot = $order->get_meta('delivery_slot'); if ($slot) { echo 'بازه تحویل انتخابشده: '.esc_html($slot).'
'; } }