manager - Co publisher
اافزونه دستیار هوشمند (سرور)
★ 0stars
0forks
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/alimousavi68/cop-manager/archive/refs/heads/main.zipمستندات جامع افزونه مدیریت دستیار ناشر (Co-Publisher Manager)
این مستند به منظور تشریح ساختار، تکنولوژیها، ماژولها، جریان داده و راهنمای توسعه افزونه Co-Publisher Manager (cop-manager) تنظیم شده است تا توسعهدهندگان و سیستمهای هوش مصنوعی بتوانند در کوتاهترین زمان ممکن با پروژه آشنا شده و توسعه آن را آغاز کنند.
۱. ساختار دایرکتوریها و سازماندهی پروژه
پروژه به صورت یک افزونه (Plugin) استاندارد وردپرس ساختاردهی شده است. ساختار دایرکتوریها و وظیفه هر یک به شرح زیر است:
cop-manager/
├── assets/ # فایلهای استاتیک و ظاهری
│ ├── css/
│ │ └── select2.min.css # استایلهای کتابخانه Select2 برای بهبود دراپداونها
│ ├── js/
│ │ └── select2.min.js # جاوااسکریپت کتابخانه Select2
│ ├── calendar.svg # آیکون مربوط به پست تایپ پلنها
│ └── user-cart.svg # آیکون مربوط به پست تایپ اشتراکها
├── inc/ # منطق و بخشهای پردازشی افزونه
│ ├── helper_functions.php # توابع کمکی، لودرهای دراپداون و منطق تولید کد لایسنس
│ └── restapi.php # تعریف نقاط پایانی (Endpoints) REST API جهت احراز هویت لایسنس
├── post-types/ # تعریف انواع پستهای سفارشی (Custom Post Types)
│ ├── plans.php # مدیریت پست تایپ پلنها (Plans) و متادیتاهای مربوطه
│ ├── resources.php # مدیریت پست تایپ منابع خبری (Resources) و سلکتورهای استخراج محتوا
│ └── subscriptions.php # مدیریت پست تایپ اشتراکها (Subscriptions) و فیلدهای اختصاصی
└── index.php # فایل اصلی و نقطه ورود افزونه (لودر ماژولها)
۲. تکنولوژیها و وابستگیهای کلیدی
افزونه بر پایه معماری ماژولار وردپرس توسعه یافته و از ابزارها و تکنولوژیهای زیر بهره میبرد:
| بخش / ابزار | تکنولوژی / کتابخانه | نسخه / توضیحات |
|---|---|---|
| زبان برنامهنویسی سمت سرور | PHP | نسخه 7.4 یا بالاتر |
| هسته سیستم | WordPress API | استفاده از سیستم Custom Post Types و Custom Meta Boxes و REST API |
| فرانتاند و رابط کاربری | HTML5 / CSS3 / Vanilla JS | استایلدهی سفارشی بخش مدیریت و جعبههای متادیتا |
| کتابخانه جاوااسکریپت | Select2 | جهت بهبود عملکرد و جستجوی آسان در لیستهای کشویی چندانتخابی (Multi-select) |
| قالب تصاویر | SVG | استفاده از تصاویر برداری برای آیکونهای منوی وردپرس بدون افت کیفیت |
۳. ماژولها و بخشهای عملکردی پروژه
پروژه از ۴ ماژول اصلی تشکیل شده است که وظایف و محدودههای مسئولیت هر کدام در ادامه توضیح داده شده است:
۳.۱. ماژول منابع خبری (Resources Module)
- فایل مربوطه:
post-types/resources.php - وظیفه: تعریف و مدیریت منابع خبری هدف جهت جمعآوری خودکار محتوا (توسط رباتهای کلاینت).
- قابلیتها:
- ثبت منبع خبری به عنوان یک پست تایپ با عنوان
resource. - ارائه فیلدهای سفارشی (Meta Box) برای تعیین سلکتورهای CSS مورد نیاز در استخراج محتوا:
- سلکتور عنوان (
title_selector) - سلکتور تصویر شاخص (
img_selector) - سلکتور لید/خلاصه خبر (
lead_selector) - سلکتور بدنه اصلی خبر (
body_selector) - سلکتور تاریخ انتشار (
bup_date_selector) - سلکتور دستهبندی (
category_selector) - سلکتور برچسبها (
tags_selector) - عناصر نادیده گرفته شده (
escape_elements) - لینک ریشه منبع (
source_root_link) - لینک فید خبری (
source_feed_link) - نیاز به ادغام لینک GUID (
need_to_merge_guid_link)
- سلکتور عنوان (
- ثبت منبع خبری به عنوان یک پست تایپ با عنوان
۳.۲. ماژول پلنها (Plans Module)
- فایل مربوطه:
post-types/plans.php - وظیفه: تعریف پلنهای مختلف اشتراک که محدودیتهای کلاینت را مشخص میکنند.
- قابلیتها:
- ثبت پلن به عنوان پست تایپ
plans(غیرفعال در خروجی فرانت و غیرقابل جستجو جهت امنیت). - فیلدهای متادیتای اختصاصی:
- مدت زمان اعتبار: تعداد روزهای فعال بودن پلن (
plan_duration). - زمانبندی کرون جاب: زمان تناوب اجرای درخواستها به ثانیه (
plan_cron_interval). - سقف انتشار روزانه: حداکثر تعداد پستهای قابل استخراج در روز (
plan_max_post_fetch).
- مدت زمان اعتبار: تعداد روزهای فعال بودن پلن (
- ثبت پلن به عنوان پست تایپ
۳.۳. ماژول اشتراکها (Subscriptions Module)
- فایل مربوطه:
post-types/subscriptions.php - وظیفه: تخصیص پلنها و منابع خبری به سایتهای مشتریان (کلاینتها) و مدیریت کدهای لایسنس.
- قابلیتها:
- پیوند دادن یک کاربر وردپرس، آدرس سایت هدف (کلاینت)، پلن انتخابی و منابع خبری مجاز به یکدیگر.
- تولید خودکار کد لایسنس اختصاصی رمزگذاری شده امن به محض ذخیرهسازی اشتراک جدید (با فرمت پیشوند
i8-و پسوند#). - امکان تعریف روزهای تشویقی (Extra Days) برای تمدید موقت اشتراک بدون تغییر در پلن پایه.
- استفاده از کتابخانه Select2 برای تسهیل انتخاب منابع خبری متعدد در Meta Box.
۳.۴. ماژول وبسرویس و اعتبارسنجی (REST API Module)
- فایل مربوطه:
inc/restapi.phpوinc/helper_functions.php - وظیفه: ارائه نقطه پایانی (Endpoint) برای بررسی و تایید لایسنسها توسط سایتهای مشتری.
- قابلیتها:
- ثبت آدرس REST API در مسیر
wp-json/license/v1/validate/به روشPOST. - دریافت
subscription_secret_codeوsubscription_site_urlاز کلاینت. - بررسی وجود اشتراک معتبر و عدم انقضای تاریخ آن (بر اساس تاریخ ثبت اشتراک + دوره پلن + روزهای تشویقی).
- بازگرداندن اطلاعات کامل لایسنس، ویژگیهای پلن و لیست دقیق مشخصات و سلکتورهای CSS منابع خبری مجاز در قالب پاسخ JSON با کد وضعیت
200در صورت موفقیت، یا پیغام خطای403در صورت نامعتبر بودن.
- ثبت آدرس REST API در مسیر
۴. اهداف تجاری و فنی پروژه
اهداف تجاری (Business Goals)
- مدیریت متمرکز لایسنسها: کنترل دسترسی سایتهای مشتری به افزونه همکارِ ناشر (دستیار کلاینت) از طریق یک سرور مرکزی.
- کسب درآمد و فروش پلنی: امکان محدودسازی حجم فعالیت کلاینتها (تعداد خبر در روز یا فواصل زمانی کرون جاب) بر اساس هزینه پرداخت شده.
- محافظت از منابع اختصاصی: عدم افشای سلکتورهای استخراج محتوا و تنظیمات فیدها در سمت کلاینت؛ ارسال داینامیک تنظیمات کانفیگ صرفاً به کلاینتهای مجاز.
اهداف فنی (Technical Goals)
- معماری سبک و بهینه: ثبت اطلاعات در بستر بومی وردپرس بدون نیاز به ساخت جداول سفارشی پیچیده در دیتابیس (استفاده از ساختار استاندارد
wp_postsوwp_postmeta). - امنیت ارتباطات: اعتبارسنجی جفتِ "آدرس دامنه" و "کد لایسنس اختصاصی" برای جلوگیری از سواستفاده از لایسنسها روی دامنههای دیگر.
- انعطافپذیری منابع: امکان تخصیص داینامیک دسترسی به منابع خبری مختلف به صورت اختصاصی برای هر مشتری.
۵. روابط، وابستگیها و جریان دادهها (Data Flow)
۵.۱. نمودار جریان اعتبارسنجی لایسنس (REST API Validation)
sequenceDiagram
autonumber
participant Client as سایت مشتری (Client)
participant API as نقطه پایانی REST API
participant DB as دیتابیس سرور (WP CPTs)
Client->>API: ارسال درخواست POST به /license/v1/validate/<br>(شامل URL دامنه و کد لایسنس)
API->>DB: جستجوی اشتراک با فیلدهای دامنه و لایسنس
alt اشتراک یافت نشد
DB-->>API: عدم انطباق دادهها
API-->>Client: بازگرداندن پاسخ 403 (License is not valid)
else اشتراک یافت شد
DB-->>API: بازگرداندن دادههای اشتراک (تاریخ ثبت، پلن، منابع مجاز)
Note over API: محاسبه تاریخ انقضا:<br>تاریخ ثبت + مدت پلن + روزهای تشویقی
alt تاریخ جاری > تاریخ انقضا (منقضی شده)
API-->>Client: بازگرداندن پاسخ false / 403
else اشتراک معتبر است
API->>DB: استخراج جزئیات پلن (محدودیتها) و منابع خبری (سلکتورهای CSS)
DB-->>API: تحویل مشخصات پلن و منابع
API-->>Client: بازگرداندن وضعیت 200 به همراه آرایهای از تنظیمات و سلکتورهای منابع مجاز
end
end
۵.۲. وابستگیهای اطلاعاتی موجود در دیتابیس (ERD منطقی)
er_diagram
subscriptions ||--|| plans : "وابسته به یک"
subscriptions }|--|{ resource : "شامل یک یا چند"
subscriptions ||--|| wp_users : "متعلق به"
| پست تایپ مبدا | فیلد متادیتا | نوع رابطه | پست تایپ مقصد | توضیحات |
|---|---|---|---|---|
subscriptions |
subscription_plan_id |
یک به یک (1:1) | plans |
هر اشتراک دارای یک پلن مشخص است. |
subscriptions |
subscription_resources_ids |
چند به چند (N:M) | resource |
هر اشتراک میتواند به چندین منبع خبری دسترسی داشته باشد (ذخیره به صورت آرایه از IDها). |
subscriptions |
subscription_user_id |
یک به یک (1:1) | wp_users |
هر اشتراک متعلق به یک کاربر ثبت شده در سیستم است. |
۶. راهنمای توسعه و استانداردهای کدنویسی
۶.۱. پیشنیازها و راهاندازی محیط توسعه
- یک وردپرس محلی (مانند LocalWP یا Laragon) با نسخه PHP ترجیحاً بالای 7.4 راهاندازی کنید.
- پوشه افزونه
cop-managerرا در دایرکتوریwp-content/plugins/قرار دهید. - از بخش مدیریت وردپرس، افزونه manager - Co publisher را فعال کنید.
- با فعالسازی افزونه، سه بخش جدید در منوی پیشخوان ظاهر میشود: منابع خبری، پلنها و اشتراکها.
۶.۲. نقاط ورودی مهم برای توسعه (Entry Points)
- ثبت ویژگیهای جدید برای منابع: جهت اضافه کردن سلکتورهای جدید یا تنظیمات پیشرفته در استخراج اخبار، به resources.php مراجعه کرده و فیلدها را در توابع
display_custom_meta_boxوsave_custom_meta_boxاضافه کنید. همچنین باید فیلد جدید را در تابعget_resource_dataواقع در helper_functions.php تعریف کنید تا در پاسخ خروجی REST API ارسال شود. - تغییر در منطق وبسرویس: برای تغییر پارامترهای ارسالی یا اعتبارسنجیها، فایل restapi.php را ویرایش نمایید.
۶.۳. استانداردهای کدنویسی (Coding Standards)
- امنیت دادهها: همواره هنگام ذخیرهسازی دادهها از توابع پاکسازی وردپرس نظیر
sanitize_text_fieldوsanitize_textarea_fieldاستفاده کنید (پیادهسازی شده در توابع ذخیرهسازی متاباکسها). - خروجی امن: دادههای چاپی در HTML باید با توابع امنیتی مانند
esc_attr،esc_htmlوesc_textareaفیلتر شوند. - قالب نامگذاری توابع: تمامی توابع کمکی باید دارای پیشوندهای یکتا (مانند
cop_) باشند تا از تداخل نام توابع (Function Collision) در سطح هسته وردپرس یا سایر افزونهها جلوگیری شود.