SHET24

نمایش اطلاعیه به نویسندگان در پنل مدیریت وردپرس بدون افزونه

نمایش اطلاعیه به نویسندگان در پنل مدیریت وردپرس بدون افزونه

اگه چند نویسنده روی سایتتون کار می‌کنن، احتمالاً پیش میاد که بخواید یک پیام مشترک رو به همه‌شون برسونید؛ مثلاً برنامه انتشار، قوانین نوشتن یا زمان تعمیر سایت. پنل مدیریت وردپرس جای خوبی برای نمایش این پیام‌هاست، چون نویسنده موقع آماده‌کردن نوشته حتماً واردش می‌شه.

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

چرا نباید از KJM Admin Notices استفاده کنیم

نسخه قبلی این آموزش افزونه KJM Admin Notices رو پیشنهاد می‌کرد. این افزونه رها شده و برای نسخه ۲.۰.۱ و نسخه‌های قدیمی‌ترش یک آسیب‌پذیری ثبت‌شده در Wordfence گزارش شده که وصله شناخته‌شده‌ای نداره. اگه این افزونه روی سایتتون نصبه، بهتره اول نسخه پشتیبان بگیرید، بعد غیرفعالش کنید و سراغ روش امن‌تری برید.

خود وردپرس برای نمایش پیام در صفحه‌های مدیریت، اکشن admin_notices رو داره. اکشن یک نقطه مشخصه که کد ما در اون اجرا می‌شه. از وردپرس ۶.۴ به بعد هم تابع wp_admin_notice() خروجی استاندارد اطلاعیه رو برامون می‌سازه.

قبل از اضافه‌کردن اطلاعیه چه چیزهایی رو بررسی کنیم

اول از منوی «کاربران ← همه کاربران» بررسی کنید که حساب افرادی که باید پیام رو ببینن، نقش «نویسنده» داشته باشه. این کد پیام رو به مدیر، ویرایشگر، مشارکت‌کننده و مشترک نشون نمی‌ده.

بررسی نقش نویسنده در فهرست کاربران وردپرس
بررسی نقش نویسنده در فهرست کاربران وردپرس

قبل از دست‌زدن به کد هم از سایتتون نسخه پشتیبان بگیرید. بهتره کد رو داخل فایل functions.php پوسته فرزند بذارید. پوسته فرزند یک نسخه جدا از پوسته اصلیه و با به‌روزرسانی پوسته اصلی، تغییراتش پاک نمی‌شن. اگه با کدنویسی راحت نیستید، بهتره از یک فرد فنی کمک بگیرید.

نمایش اطلاعیه به نویسندگان در پیشخوان وردپرس

از منوی «نمایش ← ویرایشگر پرونده پوسته» وارد ویرایشگر بشید. پوسته فرزند فعال رو انتخاب کنید، فایل functions.php رو باز کنید و کد زیر رو در انتهای فایل بذارید. اگه این گزینه رو نمی‌بینید، احتمالاً مدیر سایت یا سرویس میزبانی، ویرایش فایل از داخل پیشخوان رو بسته. در این شرایط باید فایل رو با مدیریت فایل هاست یا SFTP ویرایش کنید.

بازکردن فایل functions.php پوسته فرزند در ویرایشگر وردپرس
بازکردن فایل functions.php پوسته فرزند در ویرایشگر وردپرس
add_action( 'admin_notices', 'mihanwp_author_admin_notice' );

function mihanwp_author_admin_notice() {
    $current_user = wp_get_current_user();

    if ( ! in_array( 'author', (array) $current_user->roles, true ) ) {
        return;
    }

    $message = 'لطفاً نوشته‌های این هفته را تا پایان روز چهارشنبه برای بررسی ارسال کنید.';

    if ( function_exists( 'wp_admin_notice' ) ) {
        wp_admin_notice(
            esc_html( $message ),
            array(
                'type'        => 'info',
                'dismissible' => true,
                'id'          => 'mihanwp-author-notice',
            )
        );
    } else {
        printf(
            '<div class="notice notice-info is-dismissible"><p>%s</p></div>',
            esc_html( $message )
        );
    }
}

حالا تغییرات رو ذخیره کنید و با یک حساب نویسنده وارد پیشخوان بشید. پیام آبی‌رنگ بالای صفحه‌های معمولی مدیریت دیده می‌شه و نویسنده می‌تونه با علامت ضربدر اون رو ببنده. بخش جایگزین کد کمک می‌کنه پیام در نسخه‌های قبل از وردپرس ۶.۴ هم نمایش داده بشه، ولی بهتره خود وردپرس رو به یک نسخه پشتیبانی‌شده و به‌روز ارتقا بدید.

اگه دوست دارید جزئیات بیشتری درباره همین روش بدونید، آموزش نمایش پیام دلخواه در مدیریت وردپرس هم به کارتون میاد.

نمایش اطلاعیه داخل ویرایشگر بلوکی

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

add_action( 'enqueue_block_editor_assets', 'mihanwp_author_editor_notice' );

function mihanwp_author_editor_notice() {
    $current_user = wp_get_current_user();

    if ( ! in_array( 'author', (array) $current_user->roles, true ) ) {
        return;
    }

    $message = 'لطفاً نوشته‌های این هفته را تا پایان روز چهارشنبه برای بررسی ارسال کنید.';

    $script = sprintf(
        "wp.domReady( function() {
            wp.data.dispatch( 'core/notices' ).createNotice(
                'info',
                %s,
                {
                    id: 'mihanwp-author-editor-notice',
                    isDismissible: true
                }
            );
        } );",
        wp_json_encode( $message )
    );

    wp_add_inline_script( 'wp-edit-post', $script, 'after' );
}

بعد از ذخیره کد، یک نوشته رو با حساب نویسنده باز کنید. این بار اطلاعیه داخل ویرایشگر بلوکی هم دیده می‌شه. نویسنده می‌تونه پیام رو ببنده، ولی این انتخاب به‌صورت دائمی ذخیره نمی‌شه و ممکنه بعد از بارگذاری دوباره صفحه، پیام برگرده. برای ذخیره دائمی وضعیت بسته‌شدن، به کد بیشتری مثل ثبت تنظیم کاربر و درخواست AJAX نیاز دارید.

شخصی‌سازی نوع و متن اطلاعیه

متن داخل متغیر $message رو با پیام دلخواهتون عوض کنید. این متن در دو قطعه کد تکرار شده، پس یادتون نره هر دو بخش رو یکسان تغییر بدید.

  • info: پیام اطلاع‌رسانی معمولی با رنگ آبی
  • success: پیام موفقیت با رنگ سبز
  • warning: هشدار با رنگ زرد
  • error: خطای مهم با رنگ قرمز

برای تغییر رنگ، مقدار info رو در هر دو قطعه کد با یکی از گزینه‌های بالا عوض کنید. بهتره رنگ رو براساس اهمیت پیام انتخاب کنید. مثلاً برای یادآوری زمان تحویل نوشته، نوع info یا warning انتخاب مناسبیه.

نکات مهم قبل از ذخیره کد

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

جمع‌بندی

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

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

پرسش‌های رایج

آیا این اطلاعیه فقط به نویسنده‌ها نمایش داده می‌شه؟

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

آیا نویسنده می‌تونه اطلاعیه رو ببنده؟

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

این کد روی نسخه‌های قدیمی وردپرس هم کار می‌کنه؟

بخش پیشخوان یک حالت جایگزین برای نسخه‌های قبل از وردپرس ۶.۴ داره. ولی برای امنیت و سازگاری بهتر، وردپرس رو روی یک نسخه پشتیبانی‌شده و به‌روز نگه دارید.

می‌تونم همچنان از KJM Admin Notices استفاده کنم؟

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

نظر شما در این مورد چیه؟

  1. کاربر مهمان۲۱ بهمن ۱۳۹۷

    آقای حسینی ممنونم ازتون. گفته میشه استفاده زیاد از پلاگین سرعت رو میاره پایین و خب منطقی هم هست به دلیل استفاده از کدهای بیشتر و اضافی تر. اما خب با برنامه نویسی هم کدهای بیشتری اضافه میشن دیگه. تفاوت اساسی در چیه؟؟ کاش در این زمینه مطلبی منتشر کنین به همراه یه مثال. خیلی ممنون.

    • رضا راد۲۱ بهمن ۱۳۹۷

      سپاس. تفاوت اساسی در اینه که کدهای افزونه ها بیشتره

  2. کاربر مهمان۲۱ بهمن ۱۳۹۷

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

    • رضا راد۲۱ بهمن ۱۳۹۷

      درود لطفا توضیحات بیشتر

  3. U17314۲۰ بهمن ۱۳۹۷

    مثل همیشه عاااااااااااالی بود مرسی.

پشتیبانپشتیبانپشتیبانپشتیبانپشتیبان
تیم میهن وردپرس
پشتیبانپشتیبانپشتیبانپشتیبانپشتیبان
تیم میهن وردپرسدر حال حاضر آفلاین هستیم. لطفاً پیام بگذارید تا در اولین فرصت پاسخ دهیم.آفلاین

در حال بارگذاری...

هر سوالی دارید بپرسید.پاسخگوی شما هستیم.