SHET24

افزودن قابلیت آپلود فایل در نظرات وردپرس

افزودن قابلیت آپلود فایل در نظرات وردپرس

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

کدی که می‌سازیم تصویرهای JPG و PNG و فایل PDF رو می‌پذیره، فایل رو به دیدگاه وصل می‌کنه و بعد از حذف دیدگاه، پیوست رو هم پاک می‌کنه. در ادامه، محدودیت‌های افزونه‌های آماده مثل Comment Image Boost و DCO Comment Attachment رو هم بررسی می‌کنیم. یادتون نره این روش برای فایل‌های عمومی و کم‌حجمه؛ اطلاعات خصوصی و حساس باید از راه فرم پشتیبانی امن یا سیستم تیکت دریافت بشن.

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

آپلود فایل در نظرات وردپرس چه کاربردی داره؟

چه سایت‌هایی به دریافت عکس یا فایل در دیدگاه‌ها نیاز دارن؟

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

قابلیت آپلود فایل در نظرات وردپرس
قابلیت آپلود فایل در نظرات وردپرس

چرا دیدگاه جای مناسبی برای فایل‌های خصوصی و حساس نیست؟

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

چه زمانی بهتره به‌جای دیدگاه از فرم پشتیبانی یا سیستم تیکت استفاده کنید؟

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

برای آپلود فایل در دیدگاه‌ها از افزونه استفاده کنیم یا کد؟

محدودیت افزونه‌های رایگان فعلی

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

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

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

این روش برای چه سایت‌هایی مناسبه؟

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

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

  • نسخه پشتیبان کامل: از فایل‌ها و پایگاه داده سایت بکاپ بگیرید و مطمئن بشید راه برگردوندن اون رو بلدین.
  • سایت آزمایشی: کد رو اول روی نسخه‌ای جدا از سایت اصلی امتحان کنید تا خطا روی کاربران واقعی اثر نذاره.
  • دسترسی به فایل‌های سایت: برای ساخت پوشه و فایل افزونه به File Manager، یعنی ابزار مدیریت فایل‌های هاست، یا یک اتصال امن مدیریت فایل نیاز دارین.
  • افزونه اختصاصی کوچک: کد رو داخل افزونه نگه می‌داریم و فایل‌های قالب رو مستقیم تغییر نمی‌دیم.
  • بررسی سقف آپلود: محدودیت وردپرس، PHP و هاست باید از سقفی که در کد می‌ذارید کمتر نباشه.

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

مراحل اضافه‌کردن آپلود فایل به فرم دیدگاه وردپرس

ساخت افزونه اختصاصی برای نگهداری کدها

داخل مسیر wp-content/plugins پوشه‌ای با نام mihanwp-comment-attachment بسازید. بعد داخل همین پوشه، فایل mihanwp-comment-attachment.php رو ایجاد کنید. همه کد بخش بعدی باید داخل همین فایل قرار بگیره.

اضافه‌کردن فیلد انتخاب فایل به فرم دیدگاه

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

آماده‌کردن فرم برای فرستادن فایل

فرم باید فایل رو با روش multipart/form-data بفرسته؛ یعنی فرم علاوه بر متن، داده فایل رو هم ارسال کنه. اسکریپت کوتاه داخل کد، فرم دیدگاه رو پیدا می‌کنه و این ویژگی رو به اون می‌ده. اگه قالب شما فرم دیدگاه کاملاً متفاوتی ساخته، باید این بخش رو جداگانه با همون قالب آزمایش کنید.

بررسی امنیت و اعتبار فایل قبل از ذخیره

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

ذخیره فایل در مسیر آپلودهای وردپرس

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

وصل‌کردن اطلاعات فایل به دیدگاه

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

نمایش پیوست زیر متن دیدگاه

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

حذف فایل پیوست بعد از پاک‌شدن دیدگاه

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

کد کامل آپلود فایل در نظرات وردپرس

کد زیر یک فایل JPG، PNG یا PDF تا سقف ۲ مگابایت رو می‌پذیره و دیدگاه دارای فایل رو با فیلتر تأیید وردپرس در صف بررسی مدیر می‌ذاره. اگه ذخیره فایل شکست بخوره، دیدگاه ناقص پاک می‌شه و کاربر پیام خطا می‌بینه. قبل از استفاده در سایت اصلی، کد رو روی سایت آزمایشی، نسخه فعلی وردپرس، نسخه PHP هاست، یک قالب پیش‌فرض، حساب مهمان و حساب واردشده امتحان کنید.

<?php
/**
 * Plugin Name: MihanWP Comment Attachment
 * Description: Adds one secure image or PDF attachment to WordPress comments.
 * Version: 1.0.1
 */

defined( 'ABSPATH' ) || exit;

const MIHANWP_COMMENT_FILE_MAX_SIZE = 2 * MB_IN_BYTES;
const MIHANWP_COMMENT_FILE_META_KEY = '_mihanwp_comment_attachment_id';

function mihanwp_comment_file_field() {
    ?>
    <p class="comment-form-attachment">
        <label for="mihanwp_comment_file">پیوست تصویر یا PDF <span>(اختیاری)</span></label>
        <input id="mihanwp_comment_file" name="mihanwp_comment_file" type="file" accept="image/jpeg,image/png,application/pdf">
        <small>فرمت‌های مجاز: JPG، PNG و PDF؛ حداکثر حجم: ۲ مگابایت.</small>
    </p>
    <?php wp_nonce_field( 'mihanwp_comment_file_upload', 'mihanwp_comment_file_nonce' ); ?>
    <?php
}
add_action( 'comment_form_after_fields', 'mihanwp_comment_file_field' );
add_action( 'comment_form_logged_in_after', 'mihanwp_comment_file_field' );

function mihanwp_comment_file_form_script() {
    ?>
    <script>
    document.addEventListener('DOMContentLoaded', function () {
        var form = document.getElementById('commentform');
        if (form) {
            form.enctype = 'multipart/form-data';
        }
    });
    </script>
    <?php
}
add_action( 'comment_form_after', 'mihanwp_comment_file_form_script' );

function mihanwp_comment_file_validate( $commentdata ) {
    if ( empty( $_FILES['mihanwp_comment_file']['name'] ) ) {
        return $commentdata;
    }

    $nonce = isset( $_POST['mihanwp_comment_file_nonce'] )
        ? sanitize_text_field( wp_unslash( $_POST['mihanwp_comment_file_nonce'] ) )
        : '';

    if ( ! wp_verify_nonce( $nonce, 'mihanwp_comment_file_upload' ) ) {
        wp_die( esc_html__( 'اعتبار فرم تموم شده. صفحه رو تازه کنید و دوباره فایل رو بفرستید.', 'mihanwp-comment-attachment' ) );
    }

    $file = $_FILES['mihanwp_comment_file'];

    if ( UPLOAD_ERR_OK !== (int) $file['error'] ) {
        wp_die( esc_html__( 'فایل به‌درستی دریافت نشد. دوباره امتحان کنید.', 'mihanwp-comment-attachment' ) );
    }

    if ( (int) $file['size'] > MIHANWP_COMMENT_FILE_MAX_SIZE ) {
        wp_die( esc_html__( 'حجم فایل باید حداکثر ۲ مگابایت باشه.', 'mihanwp-comment-attachment' ) );
    }

    $allowed_mimes = array(
        'jpg|jpeg|jpe' => 'image/jpeg',
        'png'          => 'image/png',
        'pdf'          => 'application/pdf',
    );

    $checked = wp_check_filetype_and_ext(
        $file['tmp_name'],
        sanitize_file_name( $file['name'] ),
        $allowed_mimes
    );

    if ( empty( $checked['type'] ) || empty( $checked['ext'] ) ) {
        wp_die( esc_html__( 'فقط فایل‌های JPG، PNG و PDF پذیرفته می‌شن.', 'mihanwp-comment-attachment' ) );
    }

    return $commentdata;
}
add_filter( 'preprocess_comment', 'mihanwp_comment_file_validate' );

function mihanwp_comment_file_hold_for_moderation( $approved, $commentdata ) {
    if ( ! empty( $_FILES['mihanwp_comment_file']['name'] ) ) {
        return 0;
    }

    return $approved;
}
add_filter( 'pre_comment_approved', 'mihanwp_comment_file_hold_for_moderation', 10, 2 );

function mihanwp_comment_file_fail( $comment_id, $message ) {
    wp_delete_comment( $comment_id, true );
    wp_die( esc_html( $message ) );
}

function mihanwp_comment_file_save( $comment_id, $comment_approved, $commentdata ) {
    if ( empty( $_FILES['mihanwp_comment_file']['name'] ) ) {
        return;
    }

    $nonce = isset( $_POST['mihanwp_comment_file_nonce'] )
        ? sanitize_text_field( wp_unslash( $_POST['mihanwp_comment_file_nonce'] ) )
        : '';

    if ( ! wp_verify_nonce( $nonce, 'mihanwp_comment_file_upload' ) ) {
        mihanwp_comment_file_fail( $comment_id, 'اعتبار فرم تموم شده. صفحه رو تازه کنید و دوباره فایل رو بفرستید.' );
    }

    require_once ABSPATH . 'wp-admin/includes/file.php';
    require_once ABSPATH . 'wp-admin/includes/image.php';
    require_once ABSPATH . 'wp-admin/includes/media.php';

    $allowed_mimes = array(
        'jpg|jpeg|jpe' => 'image/jpeg',
        'png'          => 'image/png',
        'pdf'          => 'application/pdf',
    );

    $uploaded = wp_handle_upload(
        $_FILES['mihanwp_comment_file'],
        array(
            'test_form' => false,
            'mimes'     => $allowed_mimes,
        )
    );

    if ( isset( $uploaded['error'] ) || empty( $uploaded['file'] ) ) {
        mihanwp_comment_file_fail( $comment_id, 'فایل ذخیره نشد و دیدگاه ثبت نشد. لطفاً فایل رو بررسی کنید و دوباره امتحان کنید.' );
    }

    $attachment_id = wp_insert_attachment(
        array(
            'post_mime_type' => $uploaded['type'],
            'post_title'     => sanitize_text_field( pathinfo( wp_basename( $uploaded['file'] ), PATHINFO_FILENAME ) ),
            'post_content'   => '',
            'post_status'    => 'inherit',
        ),
        $uploaded['file']
    );

    if ( is_wp_error( $attachment_id ) ) {
        wp_delete_file( $uploaded['file'] );
        mihanwp_comment_file_fail( $comment_id, 'فایل به کتابخانه رسانه اضافه نشد و دیدگاه ثبت نشد. دوباره امتحان کنید.' );
    }

    $metadata = wp_generate_attachment_metadata( $attachment_id, $uploaded['file'] );
    wp_update_attachment_metadata( $attachment_id, $metadata );
    update_comment_meta( $comment_id, MIHANWP_COMMENT_FILE_META_KEY, $attachment_id );
}
add_action( 'comment_post', 'mihanwp_comment_file_save', 10, 3 );

function mihanwp_comment_file_display( $comment_text, $comment = null ) {
    if ( ! $comment instanceof WP_Comment ) {
        return $comment_text;
    }

    $attachment_id = (int) get_comment_meta( $comment->comment_ID, MIHANWP_COMMENT_FILE_META_KEY, true );

    if ( ! $attachment_id ) {
        return $comment_text;
    }

    $url = wp_get_attachment_url( $attachment_id );

    if ( ! $url ) {
        return $comment_text;
    }

    if ( wp_attachment_is_image( $attachment_id ) ) {
        $output = wp_get_attachment_image(
            $attachment_id,
            'medium',
            false,
            array( 'loading' => 'lazy' )
        );
        $output = '<a href="' . esc_url( $url ) . '" target="_blank" rel="noopener noreferrer">' . $output . '</a>';
    } else {
        $output = '<a href="' . esc_url( $url ) . '" target="_blank" rel="noopener noreferrer">دانلود فایل پیوست</a>';
    }

    return $comment_text . '<div class="mihanwp-comment-attachment">' . $output . '</div>';
}
add_filter( 'comment_text', 'mihanwp_comment_file_display', 20, 2 );

function mihanwp_comment_file_delete( $comment_id ) {
    $attachment_id = (int) get_comment_meta( $comment_id, MIHANWP_COMMENT_FILE_META_KEY, true );

    if ( $attachment_id ) {
        wp_delete_attachment( $attachment_id, true );
    }
}
add_action( 'delete_comment', 'mihanwp_comment_file_delete' );

فایل رو ذخیره کنید و بعد در پیشخوان وردپرس به «افزونه‌ها ← افزونه‌های نصب‌شده» برید. افزونه «MihanWP Comment Attachment» رو فعال کنید. اگه سایت خطای فنی نشون داد، فایل افزونه رو از File Manager تغییر نام بدید تا وردپرس اون رو غیرفعال کنه؛ بعد خطای نگارشی یا ناسازگاری نسخه PHP رو بررسی کنید.

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

چطور نوع و حجم فایل‌های دیدگاه رو محدود کنیم؟

انتخاب فرمت‌های واقعاً ضروری

در کد بالا فقط JPG، PNG و PDF مجاز هستن. MIME یعنی شناسه‌ای که نوع واقعی فایل رو به نرم‌افزار معرفی می‌کنه. اگه PDF لازم ندارین، ورودی مربوط به pdf رو از آرایه $allowed_mimes در هر دو بخش اعتبارسنجی و آپلود حذف کنید و مقدار accept فیلد رو هم به image/jpeg,image/png تغییر بدید.

تعیین حداکثر حجم هر فایل

این خط سقف فایل رو روی ۲ مگابایت می‌ذاره:

const MIHANWP_COMMENT_FILE_MAX_SIZE = 2 * MB_IN_BYTES;

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

نمایش پیام خطای قابل‌فهم به کاربر

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

هماهنگ‌کردن محدودیت کد با تنظیمات هاست

مقدارهای upload_max_filesize و post_max_size در PHP و سقف وب‌سرور باید از محدودیت کد کمتر نباشن. اگه هاست فقط ۱ مگابایت رو قبول کنه، گذاشتن سقف ۲ مگابایت در کد باعث نمی‌شه فایل ۲ مگابایتی فرستاده بشه.

نکات امنیتی مهم برای فایل‌های پیوست دیدگاه‌ها

  • نوع واقعی فایل رو بررسی کنید: پسوند فایل به‌تنهایی قابل اعتماد نیست. کد از بررسی استاندارد وردپرس برای مقایسه نام، پسوند و نوع فایل استفاده می‌کنه.
  • نانس رو حذف نکنید: نانس جلوی بخشی از درخواست‌های جعلی رو می‌گیره، ولی جای بررسی نوع و حجم فایل، ضداسپم یا اسکن بدافزار رو نمی‌گیره.
  • فایل مجاز رو بی‌خطر فرض نکنید: حتی فایل PDF مجاز هم ممکنه محتوای مخرب داشته باشه. کد این آموزش فایل رو با ابزار امنیتی جداگانه اسکن نمی‌کنه.
  • فایل اجرایی و ناشناخته نپذیرید: فرمت‌هایی مثل PHP، JavaScript، فایل اجرایی و آرشیو ناشناخته نباید برای دیدگاه عمومی مجاز بشن.
  • دیدگاه دارای پیوست رو بررسی کنید: کد این دیدگاه‌ها رو با فیلتر تأیید وردپرس در صف بررسی می‌ذاره تا مستقیم در سایت منتشر نشن. بااین‌حال، خود فایل همچنان داخل مسیر عمومی آپلودها قرار می‌گیره.
  • برای ارسال‌های عمومی کنترل ضداسپم در نظر بگیرین: این کد محدودیت نرخ ارسال یا سقف مصرف فضای هر کاربر نداره. اگه فرم برای مهمان‌ها بازه، حجم مصرفی هاست و ارسال‌های خودکار رو زیر نظر بگیرین.
  • در صورت نیاز فقط اعضا رو مجاز کنید: از «تنظیمات ← گفت‌وگو» می‌تونید ثبت دیدگاه رو به کاربران واردشده محدود کنید. این کار مزاحمت رو کمتر می‌کنه، ولی امنیت کامل ایجاد نمی‌کنه.
  • وردپرس و PHP رو به‌روز نگه دارین: نسخه‌های پشتیبانی‌شده اصلاحات امنیتی تازه‌تری دارن. از فایل‌ها و پایگاه داده هم منظم نسخه پشتیبان بگیرید.

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

چطور قابلیت آپلود فایل رو آزمایش کنیم؟

  1. یک نوشته با دیدگاه فعال رو در پنجره ناشناس باز کنید و یک JPG یا PNG کم‌حجم همراه دیدگاه بفرستید.
  2. یک فایل غیرمجاز و یک فایل بزرگ‌تر از سقف بفرستید. هرکدوم باید پیام مناسب خودش رو نشون بده.
  3. در پیشخوان، بخش «دیدگاه‌ها» رو باز کنید و مطمئن بشید دیدگاه دارای فایل منتظر تأییده.
  4. دیدگاه رو تأیید و صفحه نوشته رو باز کنید. تصویر یا لینک PDF باید زیر همون دیدگاه دیده بشه.
  5. با ایجاد یک خطای کنترل‌شده در سایت آزمایشی، رفتار شکست ذخیره فایل رو هم بررسی کنید. نباید دیدگاهی بدون پیوست ثبت بشه و کاربر باید پیام روشن ببینه.
  6. دیدگاه آزمایشی رو برای همیشه حذف کنید و بررسی کنید پیوست هم از کتابخانه رسانه و هاست پاک شده باشه.
  7. همه مراحل رو در موبایل و با حساب مهمان و حساب واردشده انجام بدید. فیلد و تصویر نباید از عرض صفحه بیرون بزنن.

رفع مشکلات رایج آپلود فایل در دیدگاه‌ها

فیلد انتخاب فایل نمایش داده نمی‌شه

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

وردپرس فایل مجاز رو هم رد می‌کنه

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

فایل ذخیره می‌شه ولی زیر دیدگاه دیده نمی‌شه

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

فایل بیشتر از محدودیت هاست حجم داره

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

قالب یا افزونه دیدگاه با کد سازگار نیست

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

بعد از حذف دیدگاه، فایل روی هاست باقی می‌مونه

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

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

افزونه‌های آماده برای آپلود فایل در دیدگاه‌ها

Comment Image Boost برای فرستادن تصویر

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

DCO Comment Attachment برای PDF، صدا و سند

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

چرا بقیه گزینه‌ها انتخاب مناسبی برای آموزش اصلی نیستن؟

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

بالاخره کد بهتره یا افزونه؟

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

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

سؤالات رایج

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

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

فایل‌های پیوست‌شده کجا ذخیره می‌شن؟

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

آیا می‌شه فقط عکس یا PDF رو پذیرفت؟

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

چطور حجم فایل‌های ارسالی رو محدود کنیم؟

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

آیا می‌شه ارسال فایل رو به کاربران عضو محدود کرد؟

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

بعد از حذف دیدگاه چه اتفاقی برای فایل می‌افته؟

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

برای دریافت فایل‌های خصوصی چه روشی بهتره؟

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

جمع‌بندی

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

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

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

  1. U6092۲۹ دی ۱۴۰۴

    سلام
    از داخل ایران دسترسی به مخزن وردپرس نداریم. در صورت امکان این افزونه و یا اگر افزونه رایگان بهتری برای ضمیمه کردن پیوست به دیدگاه سراغ دارید را برای دانلود قرار بدهید.
    سپاسگزارم

    • تیم پشتیبانیتیم پشتیبانی۱ بهمن ۱۴۰۴

      درود بر شما
      در حال حاضر یک سری افزونه ها روی سایت قرار دادیم.
      از طریق این لینک میتونید مشاهده بفرمایید:
      https://mihanwp.com/download-wordpress-and-plugins/

      • U6092۱ بهمن ۱۴۰۴

        منظورم این بود که جناب راد اگر دبی تشریف دارند این افزونه را در انتهای همین پست برای دانلود قرار دهند.
        به هر حال سپاسگزارم

        • تیم پشتیبانیتیم پشتیبانی۳ بهمن ۱۴۰۴

          خواهش میکنم کاربر گرامی

  2. U332832۱۲ خرداد ۱۴۰۳

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

  3. U10748۱ اسفند ۱۳۹۶

    سلام . امکان هست کسی که میخواد آپلود کنه تصویر رو ویروسی چیزی هم قاطیش بزاره بترکونه سایتو ؟

    • رضا راد۲ اسفند ۱۳۹۶

      درود خیر اگر از هاست امن استفاده کنید

  4. کاربر مهمان۱۸ آذر ۱۳۹۶

    سلام یک مشگلی پیش امده برام تو مباحث اموزشیتون گفتید لینک سازی داخلی گفتید من انجام میدم ولی گزینه تایید تو کامنتا تو قسمت مدیریتم میاد (شبیه نظرات کاربران) تایید میکنم لینک میاد تو کامنتام البته وقتی اولین کامنت کاربر جواب میدم مشگل از چی میتونه باشه؟

    • تیم پشتیبانیتیم پشتیبانی۱۸ آذر ۱۳۹۶

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

  5. کاربر مهمان۱۴ آبان ۱۳۹۵

    بسیار عالی خیلی ممنون از مطلب مفیدتون

پشتیبانپشتیبانپشتیبانپشتیبانپشتیبان
تیم میهن وردپرس
پشتیبانپشتیبانپشتیبانپشتیبانپشتیبان
تیم میهن وردپرسخارج از ساعات کاری هستیم؛ دستیار هوش مصنوعی پاسخگوی شماست.هوش مصنوعی

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

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