نقش‌های وردپرس در سایت‌های نویسندگی به‌دلیل نیاز به مدیریت پیش‌نویس‌های خصوصی، نسخه‌بندی متن، چرخه بازخورد تحریریه، و کنترل حق نشر، تنظیمات خلاقانه اختصاصی می‌خواهند. یک نویسنده نباید فقط پست بنویسد؛ باید به پیش‌نویس‌های شخصی خودش، به نسخه‌های قبلی متن، و به بازخورد ویراستار دسترسی داشته باشد، بدون اینکه به پیش‌نویس‌های سایر نویسندگان یا به قراردادهای محرمانه انتشارات نفوذ کند. این تعادل میان آزادی خلاقانه و حفاظت از دارایی ادبی، ریشه اصلی نیاز به معماری نقش مبتنی بر خلاقیت است.

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

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

چرا نقش‌های پیش‌فرض وردپرس کافی نیستند؟

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

  • نبود تفکیک پیش‌نویس خصوصی: پیش‌نویس هر نویسنده باید فقط در اختیار خودش و ویراستار تخصیص‌یافته باشد.
  • نبود نسخه‌بندی معنادار: نسخه‌های Revision وردپرس فقط برای بازیابی هستند، نه برای چرخه بازخورد تحریریه.
  • نبود گردش کار تحریریه: یک متن از مرحله پیش‌نویس تا انتشار، چند مرحله ویرایش را طی می‌کند.
  • ریسک نقض حق نشر: قراردادهای انتشارات و داده پرداخت باید از دسترسی نویسندگان خارج باشد.

در سایت نویسندگی، پیش‌نویس یک دارایی خلاق است، نه یک محتوای عمومی.

برای درک مفاهیم پایه نقش و دسترسی، مطلب مدیریت نقش‌ها و دسترسی‌ها در وردپرس را ببینید. اگر به انتخاب افزونه مدیریت کاربران فکر می‌کنید، مطلب انتخاب افزونه مدیریت کاربران وردپرس راهنمای دقیقی است.

نقش‌های ضروری در سایت نویسندگی

نویسنده (Author-Writer)

دسترسی به پیش‌نویس‌های شخصی، مشاهده بازخورد ویراستار روی متن خودش، ارسال نهایی، بدون دسترسی به پیش‌نویس سایر نویسندگان.

ویراستار (Editor)

مشاهده پیش‌نویس‌های تخصیص‌یافته، ثبت بازخورد نسخه‌محور، تأیید نهایی، بدون دسترسی به قرارداد و پرداخت.

سرویراستار (Editor-in-Chief)

تأیید نهایی انتشار، مدیریت تحریریه، بدون دسترسی به داده پرداخت.

مدیر تحریریه (Editorial Manager)

تخصیص ویراستار به نویسنده، زمان‌بندی انتشار، مدیریت قرارداد، بدون دسترسی به محتوای پیش‌نویس.

ناظر حقوقی (Legal Reviewer)

دسترسی به قراردادها و توافق‌نامه‌های محرمانه، بدون دسترسی به متن پیش‌نویس.

چالش‌های دارایی ادبی

پیش از ورود به پیاده‌سازی، باید چالش‌های خاص این حوزه را دقیق بشناسیم.

۱. پیش‌نویس ناتمام

پیش‌نویس یک متن ناتمام، حساس‌ترین بخش یک اثر ادبی است. اگر نشت کند، ایده اصلی نویسنده از بین می‌رود. برای مطالعه بیشتر درباره متادیتا، مطلب کار با User Meta در وردپرس را ببینید.

۲. نسخه‌بندی معنادار

هر پیش‌نویس چندین نسخه دارد: نسخه اول، نسخه پس از بازخورد ویراستار، نسخه پس از ویرایش نهایی. سیستم Revision وردپرس برای این منظور طراحی نشده است. برای مطالعه بیشتر، مطلب پیاده‌سازی درست Custom Post Type نقطه شروع مناسبی است.

۳. گردش کار تحریریه

یک متن از چند مرحله عبور می‌کند: پیش‌نویس، بازبینی، ویرایش، تأیید، انتشار. هر مرحله نقش مسئول متفاوتی دارد. پیاده‌سازی این گردش کار نیازمند یک لایه State Machine است. برای مطالعه بیشتر، مطلب هوک‌های وردپرس: قلب تپنده توسعه مرور دقیقی از امکان‌های Custom Workflow ارائه می‌دهد.

۴. حق نشر و قرارداد

هر اثر نویسندگی بخشی از یک قرارداد است که وضعیت حق نشر، مدت و شرایط مالی خاصی دارد. دسترسی به این داده باید محدود به نقش‌های اداری باشد. برای مطالعه بیشتر، مطلب فیلدهای سفارشی ACF برای ساختاردهی قرارداد مفید است.

۵. بازخورد ویراستار

ویراستار باید بتواند روی یک پاراگراف خاص بازخورد بگذارد. این نیازمند ساختار متادیتای دقیق است. برای مطالعه بیشتر، مطلب توابع وردپرس برای دریافت اطلاعات نوشته راهنمای کاربردی است.

تنظیمات خلاقانه برای هر نقش

نقش دسترسی پیش‌نویس بازخورد تحریریه قرارداد
نویسنده پیش‌نویس شخصی دریافت مشاهده خلاصه
ویراستار تخصیصی ارائه خیر
سرویراستار همه دوره تأیید نهایی خیر
مدیر تحریریه خیر مدیریت تخصیص مدیریت
ناظر حقوقی خیر خیر دسترسی کامل

پیاده‌سازی با PHP

ابتدا CPT پیش‌نویس ادبی را می‌سازیم. برای مطالعه بیشتر، مطلب پیاده‌سازی درست Custom Post Type را ببینید.

function wk_register_manuscript_cpt() {
    register_post_type('wk_manuscript', array(
        'label' => 'دست‌نوشته‌ها',
        'public' => false,
        'show_ui' => true,
        'capability_type' => 'wk_manuscript',
        'capabilities' => array(
            'read_post' => 'read_wk_manuscript',
            'edit_post' => 'edit_wk_manuscript',
            'edit_posts' => 'edit_wk_manuscripts',
            'edit_others_posts' => 'edit_others_wk_manuscripts',
        ),
        'map_meta_cap' => true,
        'supports' => array('title', 'editor', 'author', 'revisions', 'custom-fields'),
    ));
}
add_action('init', 'wk_register_manuscript_cpt');

سپس نقش‌های سفارشی را می‌سازیم. برای درک بهتر هوک‌ها، مطلب هوک‌های وردپرس را ببینید.

function wk_register_writing_roles() {
    add_role('wk_writer', 'نویسنده', array(
        'read' => true,
        'edit_wk_manuscripts' => true,
        'publish_wk_manuscripts' => true,
        'read_wk_editorial_feedback' => true,
        'upload_files' => true,
    ));

    add_role('wk_editor', 'ویراستار', array(
        'read' => true,
        'edit_wk_manuscripts' => true,
        'edit_others_wk_manuscripts' => true,
        'write_wk_editorial_feedback' => true,
        'approve_wk_manuscripts' => true,
    ));

    add_role('wk_editor_in_chief', 'سرویراستار', array(
        'read' => true,
        'edit_wk_manuscripts' => true,
        'edit_others_wk_manuscripts' => true,
        'final_approve_wk_manuscripts' => true,
    ));

    add_role('wk_legal_reviewer', 'ناظر حقوقی', array(
        'read' => true,
        'read_wk_contracts' => true,
        'edit_wk_contracts' => true,
    ));
}
add_action('init', 'wk_register_writing_roles');

برای اعتبارسنجی و پاک‌سازی داده‌های ورودی، مطلب اعتبارسنجی داده‌ها و پاک‌سازی داده‌ها را ببینید.

نسخه‌بندی پیش‌نویس

نسخه‌بندی معنادار نیازمند یک لایه بالای Revision وردپرس است:

function wk_save_manuscript_version($manuscript_id, $author_id, $content, $stage) {
    if (!current_user_can('edit_wk_manuscripts')) {
        return new WP_Error('forbidden', 'دسترسی غیرمجاز');
    }
    $version_id = wp_insert_post(array(
        'post_type' => 'wk_manuscript_version',
        'post_status' => 'publish',
        'post_author' => $author_id,
        'post_title' => sprintf('نسخه %s', $stage),
        'post_content' => wp_kses_post($content),
    ));
    update_post_meta($version_id, 'wk_manuscript_id', $manuscript_id);
    update_post_meta($version_id, 'wk_version_stage', sanitize_key($stage));
    update_post_meta($version_id, 'wk_created_at', current_time('mysql'));
    return $version_id;
}

نکته کلیدی: هر نسخه باید مستقل و تغییرناپذیر باشد تا در صورت اختلاف، مرجع قابل استناد باشد. برای مطالعه بیشتر درباره Options API، مطلب کار با Options API در وردپرس را ببینید.

امنیت و حق نشر

سه لایه امنیتی ضروری است:

  1. محدودسازی دسترسی به پیش‌نویس بر اساس نویسنده و ویراستار تخصیصی.
  2. ثبت لاگ هر دسترسی به پیش‌نویس برای ممیزی و استناد حقوقی.
  3. محافظت از قرارداد با رمزنگاری و کنترل دسترسی مختص ناظر حقوقی.

برای مطالعه بیشتر درباره کدنویسی امن، مطلب نوشتن کد PHP امن برای وردپرس را ببینید. برای امن‌سازی احراز هویت، مطلب تقویت احراز هویت در وردپرس راهنمای عملی است. برای محافظت از فرم‌ها در برابر CSRF، مطلب نانس وردپرس و امنیت فرم را ببینید.

مرجع ادبی این حوزه در ویکی‌پدیا، مقاله Creative writing مرور خوبی از چارچوب حرفه‌ای نویسندگی ارائه می‌دهد.

پرسش‌های پرتکرار درباره تنظیمات نقش نویسندگی

آیا می‌توانم از نقش Author برای نویسنده استفاده کنم؟

خیر. Author به همه پست‌های خودش دسترسی دارد، اما هیچ مکانیزمی برای تفکیک پیش‌نویس از پست منتشرشده وجود ندارد. باید نقش سفارشی با Capability اختصاصی بسازید.

چگونه نسخه‌بندی معنادار پیاده‌سازی کنم؟

با یک CPT جداگانه برای هر نسخه. هر نسخه باید مستقل و تغییرناپذیر باشد و به نسخه اصلی متصل باشد.

آیا سرویراستار باید به همه پیش‌نویس‌ها دسترسی داشته باشد؟

بله، اما در چارچوب حرفه‌ای و با لاگ کامل. این دسترسی برای تأیید نهایی ضروری است.

چگونه قرارداد را از نویسنده جدا کنم؟

با نگهداری قرارداد در CPT جداگانه و نقش اختصاصی. نویسنده فقط به خلاصه قرارداد خودش دسترسی داشته باشد.

آیا استفاده از ACF برای ساختاردهی قرارداد مفید است؟

بله. مطلب فیلدهای سفارشی ACF و کاربردهای واقعی آن را ببینید.

اشتباهات رایج

اشتباه پیامد راه‌حل
نقش یکسان برای همه نویسندگان نشت پیش‌نویس Capability اختصاصی + رابطه نویسنده-ویراستار
استفاده از Revision به‌عنوان نسخه‌بندی عدم امکان ممیزی معنادار CPT اختصاصی برای نسخه‌ها
نبود گردش کار تحریریه انتشار بی‌کیفیت State Machine با مراحل معتبر
دسترسی نویسنده به قرارداد نقض محرمانگی حقوقی CPT جداگانه + نقش ناظر حقوقی
نبود لاگ دسترسی عدم امکان استناد حقوقی ثبت هر دسترسی در جدول اختصاصی

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

در سطح معماری، سایت نویسندگی با یک چالش بنیادین روبه‌روست: متن ادبی، برخلاف متن تجاری، یک دارایی خلاق با ارزش نامشخص است. یعنی نمی‌توان از قبل تعیین کرد که کدام متن ارزشمند است و کدام نه. بنابراین همه پیش‌نویس‌ها باید با بالاترین سطح محرمانگی محافظت شوند.

رویکرد پیشنهادی، معماری «Content Provenance» است. هر نسخه از متن با یک شناسه یکتا و امضای دیجیتال ثبت می‌شود تا در صورت اختلاف، مرجع قابل استناد باشد. این معماری، مشابه رویکردهای حرفه‌ای در پلتفرم‌های نشر دیجیتال است.

نکته دوم، بحث «Editorial Workflow Engine» است. گردش کار تحریریه باید به‌صورت داده‌محور تعریف شود، نه با کد سخت. این یعنی یک جدول از مراحل و انتقال‌های معتبر، و یک Policy Engine که تصمیم می‌گیرد هر نقش در هر مرحله چه دسترسی دارد.

نکته سوم، بحث «Contract-Aware Access» است. دسترسی به پیش‌نویس باید در چارچوب قرارداد فعال باشد. اگر قرارداد فسخ شود، دسترسی ویراستار نیز باید فوراً قطع شود. این نیازمند یک لایه اتصال بین Contract و Access Control است.

پیشنهادهای عملی برای پیاده‌سازی

سه توصیه عملی که در پروژه‌های واقعی مؤثر بوده‌اند:

  1. برای هر نسخه از متن، یک شناسه یکتا و یک Hash محتوا ذخیره کنید تا در صورت اختلاف، استناد حقوقی ممکن باشد.
  2. دسترسی ویراستار را به بازه قرارداد محدود کنید و پس از فسخ، به‌صورت خودکار قطع کنید.
  3. یک Endpoint عمومی برای تأیید مالکیت متن طراحی کنید تا در صورت سرقت ادبی، قابل استناد باشد.

اگر این چالش‌ها را در یک پروژه واقعی تجربه کرده‌اید، برای ما جالب است بدانید کدام بخش بیشترین زمان را گرفت: نسخه‌بندی، گردش کار تحریریه، یا محافظت از قرارداد. تجربه خود را در دیدگاه‌ها بنویسید.