ساختار پایه برای توسعه افزونه وردپرسی هماهنگ با CRM

مرور کلی برای توسعه‌دهندگانی که می‌خواهند افزونه‌های وردپرس سفارشی بنویسند و قابلیت‌های بیشتری به اکوسیستم CRM مبتنی بر LA24Core اضافه کنند، به‌همراه حداقل ساختار پایه لازم برای ساخت چنین افزونه‌ای.


LA24Core چیست؟

LA24Core یک افزونه وردپرسی ماژولار و سازمانی است که به عنوان پایه اکوسیستم CRM عمل می‌کند. معماری این سیستم بر اساس هوک‌های وردپرس طراحی شده تا توسعه‌دهندگان بتوانند بدون دست‌کاری کد اصلی، قابلیت‌های جدید اضافه کنند.
هر ویژگی اصلی — آیتم‌های منو، صفحات CRM، سطوح دسترسی، ویجت‌های داشبورد، تب‌های تاریخچه پروفایل و پنل‌های تنظیمات — از طریق فیلترها و اکشن‌هایی که LA24Core فراهم می‌کند ثبت می‌شوند.
نیازی به دست‌کاری کد اصلی LA24Core نیست. کافی است یک افزونه مستقل وردپرس بسازید، هوک‌های مناسب را وصل کنید و LA24Core به‌صورت خودکار افزودنی‌های شما را شناسایی می‌کند.

پیش‌نیازها

  • PHP 8.0 یا بالاتر
  • وردپرس 6.0 یا بالاتر
  • LA24Core نصب و فعال شده
  • آشنایی پایه با هوک‌های وردپرس (Action و Filter)

فلسفه توسعه

LA24Core از اصل **هوک‌محور** پیروی می‌کند:
  • تمام ثبت‌نام‌ها در زمان `plugins_loaded` از طریق هوک‌های وردپرس انجام می‌شود
  • نیازی به override فایل‌ها یا دست‌کاری کد اصلی نیست
  • هر افزونه توسعه یک پلاگین وردپرسی کاملاً مستقل است
  • بررسی وابستگی در زمان اجرا از طریق وجود تابع `la24_get_option`

معماری کلی

javascript
la24core/
├── includes/
│   ├── helpers/la24-core-functions.php   ← توابع کمکی اصلی
│   ├── abstracts/BaseViewController.php  ← کلاس پایه برای Controller ها
│   ├── plugins/                          ← ماژول‌های زیرسیستم (ums, email, knowledge …)
│   └── LA24Core.php                      ← مدیریت مرکزی
└── src/plugins/                          ← نقاط ورود React فرانت‌اند

مفاهیم کلیدی

مفهومنحوه عملکرد
آیتم‌های منوثبت از طریق اکشن `la24_dashboard_menu_items` + سینگلتون `LA24()->Menu()`
صفحات CRMثبت از طریق فیلتر `la24_endpoints`؛ هر اندپوینت به یک کلاس Controller متصل است
دسترسی‌هاثبت از طریق فیلتر `la24_capability`؛ در رابط مدیریت نقش‌ها نمایش داده می‌شود
ویجت‌های داشبوردثبت از طریق فیلتر `la24_widgets`؛ کلاس‌های ویجت از `\LoyalAxis\classes\services\widgets\Widget` ارث‌بری می‌کنند و برای افزونه‌های سفارشی از شناسه عددی `900` به بالا استفاده می‌کنند
تب‌های تاریخچه پروفایلثبت از طریق فیلتر `la24_history_user_profile`؛ هر تب یک Controller دارد
پنل‌های تنظیماتثبت از طریق فیلتر `la24_register_setting`؛ هر پنل یک کلاس Settings است

ساختار فایل‌های افزونه

هر افزونه‌ای که LA24Core را گسترش می‌دهد، یک پلاگین وردپرسی استاندارد است. این افزونه با اتصال callback هایش به هوک‌های LA24Core، قابلیت‌های جدید اضافه می‌کند. ساختار پایه زیر، حداقل کد لازم برای ساخت هر نوع افزونه‌ای را نشان می‌دهد.
یک پوشه جدید در مسیر `wp-content/plugins/` بسازید:
javascript
my-crm-extension/
├── my-crm-extension.php          ← فایل اصلی افزونه (هدر وردپرس)
└── includes/
    └── class-my-crm-hook.php     ← کلاس ثبت هوک‌ها

فایل اصلی افزونه

`my-crm-extension.php`:
php
<?php
/**
 * Plugin Name: My CRM Extension
 * Plugin URI:  https://example.com
 * Description: افزودن قابلیت‌های سفارشی به LA24Core CRM
 * Version:     1.0.0
 * Author:      نام شما
 * Text Domain: my-crm-ext
 */

defined( 'ABSPATH' ) || exit;

define( 'MY_CRM_EXT_PATH', plugin_dir_path( __FILE__ ) );
define( 'MY_CRM_EXT_URL',  plugin_dir_url( __FILE__ ) );

add_action( 'plugins_loaded', function () {
    // فقط در صورتی بارگذاری شود که LA24Core فعال باشد
    if ( ! function_exists( 'la24_get_option' ) ) {
        return;
    }

    require_once MY_CRM_EXT_PATH . 'includes/class-my-crm-hook.php';
    new My_CRM_Hook();
} );

کلاس ثبت هوک‌ها

`includes/class-my-crm-hook.php`:
php
<?php

defined( 'ABSPATH' ) || exit;

class My_CRM_Hook {

    public function __construct() {
        add_action( 'la24_dashboard_menu_items', array( $this, 'register_menu_items' ) );
        add_filter( 'la24_endpoints',            array( $this, 'register_endpoints' ), 10 );
        add_filter( 'la24_capability',           array( $this, 'register_capabilities' ), 10 );
        add_filter( 'la24_widgets',              array( $this, 'register_widgets' ), 10 );
        add_filter( 'la24_groups_permission',    array( $this, 'register_permission_groups' ), 10 );
        add_filter( 'la24_register_setting',     array( $this, 'register_settings' ), 10 );
        add_filter( 'la24_history_user_profile', array( $this, 'register_profile_history_tabs' ), 10 );
    }

    // هر متد در راهنمای بخش مربوطه توضیح داده شده است.
}

بررسی وابستگی

عبارت `if ( ! function_exists( 'la24_get_option' ) )` تضمین می‌کند که اگر LA24Core فعال نباشد، افزونه شما بدون خطا از بارگذاری صرف‌نظر می‌کند.
  • تابع `la24_get_option` در فایل `includes/helpers/la24-core-functions.php` تعریف شده و به محض بارگذاری LA24Core در دسترس است.
  • همیشه از اکشن `plugins_loaded` استفاده کنید (نه `init`) تا مطمئن شوید همه افزونه‌ها قبل از اجرای بررسی بارگذاری شده‌اند.

جدول مرجع سریع

هدفHook / تابعنوع
اضافه کردن آیتم منوی کناری`la24_dashboard_menu_items`Action
ثبت صفحه CRM`la24_endpoints`Filter
اضافه کردن مجوز`la24_capability`Filter
گروه‌بندی مجوزها در رابط`la24_groups_permission`Filter
اضافه کردن تب تاریخچه پروفایل`la24_history_user_profile`Filter
اضافه کردن دکمه عملیات پروفایل`la24_render_profile_action_btn`Filter
اضافه کردن ویجت داشبورد`la24_widgets`Filter
اضافه کردن پنل تنظیمات`la24_register_setting`Filter
بررسی دسترسی کاربر`la24_user_can( $user_id, $cap )`تابع
دریافت URL صفحه`la24_get_permalink_panel( $slug )`تابع
خواندن تنظیمات پلاگین`la24_get_option( $key, $group )`تابع
ذخیره تنظیمات پلاگین`la24_update_option( $key, $val, $group )`تابع