function scu_submit_form_handler() {
// Check for nonce security
if (!check_ajax_referer('scu_public_nonce', 'nonce', false)) {
wp_send_json_error(['message' => 'Nonce verification failed.'], 403);
return;
}
// Sanitize user input
$sender_name = sanitize_text_field($_POST['sender_name']);
$sender_email = sanitize_email($_POST['sender_email']);
$sender_mobile = sanitize_text_field($_POST['sender_mobile']); // دریافت و پاکسازی موبایل
$subject = sanitize_text_field($_POST['subject']);
$message = sanitize_textarea_field($_POST['message']);
// --- 1. ذخیره پیام در دیتابیس ---
global $wpdb;
$table_name = $wpdb->prefix . 'smart_contact_messages';
$wpdb->insert(
$table_name,
[
'created_at' => current_time('mysql'),
'sender_name' => $sender_name,
'sender_email' => $sender_email,
'sender_mobile' => $sender_mobile, // ذخیره موبایل
'subject' => $subject,
'message' => $message,
],
['%s', '%s', '%s', '%s', '%s', '%s']
);
// --- 2. ارسال ایمیل به مدیران ---
$options = get_option('scu_settings', []);
$admin_emails = isset($options['admin_emails']) ? $options['admin_emails'] : get_option('admin_email');
if (!empty($admin_emails)) {
$admin_subject = "پیام جدید از فرم تماس: " . $subject;
$admin_body = "شما یک پیام جدید از طرف {$sender_name} ({$sender_email}) دریافت کردهاید.\n\n";
if (!empty($sender_mobile)) {
$admin_body .= "شماره موبایل: {$sender_mobile}\n\n";
}
$admin_body .= "متن پیام:\n{$message}";
$admin_headers = ['Reply-To: ' . $sender_name . ' <' . $sender_email . '>'];
wp_mail($admin_emails, $admin_subject, $admin_body, $admin_headers);
}
// --- 3. ارسال ایمیل پاسخ خودکار به کاربر ---
$sender_from_email = !empty($options['sender_email']) ? $options['sender_email'] : 'noreply@' . parse_url(home_url(), PHP_URL_HOST);
$reply_to_email = !empty($options['reply_to_email']) ? $options['reply_to_email'] : $admin_emails;
$email_template = !empty($options['email_template']) ? $options['email_template'] : "پیام شما را دریافت کردیم و به زودی پاسخ خواهیم داد.";
// جایگزینی متغیرها در قالب ایمیل
$placeholders = [
'{user_name}' => $sender_name,
'{user_email}' => $sender_email,
'{user_mobile}' => $sender_mobile,
'{form_subject}' => $subject,
'{form_description}'=> $message, // Note: you had form_description in settings but not handled. Added it here.
];
$user_email_body = str_replace(array_keys($placeholders), array_values($placeholders), $email_template);
// تنظیم هدرهای ایمیل برای پاسخ خودکار
$user_headers = [];
$user_headers[] = 'From: ' . get_bloginfo('name') . ' <' . $sender_from_email . '>';
if (!empty($reply_to_email)) {
$user_headers[] = 'Reply-To: ' . $reply_to_email;
}
wp_mail($sender_email, 'دریافت پیام شما', $user_email_body, $user_headers);
wp_send_json_success(['message' => 'Message sent successfully.']);
}
// این تابع جدید را به فایل ajax-handlers.php اضافه کنید
function scu_send_reply_from_inbox_handler() {
// Check nonce and user capabilities
if (!check_ajax_referer('scu_inbox_nonce', 'nonce', false) || !current_user_can('manage_options')) {
wp_send_json_error(['message' => 'Unauthorized action.'], 403);
return;
}
$message_id = isset($_POST['message_id']) ? intval($_POST['message_id']) : 0;
$reply_text = isset($_POST['reply_text']) ? sanitize_textarea_field($_POST['reply_text']) : '';
if (empty($message_id) || empty($reply_text)) {
wp_send_json_error(['message' => 'Missing data.'], 400);
return;
}
// Get original message details from DB
global $wpdb;
$table_name = $wpdb->prefix . 'smart_contact_messages';
$message = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table_name WHERE id = %d", $message_id));
if (!$message) {
wp_send_json_error(['message' => 'Message not found.'], 404);
return;
}
// --- ارسال ایمیل پاسخ از طرف مدیر ---
$options = get_option('scu_settings', []);
// از "ایمیل پاسخدهنده" به عنوان ایمیل "From" برای این پاسخ استفاده میکنیم
$from_email = !empty($options['reply_to_email']) ? $options['reply_to_email'] : get_option('admin_email');
$recipient_email = $message->sender_email;
$subject = 'پاسخ به پیام شما: ' . $message->subject;
$headers = [];
$headers[] = 'From: ' . get_bloginfo('name') . ' <' . $from_email . '>';
$headers[] = 'Content-Type: text/html; charset=UTF-8';
// ارسال ایمیل
$sent = wp_mail($recipient_email, $subject, wpautop($reply_text), $headers);
if ($sent) {
// اگر ایمیل با موفقیت ارسال شد، پیام را به عنوان "پاسخ داده شده" علامت بزن
$wpdb->update($table_name, ['is_answered' => 1], ['id' => $message_id]);
wp_send_json_success(['message' => 'Reply sent and message marked as answered.']);
} else {
wp_send_json_error(['message' => 'Failed to send email reply.']);
}
}
// این اکشن را هم اضافه کنید
add_action('wp_ajax_scu_send_reply_from_inbox', 'scu_send_reply_from_inbox_handler');
فروشگاه – برگه 45 – کرمان کمپ
Compare“کتری ۰.۸ لیتری آلوکس ALOCS CW-K02” به لیست مقایسه محصول اضافه شد.
-
ناموجود
- نصب سریع با دریچه مغناطیسی برای راحتی بیشتر
- ایگنیشن الکترونیکی برای روشن شدن سریع
- قدرت احتراق ۲۶۰۰ وات برای پخت سریع و مؤثر
- طراحی جمعوجور و سبک برای حمل آسان
- ساخته شده از مواد با کیفیت برای دوام طولانی
- مصرف گاز ۱۹۰ گرم در ساعت برای صرفهجویی در سوخت
ناموجود
-
ناموجود
- قدرت نور 350 لومنز
- وزن 63 گرم
- جنس سیلیکون و ABS
- دارای حالتهای نوری واید و فوکوس
- درگاه شارژ TYPE-C
- مقاوم در برابر رطوبت و گردوغبار IPX4
-
ناموجود
- قدرت گرمایش 16000 BTU
- طراحی تاشو و سبک
- ساختار از فولاد ضد زنگ
- دو مشعل پرقدرت
- کنترل شعله قابل تنظیم
- مناسب برای کمپینگ و فضای باز
-
ناموجود
- سبک و مناسب سفر
- باتری 800 میلیآمپری
- شارژ سریع USB-C
- لوله 1.2 متری انعطافپذیر
- ضدآب با استاندارد IPX6
- مصرف انرژی 5.55 وات
-
ناموجود
- وزن: 1400 گرم
- ولتاژ: 5 ولت DC
- باتری: 2200 میلیآمپر ساعت
- مدت شارژ: 3 الی 4 ساعت
- مدت کارکرد: 40 الی 50 دقیقه
- جریان آب: 2.5 تا ۳.5 لیتر بر دقیقه
-
ناموجود
- وزن سبک
- فولاد ضد زنگ
- طراحی تاشو
- 14 ابزار مختلف
- دسته راحت
- کاور برزنتی
-
ناموجود
- وزن سبک
- چندکاره
- ساخته شده از آلومینیوم و استیل
- طراحی کاربردی
- مناسب برای کمپینگ
- شامل ابزارهای متنوع
-
ناموجود
- وزن: 1056 گرم
- ابعاد: 77 × 13 سانتیمتر
- جنس بدنه: آلومینیوم و استیل
- تعداد ابزارها: 14 عدد
- کاربرد: کمپینگ و کوهنوردی
- طراحی: دسترسی سریع به ابزارها
-
ناموجود
- مناسب برای سه فصل مختلف
- قابلیت تبدیل به دونفره
- سازگار با قد تا 190 سانتیمتر
- عایق الیاف میکرو RV
- رویه پلیاستر آبگریز
- زیپ دو طرفه YKK
ناموجود
-
ناموجود
- طراحی مناسب برای سه فصل
- قابلیت کاپل شدن به کیسه خواب دو نفره
- عایق الیاف میکرو RV با نگهداری گرما
- رویه پلی استر آبگریز و ضد رطوبت
- زیپ دو طرفه برای دسترسی آسان
- مقاوم در برابر پارگی و پوسیدگی
ناموجود
-
ناموجود
- ✅ عایق پر غاز ۹۵٪، گرم تا -۱۹ درجه
- ✅ طراحی مومیایی برای حفظ گرما
- ✅ وزن ۹۰۰ گرم، سبک و کمحجم
- ✅ مناسب افراد قدبلند تا ۲۰۰ سانتیمتر
- ✅ جیب داخلی و نوار محافظ زیپ
- ✅ دوخت مقاوم، تولید ایران
ناموجود
-
ناموجود
- ظرفیت بالا – 150 لیتر فضای جادار.
- بادوام – مقاوم در برابر سایش و پارگی.
- ضد آب – محافظت در برابر رطوبت.
- دسته و بند محکم – حمل آسان و راحت.
- قابلیت تا شدن – اشغال فضای کم در زمان عدم استفاده.
- مناسب سفر و کمپینگ – ایدهآل برای جابجایی وسایل حجیم.
ناموجود
-
ناموجود
- مقاوم – تحمل وزن تا 150 کیلوگرم.
- ضدآب – مقاوم در برابر رطوبت.
- بدون درز – استحکام بالا.
- سبک – وزن 840 گرم.
- ابعاد – 150 × 300 سانتیمتر.
- رنگبندی – سبز، یشمی، نارنجی.
ناموجود
-
ناموجود
-
- تأییدشده توسط حرفهایها
- مناسب برای هر نوع کوهنوردی
- دوام و طول عمر بالا
- مقاوم در برابر سرما و سایش
- راحت، گرم و ایمن
- طراحی مدرن و کاربردی
ناموجود
-
ناموجود
-
- تأییدشده توسط حرفهایها
- مناسب برای هر نوع کوهنوردی
- دوام و طول عمر بالا
- مقاوم در برابر سرما و سایش
- راحت، گرم و ایمن
- طراحی مدرن و کاربردی
-
ناموجود
-
- وزن سبک: 158 گرم
- طول قابل تنظیم: 58 تا 132 سانتیمتر
- ساخته شده از آلومینیوم 7001
- دسته ارگونومیک: فوم EVA برای راحتی
- بند قابل تنظیم: نئوپرن برای استحکام
- نوک کاربید تنگستن: مقاوم در برابر سایش
ناموجود