إضافة الصورة البارزة للمقالات تلقائيا

عند تغيير قالب احد المواقع لقالب جديد، كانت هناك مشكلة في ان القالب القديم كان يعتمد في اظهاره للصورة المصغرة على جلبها تلقائيا من محتوى المقالة نفسه ثم تصغيرها للحجم المناسب عن طريق timthumb، لكن القالب الجديد يعتمد فقط على وجود صورة بارزة معدة لكل مقالة، بالتالي فالقالب الجديد عند استخدامه لا يظهر اي صورة بارزة فالمقالات جميعها لم يتم اعداد صورة بارزة لها نظرا لطبيعة القالب المستخدم قديما.

auto-set-featured

الآن، للتغلب على هذه المشكلة كان الحل في استخدام اضافة Easy Add Thumbnail، هذه الاضافة تقوم باعداد الصورة الاولى المرفقة للمقالة كصورة بارزة تلقائياً، بالفعل نجح الامر وظهرت الصور البارزة لمعظم المقالات.

المشكلة الآن، ان هناك عدد لا بأس به مقالات لم تنجح الاضافة في اعداد صورة بارزة لهم، هذه المقالات تحتوي بداخلها صورا بالفعل لكن المشكلة ان الصور المدرجة داخل هذه المقالات غير مرفقة لهذه المقالة، فهي لسبب ما اما تم رفعها من داخل مكتبة الوسائط مباشرة ثم ادراجها في المقالة بعد ذلك،او انها مرفقة لمقالة اخرى وتم اعادة استخدامها في هذه المقالة.

الحل الآن قد يتطلب اما التعديل في القالب لدعم الطريقة التي كانت يعتمد عليها القالب القديم، او التعديل اليدوي على هذا العدد الكبير من المقالات واعداد صورة بارزة لهم، لكن بالنظر في محتوى هذه المقالات نجد ولحسن الحظ ان ووردبريس يقوم باضافة كلاس خاص بكل صورة يتم ادراجها من مكتبة الوسائط داخل المقالة:

class="aligncenter size-full wp-image-480"

كما نلاحظ ان الكلاس الاخير “wp-image-480” يحمل في نهايته رقما، هذه الرقم هو المعرف الرقم – الـ ID – الخاص بهذه الصورة المدرجة، شيء ممتاز يمكننا الاستفادة من هذه الميزة لاعداد الصورة البارزة لبقية المقالات.

الطريقة: سنقوم بالبحث داخل محتوى كل مقالة لا تحمل صورة بارزة، وباستخدام تعبير قياسي مناسب -regex- سنجلب المعرف الرقمي الخاص باول صورة مدرجة داخله والاعتماد عليه لاعداد الصورة البارزة.

الكود المستخدم:

/**
* Get the ID of the first image in post content.
*/
function image_id_from_content( $post_id ) {

	/* Search the post's content for the image id. */
	preg_match_all( '|wp-image-(.*?)"|i', get_post_field( 'post_content', $post_id ), $matches );

	/* If there is a match for the ID, return it. */
	if ( isset( $matches ) && !empty( $matches[1][0] ) ) {
		return $matches[1][0];
	}

	return false;
}

add_action( 'the_post', 'featured_auto_set' );
/**
* Set a featured image for the post.
* @uses image_id_from_content() 
*/
function featured_auto_set( $post ) {

	if ( ! has_post_thumbnail() ) {

		$image = image_id_from_content( $post->ID );

		if ( $image )  {
			
			set_post_thumbnail( $post->ID, $image );
			
		}
	}

}

شرح الكود السابق:
اولا قمنا بعمل دالة image_id_from_content تقوم بالبحث داخل محتوى المقالة اعتمادا على الـ ID الخاص بها وتقوم بارجاع الـ ID الخاص باول صورة مدرجة به.
ثانيا قمنا بعمل دالة featured_auto_set تقوم باعداد الصورة البارزة للمقالة باستخدام الـ ID الذي تقوم بجلبه الدالة السابقة، وقمنا بتطبيق هذه الدالة على الـ action hook المسمى the_post.
يمكنك استخدام هذه الكود كاضافة او في ملف functions الخاص بالقالب المستخدم، عن نفسي قمت باستخدامه داخل اضافة Easy Add Thumbnail مع الاختلاف بما يناسب سياق الاضافة.

الى هنا تنتهي مقالتنا اليوم، والى اللقاء في مقالة قادمة باذن الله 🙂 .

10 تعليق

  1. لو سمحت بدي اسألك كيف اوقف انو توصلني تعليقات الووردبرس ع الإيميل ؟!

  2. انا عندي مشكله بس حدثت الصور الي في صطح المكتب صارت كبيرة جدا كيف اصغرها

  3. سويت التعديل على الفنكشن حق الثيم وما زبطت
    طبعا الثيم صحيفة كنت استخدم ثيم قود نيوز الصور والمقالات كثيرة التي ادرجتها سابقا مع ثيم قود نيوز وانا اريد الانتقال الى ثيم صحيفة ارجو مساعدتي

  4. السلام عليكم انا مشكلتي لما اشارك المقالة على الفيس بوك او اضغط على زر اعجبني تظهر لي ان الصفحة غير موجودة والصورة التي تعرضها على اساس انها المقالة التي اريد نشرها غير المقالة تماما انما تكون صورة من مكتبتي ولا اعرف مالحل شكرا لكم

  5. عندي مشكل عند نشر احدى التدوينات في الفيس لا ترافقها الصورة البارزة الاصلية بل صورة اخرى قديمة من احدى المقالان القديمة في كثير من الاحيان فهل من حل

أضف تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *