راهنمای توسعهدهندگان
مستندات کامل فنی افزونه Dima Shop Pro - هوکها، فیلترها، REST API و توسعه ماژولهای جدید
معرفی
Dima Shop Pro یک افزونه فروشگاهی حرفهای برای وردپرس است که با هدف ارائه جایگزینی سبک، سریع و امن برای ووکامرس طراحی شده است. این افزونه با معماری ماژولار و APIهای کامل، امکان توسعه و سفارشیسازی بینهایت را برای توسعهدهندگان فراهم میکند.
سریع و سبک
حجم کمتر از ۵۰۰KB و ۱۰ برابر سریعتر از ووکامرس
امنیت چندلایه
محافظت در برابر SQL Injection، XSS و Brute Force
هوش مصنوعی
یکپارچگی با GapGPT برای تولید محتوا
- PHP 7.4 یا بالاتر
- WordPress 5.8 یا بالاتر
- MySQL 5.7 یا بالاتر
- SSL (HTTPS) فعال
ساختار فایلها
ساختار کامل پوشهها و فایلهای افزونه:
نصب و راهاندازی
نصب از طریق FTP
- فایل ZIP افزونه را دانلود کنید
- فایل را در مسیر
wp-content/plugins/اکسترکت کنید - از پیشخوان وردپرس، افزونه را فعال کنید
- کلید لایسنس را وارد کنید
نصب برنامهای
// در functions.php قالب
add_action('init', function() {
if (class_exists('Dima_Shop')) {
$shop = Dima_Shop::get_instance();
// دسترسی به کلاسهای داخلی
$product = Dima_Product::get_price(123);
$cart = Dima_Cart::get_instance();
}
});
هوکها و فیلترها
Action Hooks
| هوک | توضیح | پارامترها |
|---|---|---|
dima_before_shop |
قبل از نمایش فروشگاه | - |
dima_after_shop |
بعد از نمایش فروشگاه | - |
dima_before_product |
قبل از نمایش محصول | $product_id |
dima_after_product |
بعد از نمایش محصول | $product_id |
dima_before_cart |
قبل از نمایش سبد خرید | - |
dima_after_cart |
بعد از نمایش سبد خرید | - |
dima_after_order_created |
پس از ایجاد سفارش | $order_id, $user_id |
dima_after_order_status_changed |
تغییر وضعیت سفارش | $order_id, $old, $new |
dima_user_registered |
ثبتنام کاربر جدید | $user_id |
dima_before_checkout |
قبل از تکمیل خرید | - |
dima_after_checkout |
بعد از تکمیل خرید | - |
Filter Hooks
| فیلتر | توضیح | پارامترها |
|---|---|---|
dima_product_price |
تغییر قیمت محصول | $price, $product_id |
dima_cart_total |
تغییر جمع کل سبد | $total, $cart |
dima_order_total |
تغییر مبلغ سفارش | $total, $order_id |
dima_currency_symbol |
تغییر نماد ارز | $symbol |
dima_product_image |
تغییر تصویر محصول | $image, $product_id |
مثال استفاده
// اضافه کردن متن سفارشی قبل از فروشگاه
add_action('dima_before_shop', function() {
echo '<div class="custom-banner">تخفیف ویژه تا ۵۰٪</div>';
});
// تغییر قیمت محصول
add_filter('dima_product_price', function($price, $product_id) {
// ۱۰٪ تخفیف روی همه محصولات
return $price * 0.9;
}, 10, 2);
// تغییر نماد ارز
add_filter('dima_currency_symbol', function($symbol) {
return 'ت';
});
کلاسهای اصلی
Dima_Product
مدیریت محصولات و اطلاعات آنها
// دریافت قیمت محصول
$price = Dima_Product::get_price($product_id);
// دریافت موجودی
$stock = Dima_Product::get_stock($product_id);
// دریافت SKU
$sku = Dima_Product::get_sku($product_id);
// دریافت اطلاعات دستهبندی
$cat_data = Dima_Product::get_category_data($term_id);
Dima_Cart
مدیریت سبد خرید
$cart = Dima_Cart::get_instance();
// افزودن محصول
$cart->add_item($product_id, $quantity);
// بروزرسانی تعداد
$cart->update_item($product_id, $new_quantity);
// حذف محصول
$cart->remove_item($product_id);
// دریافت آیتمها
$items = $cart->get_items();
// دریافت جمع کل
$total = $cart->get_total();
// دریافت تعداد آیتمها
$count = $cart->get_item_count();
// اعمال کوپن
$cart->set_coupon($code, $discount);
Dima_Checkout
مدیریت فرآیند پرداخت
$checkout = Dima_Checkout::get_instance();
// ایجاد سفارش
$order_id = $checkout->create_order($customer_data, $items, $coupon, $discount);
// دریافت سفارش
$order = $checkout->get_order($order_id);
// بروزرسانی وضعیت
$checkout->update_order_status($order_id, 'completed');
Dima_Notification
ارسال ایمیل و پیامک
$notification = Dima_Notification::get_instance();
// ارسال ایمیل
$notification->send_email($to, $subject, $template_name, $variables);
// ارسال SMS با قالب
$notification->send_sms_with_template($phone, 'order', array(
'ORDER_ID' => $order_id,
'CUSTOMER_NAME' => $name,
'AMOUNT' => $amount,
));
REST API
افزونه یک REST API کامل برای یکپارچگی با اپلیکیشنهای موبایل و سرویسهای خارجی ارائه میدهد.
Authentication
curl -X GET "https://yoursite.com/wp-json/dima/v1/products" \
-H "Authorization: Bearer YOUR_API_KEY"
Endpoints
| Endpoint | Method | توضیح |
|---|---|---|
/dima/v1/products |
GET | دریافت لیست محصولات |
/dima/v1/products/{id} |
GET | دریافت جزئیات محصول |
/dima/v1/categories |
GET | دریافت دستهبندیها |
/dima/v1/cart |
POST | افزودن به سبد خرید |
/dima/v1/cart |
GET | دریافت سبد خرید |
/dima/v1/checkout |
POST | تکمیل خرید |
/dima/v1/orders |
GET | دریافت سفارشات |
/dima/v1/orders/{id} |
GET | جزئیات سفارش |
/dima/v1/user/login |
POST | ورود کاربر |
/dima/v1/user/register |
POST | ثبتنام کاربر |
مثال درخواست
// دریافت لیست محصولات
fetch('https://yoursite.com/wp-json/dima/v1/products', {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
})
.then(response => response.json())
.then(data => console.log(data));
// افزودن به سبد خرید
fetch('https://yoursite.com/wp-json/dima/v1/cart', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
product_id: 123,
quantity: 2
})
});
قالبها
برای سفارشیسازی قالبها، فایلها را در پوشه قالب خود کپی کنید:
your-theme/
└── dima-shop/
├── shop.php
├── cart.php
├── checkout.php
├── single-product.php
└── account.php
بارگذاری قالب سفارشی
// در functions.php قالب
add_filter('dima_template_path', function($template) {
$custom = get_stylesheet_directory() . '/dima-shop/' . basename($template);
if (file_exists($custom)) {
return $custom;
}
return $template;
});
شورتکدها
| شورتکد | توضیح | پارامترها |
|---|---|---|
[dima_shop] |
نمایش فروشگاه | - |
[dima_cart] |
سبد خرید | - |
[dima_checkout] |
تکمیل خرید | - |
[dima_product id="123"] |
محصول تکی | id |
[dima_flash_sale limit="8"] |
شگفتانگیز | limit |
[dima_categories_grid] |
گرید دستهبندی | columns, parent |
[dima_brands] |
برندها | - |
[dima_auth_otp] |
ورود/ثبتنام OTP | - |
یکپارچگی AI
استفاده از GapGPT در کدهای خود:
$ai = Dima_AI::get_instance();
// تولید توضیحات محصول
$description = $ai->generate_product_description(
'گوشی سامسونگ S24',
'موبایل',
'سامسونگ، گلکسی',
'professional'
);
// تولید عنوان SEO
$titles = $ai->generate_seo_title('گوشی سامسونگ S24');
// تولید کلمات کلیدی
$keywords = $ai->generate_keywords('گوشی سامسونگ S24');
// تولید تصویر
$image = $ai->generate_product_image(
'گوشی هوشمند مشکی با صفحه نمایش بزرگ',
'professional',
'1024x1024'
);
// ترجمه متن
$translated = $ai->translate_text('Hello World', 'fa', 'en');
API پیامک
$notification = Dima_Notification::get_instance();
// ارسال با قالب OTP
$notification->send_sms_with_template('09123456789', 'otp', array(
'CODE' => '12345',
'STORE_NAME' => 'دیما مارکت'
));
// ارسال با قالب سفارش
$notification->send_sms_with_template('09123456789', 'order', array(
'ORDER_ID' => '12345',
'CUSTOMER_NAME' => 'علی احمدی',
'AMOUNT' => '1,234,567',
'STORE_NAME' => 'دیما مارکت'
));
// ارسال با قالب تغییر وضعیت
$notification->send_sms_with_template('09123456789', 'status', array(
'ORDER_ID' => '12345',
'STATUS' => 'ارسال شده',
'STORE_NAME' => 'دیما مارکت'
));
توسعه درگاه پرداخت
// ساخت کلاس درگاه جدید
class Dima_Gateway_Custom {
public function process_payment($order_id) {
$order = Dima_Checkout::get_instance()->get_order($order_id);
// ارسال به درگاه
$response = wp_remote_post('https://gateway.com/api/pay', array(
'body' => array(
'amount' => $order->final_amount,
'callback' => home_url('/payment-callback/')
)
));
return array(
'url' => $response['redirect_url'],
'post_data' => array()
);
}
public function verify_payment($authority) {
// تایید پرداخت
return array(
'success' => true,
'ref_id' => $authority
);
}
}
ماژولهای سفارشی
// ساخت یک ماژول جدید
class Dima_Custom_Module {
public function __construct() {
add_action('init', array($this, 'init'));
add_action('dima_before_shop', array($this, 'display_banner'));
}
public function init() {
// ثبت Custom Post Type
register_post_type('dima_offer', array(
'labels' => array(
'name' => 'پیشنهادات ویژه'
),
'public' => true
));
}
public function display_banner() {
echo '<div class="custom-banner">پیشنهاد ویژه!</div>';
}
}
// راهاندازی ماژول
new Dima_Custom_Module();
ساختار دیتابیس
جداول اصلی
| جدول | توضیح |
|---|---|
wp_dima_orders |
سفارشات |
wp_dima_order_items |
آیتمهای سفارش |
wp_dima_coupons |
کوپنهای تخفیف |
wp_dima_reviews |
نظرات محصولات |
wp_dima_flash_sales |
محصولات شگفتانگیز |
wp_dima_reward_points |
امتیازات کاربران |
wp_dima_security_logs |
لاگهای امنیتی |
Query مثال
global $wpdb;
// دریافت سفارشات یک کاربر
$orders = $wpdb->get_results($wpdb->prepare(
"SELECT * FROM {$wpdb->prefix}dima_orders
WHERE user_id = %d
ORDER BY created_at DESC",
$user_id
));
// دریافت محصولات پرفروش
$top_products = $wpdb->get_results("
SELECT oi.product_id, SUM(oi.quantity) as total_sold, p.post_title
FROM {$wpdb->prefix}dima_order_items oi
JOIN {$wpdb->posts} p ON oi.product_id = p.ID
GROUP BY oi.product_id
ORDER BY total_sold DESC
LIMIT 10
");
امنیت
sanitize_* و esc_* برای ورودیها و خروجیها استفاده کنید.
// Nonce Verification
check_ajax_referer('dima_shop_nonce', 'nonce');
// Sanitize Inputs
$name = sanitize_text_field($_POST['name']);
$email = sanitize_email($_POST['email']);
$url = esc_url_raw($_POST['url']);
// Escape Outputs
echo esc_html($name);
echo esc_attr($value);
echo esc_url($url);
echo wp_kses_post($html);
// Capability Check
if (!current_user_can('manage_options')) {
wp_die('دسترسی غیرمجاز');
}
نمونه کدها
ایجاد ویجت سفارشی
class Dima_Custom_Widget extends WP_Widget {
public function __construct() {
parent::__construct(
'dima_custom_widget',
'ویجت سفارشی Dima Shop',
array('description' => 'نمایش محصولات سفارشی')
);
}
public function widget($args, $instance) {
echo $args['before_widget'];
$products = get_posts(array(
'post_type' => 'dima_product',
'posts_per_page' => $instance['count']
));
foreach ($products as $product) {
echo '<div class="product-item">';
echo '<h4>' . esc_html($product->post_title) . '</h4>';
echo '</div>';
}
echo $args['after_widget'];
}
public function form($instance) {
$count = $instance['count'] ?? 5;
echo '<p>';
echo '<label>تعداد محصولات:</label>';
echo '<input type="number" name="' . $this->get_field_name('count') . '" value="' . $count . '">';
echo '</p>';
}
}
// ثبت ویجت
add_action('widgets_init', function() {
register_widget('Dima_Custom_Widget');
});
سوالات متداول
// اضافه کردن فیلد
add_action('dima_after_product', function($product_id) {
$custom_field = get_post_meta($product_id, '_custom_field', true);
echo '<div class="custom-field">' . esc_html($custom_field) . '</div>';
});
// ذخیره فیلد
add_action('save_post_dima_product', function($post_id) {
if (isset($_POST['custom_field'])) {
update_post_meta($post_id, '_custom_field', sanitize_text_field($_POST['custom_field']));
}
});
برای اضافه کردن درگاه جدید، باید کلاس Dima_Gateway را گسترش دهید و متدهای process_payment و verify_payment را پیادهسازی کنید.
فایل قالب ایمیل را در templates/emails/ بسازید و با متد send_email از کلاس Dima_Notification ارسال کنید.