Kheradban Player
Professional, RTL-native video player for WordPress — chapters, multi-language subtitles, adaptive quality, watermarking, theater mode, smart sharing & more. Fully self-hosted, zero CDN.
by Kheradban Engineering Team · github.com/mhajloo/mh-video-player · website
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/mhajloo/mh-video-player/archive/refs/heads/master.zipReadme
خردبان پلیر، یک پلیر ویدیوی حرفهای، ساختهشده برای وردپرس فارسی
اگر تا امروز برای نمایش حرفهای ویدیو در وردپرس مجبور بودهاید بین یک پلیر ساده و بیامکانات یا یک سرویس خارجیِ وابسته به اینترنت بینالملل و CDN یکی را انتخاب کنید، خردبان پلیر دقیقاً برای همین شکاف ساخته شده: یک پلیر کاملاً حرفهای، کاملاً راستبهچپ و کاملاً خوداتکا — همهچیز از خود پلیر تا آیکونها و فونتها همراه افزونه میزبانی میشود و هیچ درخواستی به هیچ سرور خارجی ارسال نمیگردد.
🔗 دموی زنده: demo.hajloo.ir/kheradban
آنچه از یک پلیر حرفهای انتظار دارید، همه اینجاست:
- 🎬 کتابخانهٔ ویدیو اختصاصی — هر ویدیو را مثل یک محتوای واقعی در وردپرس مدیریت کنید؛ با شورتکد
[player id="…"]، ویجت اختصاصی المنتور، یا جایگزینی خودکار پلیر پیشفرض وردپرس نمایشش دهید. - 🗂️ فصلبندی و خط زمانی حرفهای — ویدیوهای طولانی را به فصلهای قابلکلیک تقسیم کنید، با لینک مستقیم و قابلاشتراک به هر لحظه.
- 💬 زیرنویس چندزبانه — هر تعداد زبان که بخواهید، همزمان و قابلانتخاب برای بیننده.
- 🎚️ چند کیفیت پخش با سوییچ خودکار — از کیفیت پایین تا 1080p و بالاتر، متناسب با سرعت اینترنت بیننده.
- ⏩ فهرست سرعت پخش دلخواه — سرعتهای استاندارد یا سفارشی خودتان را تعریف کنید.
- 🎞️ مقدمه و پایانبندی هوشمند — Intro/Outro با دکمهٔ رد شدن از مقدمه، بهصورت سراسری یا اختصاصی برای هر ویدیو.
- 📢 تبلیغ پیش از پخش — یک کلیپ تبلیغاتی پیش از شروع ویدیوی اصلی، برای درآمدزایی هوشمند.
- 💧 واترمارک و لوگو — متن یا تصویر، با موقعیت، اندازه، شفافیت و لینک دلخواه.
- 🖼️ پیشنمایش لحظهای روی نوار پخش — با نگهداشتن نشانگر روی نوار پیشرفت، بیننده پیشنمایش همان لحظه را میبیند.
- 🖥️ حالت سینمایی (Theater Mode) — تجربهٔ تماشای بدون حواسپرتی، تمامعرض.
- ⬇️ دانلود ویدیو — با یک کلیک، در صورت فعال بودن.
- 🔗 اشتراکگذاری هوشمند — کپی لینک، کپی لینک همراه با زمان دقیق پخش، و اشتراک مستقیم در تلگرام، واتساپ، ایکس و فیسبوک.
- ⏯️ ادامهٔ پخش از همانجا — کاملاً سمت مرورگر کاربر، بدون نیاز به حساب کاربری یا ذخیرهسازی سمت سرور.
- ⌨️ کلیدهای میانبر کاملاً قابل بازتعریف — پلیر را دقیقاً همانطور که خودتان میخواهید با کیبورد کنترل کنید.
- 🧩 یکپارچگی کامل با المنتور و ACF — ویجت اختصاصی با پشتیبانی از تگهای پویا؛ منبع ویدیو را حتی میتوانید به یک فیلد ACF دلخواه (مثلاً ویدیوی معرفی هر محصول) متصل کنید.
- 🛠️ Developer API و REST API کامل — برای توسعهدهندگانی که میخواهند پلیر را در قالب یا افزونهٔ خودشان به کار بگیرند.
- 🎨 پیشنمایش زندهٔ ظاهر — رنگ اصلی، رنگ تأکیدی و گردی گوشهها را در تنظیمات عوض کنید و همان لحظه، بدون هیچ build مجدد، در سایت ببینید.
- ⚡ بهینهسازی خودکار برای پخش فوری — هر ویدیویی که آپلود میشود، بهصورت خودکار برای پخش سریع (بدون بافرینگ اولیه) بازنویسی میشود؛ حتی فایلهای چندصد مگابایتی.
- 🔒 امنیت و حریم خصوصی بهصورت پیشفرض — بدون هیچ درخواست به CDN یا سرور خارجی؛ هر فرم دارای nonce و بررسی سطح دسترسی، و هر ورودی/خروجی بهدرستی پاکسازی و escape میشود.
و همهٔ اینها، از پنل مدیریت گرفته تا خود پلیر، صددرصد راستبهچپ و فارسی.
A professional, RTL-native (Persian-first) video player plugin for WordPress, built on top of Plyr. Fully self-hosted — Plyr, icons, and fonts all ship with the plugin, and it never makes a request to any third-party CDN. See Features below for the full technical breakdown.
🔗 Live demo: demo.hajloo.ir/kheradban
Table of contents
- Features
- Screenshots
- Requirements
- Installation
- Player tiers
- Building from source
- Development
- Contributing
- License
Features
- Video Library — a dedicated
kp_videopost type, authored either through native postmeta or ACF (interchangeable via a setting), placed with[player id="…"]/[player slug="…"], or by automatically replacing WordPress's own[video]shortcode andcore/videoblock. - Player — chapters and a professional timeline with deep links, multi-language subtitles, multiple quality renditions, a configurable speed list, Intro/Outro with a skip button, watermark and logo overlays, theater mode, download, share (copy link, copy link with timestamp, Telegram/WhatsApp/X/Facebook), client-side Resume Playback (no account required), and fully remappable keyboard shortcuts.
- Two player tiers — any Video Library entry is Professional (every feature above); a bare post/page video is Simple (Plyr's baseline controls only). See Player tiers.
- Elementor — a dedicated widget with a real Video Library picker, per-instance overrides, and dynamic-tag support (bind the video source to an ACF field or any other dynamic source).
- ACF — usable as an alternative Video Library storage backend.
- Developer API — procedural PHP helpers (
kheradban_player_render(),kheradban_player_get_video(),kheradban_player_has_video()), awindow.KheradbanPlayerJS facade, and a full REST API underkheradban-player/v1. - Admin panel — Dashboard, Video Library, Settings, Appearance (with a live preview — no rebuild step), Translations, Integrations, Tools (import/export/reset), About.
- Performance & security by default — lazy-loaded assets (nothing is enqueued on a page that never renders a player), fast-start optimization on every video upload (MP4
moovatom moved to the front, so playback starts instantly on large files), nonces and capability checks on every form, escaped output and sanitized/validated input throughout.
Screenshots
| Front-end player | Video Library (admin) |
|---|---|
![]() |
![]() |
| Appearance — live preview | Elementor widget |
|---|---|
![]() |
![]() |
Requirements
- WordPress 6.0+
- PHP 8.1+
Installation
- Download the latest release zip from the Releases page.
- In WordPress, go to Plugins → Add New → Upload Plugin and upload the zip.
- Activate Kheradban Player.
- Configure it from the Kheradban Player admin menu, then add your first video under Kheradban Player → Videos → Add New.
Player tiers
| Simple | Professional | |
|---|---|---|
| Applies to | Any bare post/page video (auto-replace, shortcode/block with no Video Library entry) | Any video backed by a Video Library (kp_video) entry |
| Controls | Play/Pause, Progress, Time, Duration, Volume, Mute, Speed, Fullscreen, PiP | Everything in Simple, plus every feature below |
| Chapters & timeline | — | ✅ |
| Subtitles | — | ✅ |
| Quality switching | — | ✅ |
| Intro / Outro | — | ✅ |
| Watermark & logo | — | ✅ |
| Theater mode | — | ✅ |
| Download | — | ✅ |
| Share | — | ✅ |
| Resume playback | — | ✅ |
| Remappable keyboard shortcuts | — | ✅ |
Tiers are derived automatically from where the video comes from — there's nothing to configure.
Building from source
The repository ships source SCSS/JS; a build step compiles the CSS used at runtime.
npm install
npm run build
npm run dev produces unminified CSS for local iteration; npm run watch:css rebuilds on change.
Development
- No PHP build step — the plugin uses its own PSR-4-style autoloader (
app/Autoloader.php), not Composer's. composer.jsononly pulls in dev tooling (PHPCS + WordPress Coding Standards) for linting:composer lint/composer lint:fix.- Coding standard: a PSR-12 base with
WordPress.Security.*/WordPress.DB.*/WP.I18nsniffs layered on top — seephpcs.xml.dist. - Architecture in brief: a reflection-based autowiring DI container, hook-registering modules, and everything programmed against contracts/interfaces rather than concrete classes — see the
app/tree (Core,Providers,Modules,Contracts,Services) for the layering.
Contributing
Issues and pull requests are welcome. For anything non-trivial, please open an issue first to discuss the change — especially for anything touching the player's Simple/Professional tier boundary or the no-CDN, self-hosted-assets rule, both of which are deliberate product constraints, not oversights.
License
GPL-2.0-or-later — see LICENSE.



