وردپرس و افزونه ووکامرس یکی از قدرتمندترین ابزارها برای راهاندازی فروشگاههای آنلاین هستند. اما گاهی برای مدیریت بهتر دادهها یا نمایش اطلاعات خاص در سایت، نیاز به دسترسی مستقیم به دیتابیس و اجرای کوئریهای SQL داریم. در این مقاله آموزشی، قصد داریم مهمترین و پرکاربردترین کوئریهای دیتابیس ووکامرس را برای استخراج اطلاعات سفارشات بررسی کنیم. این کوئریها به شما کمک میکنند تا دادههایی مثل شماره سفارش، تاریخ سفارش، مبلغ سفارش، اطلاعات مشتری و موارد دیگر را بهراحتی از دیتابیس استخراج کنید.
این مقاله برای توسعهدهندگان و مدیران سایتهای وردپرسی نوشته شده و شامل توضیحات کامل، مثالهای کاربردی و کدهای آماده است. با مطالعه این مقاله، میتوانید بهراحتی کوئریهای موردنیاز خود را بنویسید و در سایتتان استفاده کنید. بیایید شروع کنیم!
چرا کوئریهای دیتابیس ووکامرس مهم هستند؟
ووکامرس اطلاعات فروشگاه شما، از جمله سفارشات، محصولات و مشتریان را در جداول دیتابیس وردپرس ذخیره میکند. گاهی اوقات، گزارشگیریهای پیشفرض ووکامرس نیازهای شما را برآورده نمیکند. در این مواقع، استفاده از کوئریهای SQL به شما امکان میدهد تا اطلاعات را بهصورت سفارشی استخراج کرده و در سایت نمایش دهید یا برای تحلیلهای پیشرفته استفاده کنید.
در این مقاله، تمرکزمان روی کوئریهای مربوط به سفارشات ووکامرس است که در جدول wp_posts و جداول مرتبط مثل wp_postmeta ذخیره میشوند. همچنین نکات سئو و کدنویسی بهینه را رعایت کردهایم تا محتوای این مقاله برای موتورهای جستجو بهینه باشد و بهعنوان یک منبع آموزشی ارزشمند شناخته شود.
پیشنیازها برای استفاده از کوئریهای دیتابیس
قبل از شروع، مطمئن شوید که:
- به دیتابیس وردپرس خود دسترسی دارید (مثلاً از طریق phpMyAdmin یا افزونههایی مثل WP phpMyAdmin).
- پیشوند جداول دیتابیستان را میدانید (معمولاً wp_ است، اما ممکن است متفاوت باشد).
- با ساختار جداول ووکامرس آشنا هستید. مهمترین جداول عبارتند از:
- wp_posts: ذخیره اطلاعات اصلی سفارشات (با post_type = ‘shop_order’).
- wp_postmeta: ذخیره جزئیات سفارش مثل مبلغ، وضعیت پرداخت و اطلاعات مشتری.
- wp_woocommerce_order_items و wp_woocommerce_order_itemmeta: ذخیره اقلام سفارش و جزئیات آنها.
نکته: همیشه قبل از اجرای کوئریها، از دیتابیس خود نسخه پشتیبان تهیه کنید تا در صورت بروز خطا، دادههایتان از دست نرود.
1. نمایش 10 سفارش آخر ووکامرس
توضیح
یکی از پرکاربردترین نیازها، نمایش لیست آخرین سفارشات ثبتشده در فروشگاه است. این کوئری شماره سفارش و تاریخ ثبت آن را از جدول wp_posts استخراج میکند.
SELECT ID AS order_id, post_date AS order_date
FROM wp_posts
WHERE post_type = 'shop_order'
AND post_status IN ('wc-completed', 'wc-pending', 'wc-processing', 'wc-on-hold')
ORDER BY post_date DESC
LIMIT 10;
توضیحات کوئری
- جدول wp_posts: سفارشات ووکامرس بهصورت پستهایی با post_type = ‘shop_order’ ذخیره میشوند.
- فیلتر post_status: این کوئری سفارشاتی با وضعیتهای تکمیلشده، در انتظار پرداخت، در حال پردازش یا در انتظار بررسی را نمایش میدهد.
- مرتبسازی: با ORDER BY post_date DESC سفارشات از جدید به قدیم مرتب میشوند.
- محدودیت: با LIMIT 10 فقط 10 سفارش آخر نمایش داده میشود.
کد PHP برای نمایش در سایت
برای نمایش این اطلاعات در قالب وردپرس، میتوانید از کد زیر استفاده کنید:
global $wpdb;
$results = $wpdb->get_results("
SELECT ID AS order_id, post_date AS order_date
FROM {$wpdb->posts}
WHERE post_type = 'shop_order'
AND post_status IN ('wc-completed', 'wc-pending', 'wc-processing', 'wc-on-hold')
ORDER BY post_date DESC
LIMIT 10
");
echo 'آخرین سفارشات
';
echo ' ';
foreach ($results as $order) {
echo '- شماره سفارش: ' . esc_html($order->order_id) . ' - تاریخ: ' . esc_html($order->order_date) . '
';
}
echo '
';
2. نمایش سفارشات با مبلغ کل
توضیح
اگر بخواهید مبلغ کل هر سفارش را همراه با شماره سفارش و تاریخ نمایش دهید، باید جدول wp_postmeta را به کوئری اضافه کنید. مبلغ کل سفارش در این جدول با کلید meta_key = ‘_order_total’ ذخیره شده است.
SELECT p.ID AS order_id, p.post_date AS order_date, pm.meta_value AS order_total
FROM wp_posts p
LEFT JOIN wp_postmeta pm ON p.ID = pm.post_id
WHERE p.post_type = 'shop_order'
AND p.post_status IN ('wc-completed', 'wc-pending', 'wc-processing', 'wc-on-hold')
AND pm.meta_key = '_order_total'
ORDER BY p.post_date DESC
LIMIT 10;
توضیحات کوئری
- جوین با wp_postmeta: برای دسترسی به مبلغ سفارش، جدول wp_postmeta با شرط meta_key = ‘_order_total’ به کوئری اضافه شده است.
- فیلترها و مرتبسازی: مشابه کوئری قبلی، فقط سفارشات با وضعیتهای مشخص نمایش داده میشوند و از جدید به قدیم مرتب میشوند.
کد PHP برای نمایش
global $wpdb;
$results = $wpdb->get_results("
SELECT p.ID AS order_id, p.post_date AS order_date, pm.meta_value AS order_total
FROM {$wpdb->posts} p
LEFT JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id
WHERE p.post_type = 'shop_order'
AND p.post_status IN ('wc-completed', 'wc-pending', 'wc-processing', 'wc-on-hold')
AND pm.meta_key = '_order_total'
ORDER BY p.post_date DESC
LIMIT 10
");
echo 'آخرین سفارشات با مبلغ
';
echo ' ';
echo 'شماره سفارش تاریخ مبلغ (تومان) ';
foreach ($results as $order) {
echo '';
echo '' . esc_html($order->order_id) . ' ';
echo '' . esc_html($order->order_date) . ' ';
echo '' . number_format($order->order_total) . ' ';
echo ' ';
}
echo '
';
3. نمایش اطلاعات مشتری در سفارشات
توضیح
برای نمایش اطلاعات مشتری (مثل نام و ایمیل) همراه با سفارشات، باید دادههای مربوط به مشتری را از جدول wp_postmeta استخراج کنید. اطلاعات مشتری معمولاً با کلیدهایی مثل _billing_first_name، _billing_last_name و _billing_email ذخیره میشوند.
کوئری SQL
SELECT
p.ID AS order_id,
p.post_date AS order_date,
pm1.meta_value AS first_name,
pm2.meta_value AS last_name,
pm3.meta_value AS email
FROM wp_posts p
LEFT JOIN wp_postmeta pm1 ON p.ID = pm1.post_id AND pm1.meta_key = '_billing_first_name'
LEFT JOIN wp_postmeta pm2 ON p.ID = pm2.post_id AND pm2.meta_key = '_billing_last_name'
LEFT JOIN wp_postmeta pm3 ON p.ID = pm3.post_id AND pm3.meta_key = '_billing_email'
WHERE p.post_type = 'shop_order'
AND p.post_status IN ('wc-completed', 'wc-pending', 'wc-processing', 'wc-on-hold')
ORDER BY p.post_date DESC
LIMIT 10;
توضیحات کوئری
- چندین جوین: برای هر فیلد (نام، نام خانوادگی، ایمیل) یک جوین جداگانه با جدول wp_postmeta انجام شده است.
- فیلتر meta_key: هر جوین فقط دادهای با کلید خاص (مثل _billing_first_name) را استخراج میکند.
- کاربرد: این کوئری برای گزارشگیری یا نمایش اطلاعات مشتری در داشبورد ادمین بسیار مفید است.
کد PHP برای نمایش
global $wpdb;
$results = $wpdb->get_results("
SELECT
p.ID AS order_id,
p.post_date AS order_date,
pm1.meta_value AS first_name,
pm2.meta_value AS last_name,
pm3.meta_value AS email
FROM {$wpdb->posts} p
LEFT JOIN {$wpdb->postmeta} pm1 ON p.ID = pm1.post_id AND pm1.meta_key = '_billing_first_name'
LEFT JOIN {$wpdb->postmeta} pm2 ON p.ID = pm2.post_id AND pm2.meta_key = '_billing_last_name'
LEFT JOIN {$wpdb->postmeta} pm3 ON p.ID = pm3.post_id AND pm3.meta_key = '_billing_email'
WHERE p.post_type = 'shop_order'
AND p.post_status IN ('wc-completed', 'wc-pending', 'wc-processing', 'wc-on-hold')
ORDER BY p.post_date DESC
LIMIT 10
");
echo 'آخرین سفارشات با اطلاعات مشتری
';
echo ' ';
echo 'شماره سفارش تاریخ نام مشتری ایمیل ';
foreach ($results as $order) {
echo '';
echo '' . esc_html($order->order_id) . ' ';
echo '' . esc_html($order->order_date) . ' ';
echo '' . esc_html($order->first_name . ' ' . $order->last_name) . ' ';
echo '' . esc_html($order->email) . ' ';
echo ' ';
}
echo '
';
4. نمایش محصولات خریداریشده در هر سفارش
توضیح
برای نمایش اقلام خریداریشده در هر سفارش، باید به جداول wp_woocommerce_order_items و wp_woocommerce_order_itemmeta مراجعه کنید. این جداول اطلاعات محصولات سفارش دادهشده را ذخیره میکنند.
کوئری SQL
SELECT
p.ID AS order_id,
p.post_date AS order_date,
oi.order_item_name AS product_name,
oim.meta_value AS quantity
FROM wp_posts p
LEFT JOIN wp_woocommerce_order_items oi ON p.ID = oi.order_id
LEFT JOIN wp_woocommerce_order_itemmeta oim ON oi.order_item_id = oim.order_item_id
WHERE p.post_type = 'shop_order'
AND p.post_status IN ('wc-completed', 'wc-pending', 'wc-processing', 'wc-on-hold')
AND oi.order_item_type = 'line_item'
AND oim.meta_key = '_qty'
ORDER BY p.post_date DESC
LIMIT 10;
توضیحات کوئری
- جدول wp_woocommerce_order_items: شامل نام محصولات سفارش دادهشده است.
- جدول wp_woocommerce_order_itemmeta: شامل جزئیات مثل تعداد (_qty) یا قیمت محصول.
- فیلتر order_item_type: برای اطمینان از اینکه فقط اقلام اصلی سفارش (نه مالیات یا حملونقل) نمایش داده شوند.
کد PHP برای نمایش
global $wpdb;
$results = $wpdb->get_results("
SELECT
p.ID AS order_id,
p.post_date AS order_date,
oi.order_item_name AS product_name,
oim.meta_value AS quantity
FROM {$wpdb->posts} p
LEFT JOIN {$wpdb->prefix}woocommerce_order_items oi ON p.ID = oi.order_id
LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim ON oi.order_item_id = oim.order_item_id
WHERE p.post_type = 'shop_order'
AND p.post_status IN ('wc-completed', 'wc-pending', 'wc-processing', 'wc-on-hold')
AND oi.order_item_type = 'line_item'
AND oim.meta_key = '_qty'
ORDER BY p.post_date DESC
LIMIT 10
");
echo 'آخرین سفارشات با محصولات
';
echo ' ';
echo 'شماره سفارش تاریخ محصول تعداد ';
foreach ($results as $order) {
echo '';
echo '' . esc_html($order->order_id) . ' ';
echo '' . esc_html($order->order_date) . ' ';
echo '' . esc_html($order->product_name) . ' ';
echo '' . esc_html($order->quantity) . ' ';
echo ' ';
}
echo '
';
نکات مهم برای استفاده از کوئریها
- پیشوند جداول: اگر پیشوند دیتابیس شما چیزی غیر از wp_ است، آن را در کوئریها جایگزین کنید.
- امنیت: هنگام استفاده از کدهای PHP، از تابع esc_html برای جلوگیری از حملات XSS استفاده کنید.
- پشتیبانگیری: قبل از اجرای کوئریها، حتماً از دیتابیس خود بکاپ بگیرید.
- تست در محیط توسعه: کوئریها را ابتدا در یک محیط تستی اجرا کنید تا از صحت عملکردشان مطمئن شوید.
جمعبندی
در این مقاله، مهمترین کوئریهای SQL برای استخراج اطلاعات سفارشات ووکامرس را بررسی کردیم. از نمایش ساده شماره سفارش و تاریخ گرفته تا اطلاعات پیشرفتهتر مثل مبلغ کل، اطلاعات مشتری و محصولات خریداریشده. این کوئریها به شما کمک میکنند تا گزارشهای سفارشی ایجاد کنید، دادهها را در سایت نمایش دهید یا حتی برای تحلیلهای تجاری استفاده کنید.
اگر سوال یا نیاز به کوئری خاصی دارید، در بخش نظرات سایت اروندگرافیک با ما در میان بگذارید. همچنین، برای آموزشهای بیشتر در زمینه وردپرس و ووکامرس، مقالات دیگر ما را دنبال کنید!





