یکی از مشکلاتی که معمولاً نمایان می‌شود یک «خطای HTTP» نامشخص است  که می‌تواند هنگام آپلود یک فایل جدید از داخل ویرایشگر ظاهر شود:

خطای HTTP در آپلود رسانه
خطای HTTP در آپلود رسانه

معمولاً می‌توانید به سادگی منتظر بمانید تا این خطا ناپدید شود و پس از چند دقیقه دوباره آپلود خود را امتحان کنید. اگر خطای HTTP دوباره تکرار شود، ممکن است جلسه وردپرس شما منقضی شده باشد (WordPress session has expired). باید دوباره وارد سیستم شوید  و سپس بارگذاری خود را دوباره امتحان کنید.

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

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

گاهی اوقات هنگام شروع آپلود فایل های خود از طریق کتابخانه رسانه، می توانید با خطای « آپلود: نوشتن فایل روی دیسک ناموفق » مواجه شوید. معمولاً این مشکل زمانی رخ می دهد که پوشه آپلود شما روی Not Writable تنظیم شده باشد. می توانید مجوزهای سیستم فایل خود را از طریق  ابزار سلامت سایت وردپرس بررسی کنید.

مدیریت بلند مدت کتابخانه رسانه

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

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

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

افزونه WordPress Media Library Folders  محبوب ترین گزینه است:

افزونه WordPress Media Library Folders
افزونه WordPress Media Library Folders

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

افزونه WordPress Gallery MaxGalleria وردپرس
افزونه WordPress Gallery MaxGalleria وردپرس

ارتقاء به WordPress Media Library Folders Pro  ادغام بیشتری با افزونه NextGEN Gallery و Advanced Custom Fields فراهم می کند. همچنین به شما امکان می دهد دسته ها و برچسب ها را برای سازماندهی بیشتر فایل های خود ایجاد کنید.

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

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

افزونه Media Replace وردپرس را فعال کنید
افزونه Media Replace وردپرس را فعال کنید

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

Real Media Library یکی دیگر از مدیریت فایل‌ها و پوشه‌ها است که ارزش بررسی را دارد تا مدیریت فایل‌تان را ساده کنید.

افزونه Real Media Library وردپرس
افزونه Real Media Library وردپرس

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

۴ هک مفید کتابخانه رسانه وردپرس

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

۱. متادیتای سفارشی را به انواع پست پیوست اضافه کنید

هر زمان که یک فایل رسانه ای را آپلود می کنید، وردپرس یک نوع پست پیوست ایجاد می کند.

مانند هر نوع پست دیگری، پیوست‌ها در جدول wp_posts ثبت می‌شوند  و ابرداده مربوط به آنها را می‌توانید در جدول wp_postmeta  در پایگاه داده‌تان پیدا کنید:

پانل جزئیات پیوست پیش‌فرض
پانل جزئیات پیوست پیش‌فرض

جدول wp_posts  داده‌هایی را ذخیره می‌کند که شامل post_content (توضیحات پیوست)، post_excerpt  (عنوان پیوست)، post_author ، post_title ، post_status ، و post_mime_type است.

جدول wp_postmeta  هر نوع متادیتا را ذخیره می‌کند، مانند URL فایل پیوست شده، ابعاد تصویر و انواع mime، و فرمت فایل تصویری قابل تبادل (EXIF)¹ و فوق‌داده شورای ارتباطات مطبوعاتی بین‌المللی (IPTC)².

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

ابتدا باید تمام فیلدهای سفارشی لازم را به صفحه ویرایش رسانه اضافه کنید. شما می توانید این کار را با فیلتر کردن فیلدهای پیوست موجود از طریق  فیلتر attachment_fields_to_edit در wp-admin/includes/media.php انجام دهید :

function media_hacks_attachment_field_to_edit( $form_fields, $post ){

	// https://codex.wordpress.org/Function_Reference/wp_get_attachment_metadata
	$media_author = get_post_meta( $post->ID, 'media_author', true );
    
	$form_fields['media_author'] = array(
		'value' => $media_author ? $media_author : '',
		'label' => __( 'Author' )
	); 
	return $form_fields;
}
add_filter( 'attachment_fields_to_edit', 'media_hacks_attachment_field_to_edit', 10, 2 );

 

این تابع دو آرگومان دارد: آرایه $form_fields از فیلدهای فرم و شی $post. ابتدا get_post_meta مقدار “media_author” موجود را بازیابی می کند، سپس عنصر “media_author” به آرایه $form_fields اضافه  می شود.

 

در نهایت، callback $form_fields را برمی‌گرداند  (به کد Gist مراجعه کنید).

 

با این کار فیلد جدیدی در صفحه ویرایش رسانه نمایش داده  می شود که می توانید با انتخاب تصویر مربوطه از کتابخانه رسانه خود و کلیک بر روی پیوند ویرایش جزئیات بیشتر به آن دسترسی داشته باشید :

 

دسترسی به صفحه ویرایش رسانه وردپرس
دسترسی به صفحه ویرایش رسانه وردپرس

در صفحه حاصل، فیلد فوق داده سفارشی جدید خود را در پایین خواهید دید:

فیلد فوق داده جدید "نویسنده".
فیلد فوق داده جدید “نویسنده”.

مرحله بعدی ذخیره ورودی کاربر است. شما می توانید این کار را با اتصال یک تابع جدید به عمل edit_attachment انجام دهید:

<pre dir="ltr" data-mce-tabindex="0">function media_hacks_edit_attachment( $attachment_id ){
	if ( isset( $_REQUEST['attachments'][$attachment_id]['media_author'] ) ) {
    
		$media_author = $_REQUEST['attachments'][$attachment_id]['media_author'];
    
		update_post_meta( $attachment_id, 'media_author', $media_author );
	}
}
add_action( 'edit_attachment', 'media_hacks_edit_attachment' );

این تابع فقط یک آرگومان را نگه می دارد: $attachment_id فایل رسانه فعلی. ابتدا، تابع بررسی می کند که آیا مقدار معتبری برای فیلد متای سفارشی ارسال شده است یا خیر. سپس به لطف تابع update_post_meta مقدار را ثبت می  کند (به کد Gist مراجعه کنید ).

اکنون، می توانید مقدار “media_author”  را به لطف تابع get_post_meta بازیابی کنید:

$media_author = get_post_meta( $post->ID, 'media_author', true );

پس از آن، شما می توانید آن را در هر نقطه از جلویی نمایش دهید.

۲. فراداده EXIF ​​و IPTC را در صفحه ویرایش رسانه نمایش دهید

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

برای انجام این کار، باید اولین تابع callback را به صورت زیر تغییر دهید:

function media_hacks_attachment_fields_to_edit( $form_fields, $post ){

	// get post mime type
	$type = get_post_mime_type( $post->ID );

	// get the attachment path
	$attachment_path = get_attached_file( $post->ID );

	// get image metadata
	$metadata = wp_read_image_metadata( $attachment_path );

	if( 'image/jpeg' == $type ){

		if( $metadata ) {

			$exif_data = array(
				'aperture'          => 'Aperture', 
				'camera'            => 'Camera', 
				'created_timestamp' => 'Timestamp',
				'focal_length'      => 'Focal Length', 
				'iso'               => 'ISO', 
				'shutter_speed'     => 'Exposure Time', 
				'orientation'       => 'Orientation' );

			foreach ( $exif_data as $key => $value ) {

				$exif = $metadata[$key];
				$form_fields[$key] = array(
					'value' => $exif ? $exif : '',
					'label' => __( $value ),
					'input' => 'html',
					'html'  => "ID][$exif]' value='" . $exif . "' />
				);
			}
		}
	}
	return $form_fields;
}
add_filter( 'attachment_fields_to_edit', 'media_hacks_attachment_fields_to_edit', 10, 2 );

این قطعه از توابع وردپرس زیر استفاده می کند:

  • get_post_mime_type  نوع mime یک پیوست را بر اساس شناسه بازیابی می کند.
  • get_attached_file  مسیر فایل پیوست شده را بر اساس شناسه بازیابی می کند.
  • wp_read_image_metadata  در صورت موجود بودن، فراداده EXIF ​​یا IPTC را دریافت می کند.

اگر نوع mime تصویر “image/jpeg” باشد، و اگر ابرداده وجود داشته باشد، آرایه ای از ابرداده های مورد نیاز اعلام می شود و یک فیلد فرم برای هر عنصر در آرایه ایجاد می شود:

فیلدهای فراداده EXIF ​​و IPTC در جزئیات پیوست وردپرس
فیلدهای فراداده EXIF ​​و IPTC در جزئیات پیوست وردپرس

فیلدهای فرم این مثال کمی پیچیده تر هستند، زیرا ما یک مقدار برای عنصر فرم ‘html’ تنظیم می کنیم (به کد Gist مراجعه کنید). شما نیازی به ذخیره ابرداده های EXIF ​​و IPCT ندارید، زیرا وردپرس  هنگام آپلود تصاویر به طور خودکار آنها را در جدول wp_postmeta ذخیره می کند.

۳. Extended Metadata را در Frontend نمایش دهید

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

برای انجام این کار، می توانید این اطلاعات را با استفاده از  فیلتر the_content در wp-admin/includes/post.php به توضیحات پیوست اضافه کنید، مانند:

function media_hacks_the_content( $content ){
	global $post;

	if( is_attachment() && 'image/jpeg' == get_post_mime_type( $post->ID ) ) {

		$fields = wp_get_attachment_metadata( $post->ID );
		$meta = $fields['image_meta'];

		if( ! empty( $meta['camera'] ) ){
			$custom_content = "
			<ul>
				<li>Camera: {$meta['camera']}</li>
				<li>Created timestamp: {$meta['created_timestamp']}</li>
				<li>Aperture: {$meta['aperture']}</li>
				<li>Focal length: {$meta['focal_length']}</li>
				<li>ISO: {$meta['iso']}</li>
				<li>Shutter speed: {$meta['shutter_speed']}</li>
				<li>Orientation: {$meta['orientation']}</li>
			</ul>";
			$content .= $custom_content; 
		}
	}
	return $content;
}
add_filter( 'the_content', 'media_hacks_the_content' );

در اینجا تابع wp_get_attachment_metadata  فراخوانی می شود. اگر نوع پست فعلی “ضمیمه” باشد، و اگر نوع mime فعلی “تصویر/jpeg” باشد، فراداده تصویر موجود بازیابی می‌شود و برای ایجاد یک لیست نامرتب از فیلدها استفاده می‌شود که به محتوای پست اضافه می‌شود.

تابع callback $content را برمی گرداند  (این کد را در Gist ببینید):

فراداده EXIF ​​و IPTC در یک صفحه پیوست نمایش داده می شود
فراداده EXIF ​​و IPTC در یک صفحه پیوست نمایش داده می شود

در بالا می توانید پست پیوست جدید را با ابرداده ضمیمه توضیحات مشاهده کنید.

۴. یک آرشیو عکس منتشر کنید

خارج از جعبه، وردپرس بایگانی پیوست ها را نمایش نمی دهد. این اتفاق می افتد زیرا گزینه has_archive  از نوع پست پیوست روی false تنظیم شده است.

علاوه بر این، در حالی که  پارامتر پیش‌فرض post_status  شی $query  روی «publish» تنظیم شده است، پیوست پیش‌فرض post_status  روی «وارث» تنظیم شده است. این بدان معنی است که هیچ پیوستی در بایگانی نشان داده نخواهد شد مگر اینکه ما به صراحت query post_status  را روی “ارث بری” یا “any” تنظیم کنیم (برای اطلاعات بیشتر به پارامترهای نوع WP_Query مراجعه کنید).

با این اوصاف، برای نمایش آرشیو تصاویر، باید دو تابع تعریف کنید. اولین تابع آرگومان های یک نوع پست مشخص شده را فیلتر می کند و ویژگی ضمیمه has_archive  را روی true تنظیم می کند:

function media_hacks_register_post_type_args( $args, $post_type ){
	if( $post_type == 'attachment' ){
		$args['has_archive'] = true;
	}
	return $args;
}
add_filter( 'register_post_type_args', 'media_hacks_register_post_type_args', 10, 2 );

این تابع به  قلاب اقدام pre_get_posts متصل است، که پس از ایجاد پرس و جو، اما قبل از اجرای آن فعال می شود. شی $query  توسط مرجع ارسال می شود، نه با مقدار، به این معنی که هر تغییری در نمونه فعلی $query روی  شی $query  اصلی تأثیر می گذارد .

به همین دلیل، مهم است که بررسی کنید کدام کوئری را می‌خواهید تغییر دهید (این کد را در Gist ببینید ). سپس اگر https://yourdomain.com/?post_type=attachment را در مرورگر خود وارد کنید، باید یک آرشیو از تصاویر JPEG را ببینید:

آرشیو رسانه وردپرس
آرشیو رسانه وردپرس

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

خلاصه

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

آیا سوال دیگری در مورد کتابخانه رسانه وردپرس دارید؟ در بخش نظرات زیر به ما اطلاع دهید!


[۱]^ Exchangeable Image File format
[۲]^ International Press Telecommunications Council