راهنمای توسعه‌دهندگان

مستندات کامل فنی افزونه 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) فعال

ساختار فایل‌ها

ساختار کامل پوشه‌ها و فایل‌های افزونه:

dima-shop/ ├── admin/ │ ├── dashboard.php │ ├── orders.php │ ├── reviews.php │ ├── flash-sales.php │ ├── coupons.php │ ├── rewards.php │ ├── reports.php │ ├── export.php │ ├── security-logs.php │ ├── updates.php │ ├── database-tools.php │ ├── guide.php │ └── settings.php ├── assets/ │ ├── css/ │ │ ├── style.css │ │ ├── frontend.css │ │ ├── admin-style.css │ │ ├── admin-settings.css │ │ ├── admin-dashboard.css │ │ ├── animations.css │ │ └── widgets.css │ ├── js/ │ │ ├── script.js │ │ ├── admin-script.js │ │ └── widgets.js │ └── images/ ├── includes/ │ ├── class-dima-product.php │ ├── class-dima-cart.php │ ├── class-dima-checkout.php │ ├── class-dima-gateway.php │ ├── class-dima-security.php │ ├── class-dima-seo.php │ ├── class-dima-attribute.php │ ├── class-dima-coupon.php │ ├── class-dima-reports.php │ ├── class-dima-wishlist.php │ ├── class-dima-compare.php │ ├── class-dima-review.php │ ├── class-dima-flash-sale.php │ ├── class-dima-quick-view.php │ ├── class-dima-reward.php │ ├── class-dima-catalog-mode.php │ ├── class-dima-rest-api.php │ ├── class-dima-pwa.php │ ├── class-dima-export.php │ ├── class-dima-notification.php │ ├── class-dima-update-manager.php │ ├── class-dima-ai.php │ ├── class-dima-gallery.php │ ├── class-dima-migrator.php │ ├── class-dima-import-demo.php │ ├── class-dima-user-roles.php │ ├── class-dima-otp.php │ └── class-dima-widgets.php ├── templates/ │ ├── shop.php │ ├── cart.php │ ├── checkout.php │ ├── single-product.php │ ├── account.php │ ├── account-wishlist.php │ ├── compare.php │ ├── quick-view.php │ ├── flash-sale.php │ ├── auth-otp.php │ ├── guide.php │ ├── contact.php │ ├── footer.php │ └── emails/ │ ├── order-confirmation.php │ ├── order-status.php │ └── welcome.php ├── dima-shop.php ├── uninstall.php └── readme.txt

نصب و راه‌اندازی

نصب از طریق FTP

  1. فایل ZIP افزونه را دانلود کنید
  2. فایل را در مسیر wp-content/plugins/ اکسترکت کنید
  3. از پیشخوان وردپرس، افزونه را فعال کنید
  4. کلید لایسنس را وارد کنید

نصب برنامه‌ای

// در 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 ارسال کنید.