دعم أنواع المنشورات المخصصة في قالب ووردبريس برمجيًا

لاشك أن نظام إدارة المحتوى ووردبريس قد اكتسب شهرته الكبيرة بسبب تجاوز كونه نظامًا مقتصرًاعلى التدوين، وقدرته على إنشاء أنواع المواقع المختلفة. ولعل أبرز المميزات التي عززت قدرة ووردبريس على تحقيق ذلك هو ميزة المنشورات المخصصة (Custom Post Types) التي مكنت أصحاب المواقع من إنشاء أنواع مختلفة من المحتوى في الموقع غيرالمقالات والصفحات.

في مقال اليوم سوف نشرح بشكل مفصل مفهوم نوع المنشور المخصص وأهميته، ونتعرف كيف يمكننا إنشاء أنواع المنشورات المخصصة برمجيًا ضمن قالب ووردبريس الخاص بك وتخرينها في قاعدة البيانات والتعامل معها من خلال الكود البرمجي.

أين يتم تخرين المنشورات في ووردبريس؟

يتم تخزين المنشورات بمختلف أنواعها في موقع ووردبريس ضمن جدول ضمن قاعدة البيانات باسم wp_posts، ويتم تحديد نوع المحتوى في العمود post_type ضمن هذا الجدول، من خلال هذا العمود نحدد إن كانت القيمة المخزنة هي مقال (post) أو صفحة (page) أو وسائط أومرفقات أو منشور مخصص وما إلى ذلك..

الجدول wp_posts الذي يخزن منشورات ووردبريس

يعد نوع المنشور (Post type) مهمًا جدًا للتعامل مع المحتوى في ووردبريس، وإذا كنت مطور قوالب ووردبريس فيمكنك إنشاء نوع منشور خاص وإنشاء قائمة جديدة في لوحة التحكم مخصصة لإدخال هذا المنشور، كما يمكنك تحريره وحذفه في بكل سهولة في موقعك الووردبريس.

في الفقرات التالية سوف نتعرف على طريقة إنشاء المنشور المخصص Custom Post Type بالخطوات العملية وكيفية عرضه في الواجهة الأمامية للموقع.

كيف يتم تعريف أنواع المنشورات المخصصة في ووردبريس؟

برمجيًا نوع المنشور المخصص هو عبارة عن منشورعادي لكن قيمة الحقل post_type له في قاعدة البيانات مختلفة عن أنواع المنشورات الافتراضية في ووردبريس.

على سبيل المثال في حال كنت تصمم قالب ووردبريس يعرض معلومات عن الكتب وأردت إنشاء نوع منشور خاص بك للإشارة إلى نوع محتوى الكتاب فعليك بداية التفكير في الحقول التي يحتاجها هذا الكتاب مثل (اسم مؤلف الكتاب، وتصنيف هذا الكتاب وصورة الغلاف وعدد الصفحات، ودارالنشر وما إلى ذلك..)

اقرأ أيضًا: ما هي أنواع المنشورات المخصصة في ووردبريس؟ وما إيجابياتها وسلبياتها

يمكنك القيام بذلك من خلال إنشاء ملف جديد ضمن مجلد القالب وتسميته باسم معبر عن نوع المنشور المخصص وليكن books.php ويفضل أن نحفظ هذا الملف ضمن مجلد مخصص باسم (includes أو inc) لسهولة التنظيم، ثم نكتب فيه كود مهمته استدعاء دالة تسجيل المنشور المخصص register_post_type()

تأخذ الدالة register_post_type الشكل العام التالي:

register_post_type( string $post_type, array|string $args = array() ): WP_Post_Type|WP_Error

وفي المثال التالي سوف نشرح طريقة استخدام هذه الدالة وتمريرالبرامترات لها، وهنا سوف نسجل منشور مخصص يمثل كتاب ونضيفه إلى قالب ووردبريس المجاني Onepress بالشكل التالي:

<?php

// Register Custom Post Type called Book

function create_book_cpt(){
	// Array of custom labels for our custom post type backend.
	$labels = array(
		'name'               =>  __( 'books', 'onepress' ), //الاسم العام لنوع المنشور وعادة ما يكون بصيغة الجمع
		'singular_name'      =>  __( 'book', 'onepress' ),  //اسم غرض واحد من هذا النوع من المنشورات ويكون عادة بصيغة المفرد
		'menu_name'          => __( 'كتب', 'onepress' ), // الاسم المستخدم في القائمة
		'name_admin_bar'     => __( 'كتاب', 'onepress' ), // السلسلة النصية إضافة منشور مخصص جديد في شريط تحكم الأدمن
		'add_new_item'       => __( 'أضف كتاب جديد', 'onepress' ), // السلسلةالنصية  لإضافة منشور مخصص جديد
		'new_item'           => __( 'كتاب جديد', 'onepress' ), // منشور مخصص جديد
		'edit_item'          => __( 'تحرير كتاب', 'onepress' ),// تحرير المنشور المخصص
		'view_item'          => __( 'عرض الكتاب', 'onepress' ), // عرض  المنشور المخصص
		'all_items'          => __( 'كافة الكتب', 'onepress' ), // نص القائمةالفرعية لعرض كافة الكتب
		'search_items'       => __( ' البحث عن كتاب', 'onepress' ),  // البحث عن كتاب
		'not_found'          =>  __( ' ما من كتب بعد ', 'onepress' ), //  السلسلة التي تعرض عند عدم وجود منشورات مننوع كتاب
		'not_found_in_trash' => __( ' لا توجد كتب في سلة المهملات', 'onepress' ), //السلسلة التي تعرض عند عدم وجود منشورات من نوع كتابة في سلة المهملات
		'featured_image'        => __( '   غلاف الكتاب  ', 'onepress' ), //غلاف الكتاب بدل الصورة المميزة للكتاب
		'set_featured_image'    => __( 'قم بتعيين غلاف للكتاب', 'onepress' ), // قم بتعيين غلاف الكتاب
		'remove_featured_image' => __( ' أزل غلاف الكتاب', 'onepress' ), // أزل غلاف الكتاب
		'use_featured_image'    => __( ' استخدم هذا الغلاف للكتاب', 'onepress' ), // استخدم هذه الصورة كغلاف للكتاب
		'items_list'            =>__( ' لائحة الكتب', 'onepress' ), 
		'items_list_navigation' => __( ' تنقل في لائحة الكتب', 'onepress' ),
		'filter_items_list'     => __( ' تصفية عناصر اللائحة', 'onepress' ), 
	);

	$args = array(
		 'label'                 => 'Book',
		 'labels'                => $labels,
                 'description' => __( 'كتب الموقع', 'onepress' ),
                 'public'                => true,
		 'supports'              => array( 'title', 'editor', 'author', 'thumbnail', 'comments', 'custom-fields', ),
                 'menu_position'         => 20,
		  'taxonomies'            => array( 'category', 'post_tag' ),
		 'hierarchical'          => false,
		 'show_ui'               => true,
		 'show_in_menu'          => true,
		 'menu_icon'             => 'dashicons-format-aside',
		 'show_in_admin_bar'     => true,
		 'show_in_nav_menus'     => true,
		 'has_archive'           => true,
		 'exclude_from_search'   => false,
		 'publicly_queryable'    => true,
		 'capability_type'       => 'page',
		 'show_in_rest'          => true
	);
	register_post_type( 'books', $args );
}
add_action( 'init', 'create_book_cpt' );

في هذا الكود عرفنا دالة مخصصة (دالة رد نداء) باسم create_book_cpt() وربطناها بخطاف الإجراء init، وقد قمنا ضمن هذه الدالة كما تلاحظ باستدعاء دالة تسجيل المنشور register_post_type() بعد أن عرفنا الوسطاء الضرورية لعمل هذه الدالة.

عرفنا بداية الوسيط $labels وهو عبارة عن مصفوفة تحدد التسميات المختلفة التي يتضمنها نوع المنشور المخصص، ثم عرفنا الوسيط $args الذي يمثل مصفوفة الخيارات الخاصة بتسجيل نوع المنشور المخصص وهو كذلك مصفوفة نمرر لها مجموعة من البرامترات أو الوسطاء وإليك دلالة أهم هذه البرامترات:

  • labels تسميات حقول المنشور المخصص.
  • description شرح موجز لنوع المنشور المخصص واستخداماته في الموقع.
  • public متغير بولياني يضبط مجموعة من الخيارات، عندما نمرر له القيمة true فهذا سيؤدي إلى تعيين مجموعة من الخيارات الأخرى المتعلقة برؤية المنشور المخصص والاستعلام منه على true كذلك.
  • supports: هذا البرامتر يوفر دعم المنشور المخصص لعناصر تحكم ووردبريس الافتراضية المتوفرة في المحرر. ففي الحالة الافتراضية يمكنك فقط عرض حقلي العنوان ‘title’ والمحرر’editor’ للمنشور الافتراضي، وكي تضيف دعم للمزيد من العناصر مثل الصورة المميزة
  • ‘thumbnail’، والتعليقات ‘comments’ والمراجعات ‘revisions’ واسم الكاتب ‘author’ وما إلى ذلك.. فعليك تحديدها يدويًا من خلال هذا البرامتر.(في الرابط التالي قائمة بكافة القيم التي يمكنك تمريرها لهذا الوسيط)
  • has_archive: إذا تم تعيين هذا البرامتر بالقيمة true فسوف يتم إنشاء أرشيف مخصص لهذا المنشور على الرابط التالي https://yourdomin/custom_post_type
  • menu_position يحدد هذا الخيار موضع القائمة التي تعرض نوع المنشور المخصص في لوحة تحكم الأدمن أو الداشبورد حيث أن لكل تبويب أو عنصر قائمة في لوحة التحكم أولوية تحدد موضعه كما هو مبين في الصورة التالية (الرقم الأقل يعني أولوية أعلى).
ترتيب عناصر قائمة لوحة التحكم في ووردبريس

بعد كتابة الملف وحفظ التغييرات فيه، عليك استيراد هذا الملف إلى ملف وظائف القالب كما يلي:

require(get_template_directory() . '/includes/books.php');

ملاحظة: يمكنك إضافة كود ملف books.php السابق مباشرة إلى ملف functions.php الخاص بالقالب الخاص بك، لكني شخصيَا أفضل تعريف نوع المنشور المخصص في ملف مستقل لبقاء الملفات منظمة وسهلة الصيانة.

في المثال أعلاه أنشأنا نوع منشور مخصص بسيط لكن يمكنك توسيع هذا النوع بشكل كبير، وتعريف وسوم وتصنيفات مخصصة له أو إتاحة الوسوم والتصنيفات الخاصة بالمقالات الافتراضية لنوع المنشور المخصص هذا.

اقرأ أيضًا: شرح التصنيفات (Taxonomies) وتخصيصها في ووردبريس

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

بعد حفظ ملف المنشور المخصص للكتاب سيظهر نوع المنشور المخصص الجديد الخاص بالكتب في لوحة تحكم موقعك (النهاية الخلفية للموقع) بشكل عنصر قائمة منفصل، عند النقر عليه تظهر لنا قائمة فرعية تتضمن 4 عناصر بالشكل التالي.

إضافة بوست مخصص لقالب ووردبريس

الآن عند النقر فوق خيار أضف جديد من أجل إضافة منشور جديد من نوع كتاب سينقلنا ووردبريس إلى الرابط التالي

https://yourdomin/wp-admin/post-new.php?post_type=books

وسيفتح لنا محرر المنشورات التقليدي لكن مع أسماء حقول مخصصة للكتاب، على سبيل المثال في حالتنا يظهر لنا تبويب باسم كتاب بدلاً من التبويب (صفحة أو مقالة) ويظهر لنا حقل باسم غلاف الكتاب بدلاً من الصورة المميزة للمقال أوالصفحة كما يلي.

يتم حفظ هذه المنشورات بشكل مشابه لباقي المنشورات الافتراضية في ووردبريس ضمن الجدول wp_posts، لكن قيمة العمود post_type لها تكون books لتمييزها عن باقي أنواع المحتوى في الموقع.

عرض أنواع المنشورات المخصصة في موقع ووردبريس

بعد أن قمنا بتعريف المنشور المخصص الخاص بالكتب وأضفنا مجموعة من الكتب لقاعدة بيانات الموقع، سنحتاج بالطبع لعرض هذه الكتب في الموقع، وكما ذكرنا مسبقًا ففي حال كنت قد مررت القيمة trur للبرامتر has_archive عند إنشاء نوع المنشور المخصص books فسوف يعرض ووردبريس أرشيف بهذه المنشورات المخصصة في صفحة مخصصة لها الرابط التالي https://yourdomin/books/

وبالتالي كل ما عليك هو الانتقال لهذا الرابط بعد كتابة دومين موقعك بدل yourdomin في هذا الرابط ويليه اسم المنشور المخصص، وسترى قائمة أو فهرس بكافة الكتب التي أضفتها كما يلي:

عرض أرشيف المنشورات المخصصة في ووردبريس

ملاحظة:

ملف نموذج القالب المسؤول بشكل افتراضي عن عرض هذا الفهرس حسب التسلسل الهرمي لملفات القالب هو الملف archive.php، وإذا لم يكن هذا موجودًا فسوف يستخدم ووردبريس الملف index.php لعرض فهرس الكتب.

أما في حال كنت تريد تنسيق صفحات أرشيف الكتب بطريقة مختلفة عن باقي صفحات الأرشيف في الموقع يمكنك بالطبع أن تكتب ملف نموذج قالب مخصص لهذا النوع باسم archive-books.php.
اقرأ أيضًا: تخصيص عرض صفحات الأرشيف في قالب ووردبريس.

كما يمكنك بشكل بديل كتابة استعلام WP_Query  المناسب لعرض هذه الكتب بالطريقة التي تحتاجها وفي أي موضع تحتاج لعرضها فيه ضمن الموقع.

على سبيل المثال لعرض غلاف الكتاب (الصورة المميزة) وعنوان الكتاب فقط يمكننا كتابة الاستعلام التالي:

<h1> أحدث كتب الموقع</h1>
<?php $loop = new WP_Query( array( 'post_type' => 'books' ) ); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
<div class="bookindex">
    <div class="bookcover">
        <a href="<?php the_permalink(); ?>"><?php if ( has_post_thumbnail() ) {the_post_thumbnail();} ?></a>
    </div>
    <div class="booktitle">
        <h2><?php echo get_the_title(); ?></h2>
    </div>
</div>
<?php endwhile; wp_reset_query(); ?>

نتائج الاستعلام المخصص عن المنشورات المخصصة

بالطبع عليك بعد ذلك كتابة تنسيقات مناسبة لنتائج الاستعلام لتظهر بالطريقة التي تناسب تصميم موقعك وهويتك البصرية.

الخلاصة

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

ابدأ بإنشاء أنواع منشورات مخصصة في قالب ووردبريس الخاص بك بما يناسب طبيعة محتوى موقعك، وفي حال واجهتك أي مشكلة في التعامل مع هذا المنشور يمكنك أن تشاركنا فيه في قسم التعليقات أسفل المقال.

اقرأ المزيد: البوست المخصص (Custom Post) وطرق استخدامه وإنشائه في الووردبريس

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

اطرح سؤالك على منتدى عرب ووردبريس وافتح نقاشًا جديدًا مع مجموعة من الخبراء في إدارة مواقع ووردبريس وهناك نشارك تجاربنا وأفضل الممارسات التي يحتاجها أصحاب المواقع