SHET25

الزامی کردن تصویر شاخص در وردپرس قبل از انتشار

الزامی کردن تصویر شاخص در وردپرس قبل از انتشار

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

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

آنچه در این مقاله می‌خوانید

چرا باید تصویر شاخص رو قبل از انتشار اجباری کنید؟

جلوگیری از انتشار نوشته‌های ناقص

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

یکدست نگه‌داشتن ظاهر سایت و آرشیو نوشته‌ها

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

کم‌کردن خطای نویسنده‌ها در سایت‌های چندنویسنده

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

قبل از شروع چه چیزهایی رو بررسی کنید؟

مطمئن‌شدن از پشتیبانی قالب از تصویر شاخص

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

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

مشخص‌کردن نوع نوشته‌هایی که باید تصویر شاخص داشته باشن

لازم نیست تصویر شاخص رو برای همه محتوای سایت اجباری کنید. برای نمونه، نوشته‌های وبلاگ معمولاً به عکس نیاز دارن؛ ولی صفحه تماس با ما یا برگه قوانین شاید نیازی به اون نداشته باشه. قبل از اضافه‌کردن کد، فهرست نوع محتواهای موردنظرتون رو مشخص کنید.

گرفتن نسخه پشتیبان و آزمایش تغییرات روی سایت آزمایشی

یک اشتباه کوچک در کد PHP ممکنه بخش مدیریت سایت رو از دسترس خارج کنه. پس اول نسخه پشتیبان بگیرید و تغییرات رو روی سایت آزمایشی انجام بدید. برای تهیه نسخه پشتیبان می‌تونید از راهنمای بک‌آپ گرفتن از سایت وردپرس کمک بگیرید.

الزامی کردن تصویر شاخص در وردپرس بدون افزونه

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

کد چطور جلوی انتشار نوشته بدون تصویر شاخص رو می‌گیره؟

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

<?php
/**
 * Require a featured image before publishing or scheduling posts.
 */
function mihanwp_featured_image_required_post_types() {
    return array( 'post' );
}

function mihanwp_post_needs_featured_image( $post_type, $post_status ) {
    return in_array( $post_type, mihanwp_featured_image_required_post_types(), true )
        && in_array( $post_status, array( 'publish', 'future' ), true );
}

function mihanwp_check_featured_image_in_rest( $prepared_post, $request ) {
    if ( ! mihanwp_post_needs_featured_image( $prepared_post->post_type, $prepared_post->post_status ) ) {
        return $prepared_post;
    }

    $post_id = absint( $request->get_param( 'id' ) );

    if ( $request->has_param( 'featured_media' ) ) {
        $featured_id = absint( $request->get_param( 'featured_media' ) );
    } else {
        $featured_id = $post_id ? get_post_thumbnail_id( $post_id ) : 0;
    }

    if ( ! $featured_id ) {
        return new WP_Error(
            'mihanwp_featured_image_required',
            'قبل از انتشار یا زمان‌بندی نوشته، یک تصویر شاخص انتخاب کنید.',
            array( 'status' => 400 )
        );
    }

    return $prepared_post;
}
add_filter( 'rest_pre_insert_post', 'mihanwp_check_featured_image_in_rest', 10, 2 );

function mihanwp_check_featured_image_in_classic_editor( $data, $postarr ) {
    if ( ! mihanwp_post_needs_featured_image( $data['post_type'], $data['post_status'] ) ) {
        return $data;
    }

    $post_id = isset( $postarr['ID'] ) ? absint( $postarr['ID'] ) : 0;

    if ( array_key_exists( '_thumbnail_id', $postarr ) ) {
        $featured_id = (int) $postarr['_thumbnail_id'];
        $featured_id = $featured_id > 0 ? $featured_id : 0;
    } else {
        $featured_id = $post_id ? get_post_thumbnail_id( $post_id ) : 0;
    }

    if ( ! $featured_id ) {
        $data['post_status'] = 'draft';
        add_filter( 'redirect_post_location', 'mihanwp_add_featured_image_error_flag' );
    }

    return $data;
}
add_filter( 'wp_insert_post_data', 'mihanwp_check_featured_image_in_classic_editor', 10, 2 );

function mihanwp_add_featured_image_error_flag( $location ) {
    return add_query_arg( 'mihanwp_featured_image_required', '1', $location );
}

function mihanwp_featured_image_admin_notice() {
    if ( empty( $_GET['mihanwp_featured_image_required'] ) ) {
        return;
    }

    echo '<div class="notice notice-error is-dismissible"><p>قبل از انتشار یا زمان‌بندی نوشته، یک تصویر شاخص انتخاب کنید.</p></div>';
}
add_action( 'admin_notices', 'mihanwp_featured_image_admin_notice' );

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

کد رو کجا قرار بدید؟

اضافه‌کردن کد با افزونه مدیریت کد

برای بیشتر کاربران تازه‌کار، افزونه مدیریت کد انتخاب راحت‌تریه. یک افزونه معتبر مدیریت قطعه‌کد رو از مخزن رسمی وردپرس انتخاب کنید، قطعه‌کد PHP تازه‌ای بسازید و کد بالا رو بدون خط اول <?php داخل اون قرار بدید. بعد اجرای کد رو برای بخش مدیریت یا کل سایت فعال کنید. قبل از نصب، تاریخ آخرین به‌روزرسانی، نسخه وردپرسی که افزونه با اون آزمایش شده و پاسخ‌های بخش پشتیبانی رو در صفحه رسمی افزونه ببینید.

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

اضافه‌کردن کد به قالب فرزند

اگه با فایل‌های قالب آشنا هستید، می‌تونید کد رو داخل فایل functions.php قالب فرزند قرار بدید. قالب فرزند نسخه‌ای وابسته به قالب اصلیه که تغییرات اختصاصی شما رو نگه می‌داره. کد رو مستقیم به قالب اصلی اضافه نکنید؛ چون ممکنه با به‌روزرسانی قالب از بین بره.

چطور الزام تصویر شاخص رو فقط برای نوشته‌ها فعال کنید؟

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

چطور برگه‌ها و نوع نوشته سفارشی رو هم پوشش بدید؟

برای برگه‌ها، مقدار page رو هم به آرایه تابع اول اضافه کنید. برای نمونه، خط بازگشت تابع باید به شکل زیر باشه:

return array( 'post', 'page' );

برای یک نوع نوشته سفارشی باید نام فنی اون رو هم به همین آرایه اضافه کنید. نام فنی با عنوانی که در پیشخوان می‌بینید فرق داره. مثلاً ممکنه عنوان «کتاب‌ها» باشه، ولی نام فنی اون book باشه.

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

add_filter( 'rest_pre_insert_book', 'mihanwp_check_featured_image_in_rest', 10, 2 );

برای برگه هم می‌تونید از فیلتر rest_pre_insert_page استفاده کنید. قبل از اجرا مطمئن بشید نوع نوشته موردنظرتون واقعاً از تصویر شاخص و REST API پشتیبانی می‌کنه و نام فنی اون رو درست وارد کرده‌اید.

پیام خطا رو چطور برای نویسنده‌ها واضح‌تر کنید؟

متن «قبل از انتشار یا زمان‌بندی نوشته، یک تصویر شاخص انتخاب کنید» دو بار در کد دیده می‌شه. می‌تونید هر دو مورد رو با راهنمای مخصوص سایتتون عوض کنید. برای نمونه بنویسید: «از نوار کناری نوشته، بخش تصویر شاخص رو باز و یک تصویر با نسبت ۱۶ به ۹ انتخاب کنید.» پیام باید هم مشکل رو بگه و هم مرحله بعدی رو روشن کنه.

چرا افزونه تخصصی قدیمی رو پیشنهاد نمی‌کنیم؟

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

نصب افزونه Require Featured Image
تصویری قدیمی از افزونه Require Featured Image

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

از کجا تصویر شاخص نوشته رو انتخاب کنید؟

  1. تنظیمات نوشته رو باز کنید: نوشته موردنظرتون رو در ویرایشگر بلوکی باز کنید. اگه نوار کناری دیده نمی‌شه، روی آیکون تنظیمات در بالای صفحه کلیک کنید.
  2. بخش تصویر شاخص رو پیدا کنید: در نوار کناری، زبانه «نوشته» رو انتخاب و بخش «تصویر شاخص» رو باز کنید. اگه محیط ویرایشگر براتون تازه‌ست، راهنمای ویرایشگر گوتنبرگ وردپرس بخش‌های اصلی اون رو توضیح می‌ده.
  3. تصویر رو انتخاب یا بارگذاری کنید: روی کادر انتخاب تصویر شاخص کلیک کنید. می‌تونید یک فایل تازه بارگذاری کنید یا تصویری رو از کتابخانه رسانه بردارید. اگه برای پیدا‌کردن عکس مناسب مشکل دارید، راهنمای پیدا کردن عکس برای مطالب سایت بدون دردسر کپی‌رایت رو ببینید.
  4. پیش‌نمایش رو بررسی کنید: بعد از انتخاب تصویر، پیش‌نمایش اون در نوار کناری دیده می‌شه. متن جایگزین، برش و ارتباط عکس با موضوع نوشته رو بررسی کنید و بعد سراغ انتشار برید.
بخش تصویر شاخص
بخش تصویر شاخص

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

چطور مطمئن بشید محدودیت درست کار می‌کنه؟

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

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

مشکلات رایج و راه‌حل‌ها

چرا نوشته بدون تصویر شاخص منتشر می‌شه؟

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

چرا بعد از انتخاب تصویر هنوز خطا می‌بینید؟

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

چرا بخش تصویر شاخص در ویرایشگر دیده نمی‌شه؟

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

چطور از تداخل کد یا افزونه با ویرایشگر جلوگیری کنید؟

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

روش بدون افزونه بهتره یا استفاده از افزونه؟

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

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

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

جمع‌بندی

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

یادتون نره انتشار مستقیم فقط یکی از مسیرهای ممکنه. نوشته زمان‌بندی‌شده، حذف تصویر موقع به‌روزرسانی، ویرایش سریع، حساب نویسنده و اتصال‌های مبتنی بر REST API رو هم امتحان کنید.

سؤال‌های پرتکرار

آیا خود وردپرس تنظیمی برای اجباری‌کردن تصویر شاخص داره؟

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

آیا می‌تونید تصویر شاخص رو فقط برای نوشته‌ها اجباری کنید؟

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

آیا این محدودیت برای نوشته‌های زمان‌بندی‌شده هم کار می‌کنه؟

کد این آموزش وضعیت future، یعنی نوشته زمان‌بندی‌شده، رو هم بررسی می‌کنه. بااین‌حال، زمان‌بندی رو روی سایت آزمایشی و با همون ویرایشگری که استفاده می‌کنید امتحان کنید.

اگه قالب از تصویر شاخص پشتیبانی نکنه باید چه کاری انجام بدید؟

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

آیا مدیر سایت هم باید حتماً تصویر شاخص انتخاب کنه؟

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

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

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

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

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