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

الدليل الشامل لأنواع المقالات المخصصة

منذ ولادته سنة 2003، لم يتوقف ووردبريس عن النمو و كسب المهتميين والمعجبين مما جعله يصل إلى المرتبة الأولى كأحسن نظام لإدارة المحتوى في العالم، حسب رأيي أرى أنّ هذا التألق يعود بالأساس إلى سلاسته، بساطته، سهولته في الاستعمال و خصوصًا للمجتمع الذي يحيط به، والذي يوفر الدعم والشروحات, إنشاء القوالب والإضافات إنطلاقا بالدوال السلسة التي يوفرها لنا هذا النظام الرائع!

فمن أهم الدوال المستعملة من خلال المطورين هي أنواع المقالات (post types) نعم إنّها الدالة الرائعة التي ستكون موضوعنا لهذا اليوم.

ما هي أنواع المقالات؟

أنواع المقالات هي عناصر يوفرها لنا ووردبريس لكي نتمكن من تصنيف و ادارة محتوى موقعنا بسهولة، فهنالك أنواع مقالات تاتي افتراضيًا في ووردبريس هي:

اقرأ أيضا: طريقة تعيين الصورة البارزة تلقائيا لمقالات ووردبريس

  • المقالات (post): هو النوع الافتراضي لنشر المقالات في الموقع.
  • الصفحات (page): هو النوع الافتراضي لنشر الصفحات في الموقع.
  • المرفقات (attachment): من خلال هذا النوع يمكن إدراج الصور ووصلات الفيديو بالإضافة إلى الملفات العامة ووسائط الصوت الخ…، وتسمى بالوسائط في لوحة تحكم ووردبريس.
  • المراجعات (revision): يختص هذا النوع بحفظ نسخ قديمة للمواضيع سوءًا أكانت تلقائية أو على هيئة مسوّدة.
  • القوائم (nav_menu_item): هي القوائم التي يمكننا إنشاؤها ليستطيع المستخدم التصفح بسلاسة والوصول إلى المحتوى بشكل سريع ويعتبر هذا النوع مُصنّف ضمن المقالات.

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

عندما تُنهي قراءة هذه المقالة بتركيز فإنّك ستتعلم شيئين مهمين جدًا وهما:

  1. أنواع المقالات المخصصة (custom post types).
  2. أنواع التصنيفات المخصصة (custom taxonomies).

إنشاء أنواع مقالات مخصصة

أولاً وقبل البدأ في الشرح أريد أن أشير إلى شيء مهم جدًا، وهو أنك إذا كنت تعمل على قالب خاص فمن الطبيعي إضافة الأكواد إلى ملف الدوال functions.php أو إنشاء ملف آخر وتكوين عملية الإتصال بواسطة الدالة require_once أو include_once، ولكن إذا كنت تعمل على قالب تعمل على تطويره جهة أخرى ويتمّ تحديثه بإستمرار، فالأفضل هو إنشاء إضافة مخصصة ( Plugin ) وإضافة الأكواد إليها.

اقرأ أيضا: أفضل إضافات ووردبريس المجانية حسب تجربتي الخاصة

جاهز ؟ – فلنبدأ !

function sb_register_post_type() { $args = array(); register_post_type( 'products', $args ); } add_action( 'init', 'sb_register_post_type' );
Code language: PHP (php)

ما الذي فعلناه هنا؟ إنّنا قمنا بإنشاء دالة جديدة بمسمى sb_register_post_type ، وفي داخلها انشانا المُتغير $args ووضعنا قيمته مصفوفة فارغة, بعدها قمنا بتسجيل نوع مقالات مخصص جديد عبر الدالة register_post_type أسميناه product واعطيناه الإعداد $args، ثم قمنا بإضافة الدالة sb_register_post_type إلى الخطاف init بواسطة دالة الحدث add_action.

هذا أبسيط مثال لإضافة نوع مقال مخصص، ولن يظهر حتى في لوحة تحكم المدير, لماذا؟ لأن المتغيير $args عبارة عن مصفوفة في الأصل فارغة.

اقرأ أيضا: طريقة تعيين الصورة المصغرة لفيديو يوتيوب تلقائيا على ووردبريس

لكي نقوم بضبط نوع المقالات المخصص الجديد حسب رغبتنا يجب علينا ان نضيف بعض الإعدادات إلى المتغير $args، وهذه هي الإعدادات الأكثر إستعمالاً وهي قابلة للتغير.

/* ****************************************** My super Custom Post Type ****************************************** */ function sb_register_post_type() { $labels = array( 'name' => _x( 'Products', 'post type general name', 'text-domain' ), 'singular_name' => _x( 'Product', 'post type singular name', 'text-domain' ), 'parent_item_colon' => __( 'Parent Product:', 'text-domain' ), 'menu_name' => __( 'Products', 'text-domain' ), 'add_new' => __( 'Add New', 'text-domain' ), 'add_new_item' => __( 'Add New Product', 'text-domain' ), 'edit_item' => __( 'Edit Product', 'text-domain' ), 'new_item' => __( 'New Product', 'text-domain' ), 'all_items' => __( 'All Products', 'text-domain' ), 'view_item' => __( 'View Product', 'text-domain' ), 'search_items' => __( 'Search Products', 'text-domain' ), 'not_found' => __( 'No products found', 'text-domain' ), 'not_found_in_trash' => __( 'No products found in the Trash', 'text-domain' ), ); $args = array( 'label' => __( 'products', 'text-domain' ), 'labels' => $labels, 'description' => __( 'Description of my super products', 'text-domain' ), 'public' => true, 'menu_position' => 5, 'menu_icon' => 'dashicons-cart', 'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields', 'post-formats' ), 'has_archive' => true, ); register_post_type( 'products', $args ); } add_action( 'init', 'sb_register_post_type' );
Code language: PHP (php)

ما الذي أضفناه وماذا سيحدث؟ لا تقلق سأشرح لك ذلك، فما فعلناه هنا هو نفس الشيء الذي فعلناه في المثال السابق,، والفرق هو أنّ في هذه المرة المتغير $args أصبح مصفوفة مليئة بالإعدادات اللازمة، في الأول قمنا بإنشاء المتغيير $labels وقمنا بتخزين تسميات عناصر نوع المقالات المخصص فيه بوسطة المصفوفة، وهذا فقط لتبسيط الكود و تسهيل قراءته، وبعدها قمنا بإنشاء المتغير $args الذي سيشمل كل الإعدادات.

  • labels: هذا العنصر قمنا بإعطائه كقيمة المتغير $labels الذي هو بالتالي عبارة عن مصفوفة.
  • description: هنا يتم وضع وصف لنوع المقال المخصص.
  • public: هذا الخيار يشمل عدد كبير من الإعدادت و كلها تتعلق بالرؤية أو الظهور.
  • menu_position: هنا يتم تحديد المرتبة التي سيظهر بها في لوحة التحكم، فكلما كان الرقم أكبر كلما كانت المرتبة أقل.
  • menu_icon: هنا نقوم بوضع أيقونة مخصصة بإستعمال أحد أيقونات Dashicons و هي الأيقونات الخطية المعتمدة رسميًا في لوحة تحكم ووردبريس.
  • supports: هنا يتم تحديث الدوال الإفتراضية الموجود في ووردبريس، والتي نريد أن يدعمها هذا النوع من المقالات ففي الكود الذي وضعنها أمرناه بدعم العنوان، محرر المقالات، المقتطف، تحديد الكاتب، التعليقات، المراجعات، بنية المقالة، والحقول المخصصة.
  • has_archive: هنا إذا قمنا بجعل القيمة true فإنّه سيتم إنشاء تركيبة جديدة والتي يمكن من خلالها الحصول على أرشيف للمقالات المخصصة، هكذا مثلاsaidelbakkali.com/products.

هل بدر لذهنك تساؤلاً يتضمن تكرار كلمة text-domain بعد أسماء العناصر؟ ببساطة إنّ تلك الكلمة هي التي تمثل نص النطاق الذي يستعمل في ترجمة النصوص إلى لغات مختلفة حيث أنّه يمكنك تغيير الكلمة حسب رغبتك، وكذلك يمكنك حذفها وكتابة النصوص باللغة التي ستستعملها مباشرةً, على سبيل المثال : إذا أردت أن تستعمل اللغة العربية مباشرةً وأن تكون غير قابلة للترجمة المخصصة فإنّ الكود سيصبح بهذا الشكل:

اقرأ أيضا: كيفية تحسين الإستعلامات إلى قاعدة البيانات على ووردبريس

/* ****************************************** My super Custom Post Type ****************************************** */ function sb_register_post_type() { $labels = array( 'name' => 'النتوجات', 'singular_name' => 'نتوج', 'parent_item_colon' => 'النتوج الأب:', 'menu_name' => 'النتوجات', 'add_new' => 'إضافة جديد', 'add_new_item' => 'إضافةنتوج جديد', 'edit_item' => 'تحرير النتوج', 'new_item' => 'نتوج جديد', 'all_items' => 'جيع النتوجات', 'view_item' => 'شاهدة النتوج', 'search_items' => 'البحث عننتوج', 'not_found' => 'لا توجدنتوجات', 'not_found_in_trash' => 'لا توجدنتوجات في سلة المهملات', ); $args = array( 'label' => 'نتوجات', 'labels' => $labels, 'description' => 'وصف النتوجات', 'public' => true, 'menu_position' => 5, 'menu_icon' => 'dashicons-cart', 'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields', 'post-formats' ), 'has_archive' => true, ); register_post_type( 'products', $args ); } add_action( 'init', 'sb_register_post_type' );
Code language: PHP (php)

بعد حفظ التغييرات التي وضعتها في ملف functions.php أو الإضافة التي قمت بإنشاؤها من أجل ذلك، فإنّه سيظهر لك عنصر جديد ضمن قائمة لوحة التحكم للوردبريس بالإسم الذي خصصته لنوع مقالاتك.

نوع مقالات مخصص جديد

الآن، وبعد حصولنا على ما أردناه، لدينا تساؤلاً في كيفية عرض هذا النوع الجديد من التدوينات في الموقع؟ إنّ أفضل طريقة لعمل ذلك هي إنشاء قالب صفحة مخصص ثم نسخ محتوى ملف index.php داخله، وبعدها تغيير حلقة التحميل ( Loop ) بشيءُّ مخصص على سبيل المثال:

// WP_Query arguments. $args = array( 'post_type' => array( 'products' ), 'post_status' => array( 'publish' ), 'nopaging' => false, 'posts_per_page' => '10', 'order' => 'DESC', 'orderby' => 'date', ); // The Query. $query = new WP_Query( $args );
Code language: PHP (php)

إنشاء أنواع التصنيفات المخصصة

ووردبريس إفتراضيًا يوفرُ لنا ترتيبًا لمقالاتنا على نوعين : تصنيفات، ووسوم، والفرق بين التصنيفات و الوسوم – هو أنّ التصنيفات تدعم التسلسل الهرمي ويُعنى بذلك أنّه يمكنك إنشاء تصنيف فرعي لتصنيف آخر و هكذا … بينما الوسوم لا تدعم هذه الخاصية.

اقرأ أيضا: كيفية إضافة حقوق النسخ لووردبريس

يمكننا إستعمال التصنيفات الإفتراضية لوردبريس في أنواع المقالات المخصصة و ذلك بإضافة الإعداد taxonomies إلى المصفوفة $args هكذا:

'taxonomies' =>array( 'category', 'post_tag' );
Code language: PHP (php)

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

function sb_register_custom_category() { $args = array(); register_taxonomy( 'product_category', 'products', $args ); } add_action( 'init', 'sb_register_custom_category', 0 );
Code language: PHP (php)

العملية تُعتبر مشابهة لأنواع المقالات المخصصة ففي الأول قمنا بإنشاء دالة أسميناها sb_register_custom_category ووضعنا داخلها المتغير $args ثم قمنا بتسجيل نوع التصنيفات المخصص عبر الدالة register_taxonomy() والتي بدورها تاخد ثلات إعدادات:

اقرأ أيضا: إنشاء تصميم مخصص لمقالات تصنيف معيّن

  • product_category: هو اسم أو المعرف الذي أعطيناه لنوع التصنيفات المخصص.
  • product: هو اسم أو معرف نوع المقالات المخصص الذي سينتمي له نوع التصنيفات المخصص.
  • $args: هو المتغير الذي خزنًا فيه كل إعدادات نوع التصنيفات المخصص.

بعدها قمنا بإضافة الدالة sb_register_custom_taxonomy إلى الخطاف init بواسطة دالة الحدث add_action.

الكود النهائي سيكون هكذا:

/* ****************************************** My super Custom Taxonomy ****************************************** */ function sb_register_custom_taxonomy() { $labels = array( 'name' => _x( 'Product Categories', 'Taxonomy General Name', 'saidweb' ), 'singular_name' => _x( 'Product Category', 'Taxonomy Singular Name', 'saidweb' ), 'menu_name' => __( 'Product Categories', 'saidweb' ), 'all_items' => __( 'All categories', 'saidweb' ), 'parent_item' => __( 'Parent category', 'saidweb' ), 'parent_item_colon' => __( 'Parent category:', 'saidweb' ), 'new_item_name' => __( 'New Product Category Name', 'saidweb' ), 'add_new_item' => __( 'Add New Product Category', 'saidweb' ), 'edit_item' => __( 'Edit Product Category', 'saidweb' ), 'update_item' => __( 'Update category', 'saidweb' ), 'separate_items_with_commas' => __( 'Separate Product Category with commas', 'saidweb' ), 'search_items' => __( 'Search Product Categories', 'saidweb' ), 'add_or_remove_items' => __( 'Add or remove Product Category', 'saidweb' ), 'choose_from_most_used' => __( 'Choose from the most used Product Category', 'saidweb' ), 'not_found' => __( 'Not Found', 'saidweb' ), ); $args = array( 'labels' => $labels, 'hierarchical' => true, ); register_taxonomy( 'product_category', array( 'products' ), $args ); } // Hook into the 'init' action add_action( 'init', 'sb_register_custom_taxonomy', 0 );
Code language: PHP (php)

أظن أنّ الكود السابق أصبح سهلاً ومفهومًا؛ وذلك لأنّنا شاهدنا مثله في من قبل ضمن مثال أنواع المقالات المخصصة، وللمعلومية اعداد labels يأخد قيمة المصفوفة الأولى التي تشمل تسميات التصنيف، و hierarchical إذا قمنا بجعلها true فستدعم التسلسل الهرمي مثل التصنيفات الإفتراضية – أمّا إذا جعلناها false فستكون مثل الوسوم أي لا تدعم التسلسل الهرمي.

اقرأ أيضا: كيف أتعامل مع روابط الأرشيف في ووردبريس؟

هل تتذكر ما قلناها سابقًا حول ترجمة العبارات ؟، إذا كنت تتذكر ذلك حقًا، فإنّ النتيجة النهائية ستصبح هكذا :

تصنيفات مخصصة

حلول أخرى لإنشاء أنواع المقالات المخصصة

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

إضافة Custom Post Type UI: هذه الإضافة توفر لك وسيلة سهلة الإستعمال لإنشاء و إدارة أنواع المقالات و التصنيفات المخصصة.

اقرأ أيضا: تغيير لون تعليقات الأعضاء المسجليين في ووردبريس

إضافة Types: هذه الإضافة هي عبارة عن ثلاتة في واحد, هي من أفضل الإضافات التي جربتها حتى الآن, توفر لك فرصة إنشاء أنواع مقالات مخصصة, تصنيفات مخصصة و حقول مخصصة. أنصحك بتجربتها.

موقع WP Hasty: هذا الموقع يمنحك مجموعة من التطبيقات لتوليد أكواد تعمل على ووردبريس, لن أقوم بذكر كل ما يمكنك القام به فيه لأنها أشياء كثيرة, أدخل و شاهد بنفسك لن تخسر شيء.

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

اقرأ أيضا: كيفية عرض مواضيع تابعة لنفس الكاتب في ووردبريس

أتمنى أن تكون قد إستفدت من الموضع و ان أكون قد أوفيت بما يعد به العنوان.

آه!! لا تنسى المشاركة لكي يستفيد شخص آخر مثلك.

close

قم بالتسجيل على قائمتي البريدية لكي تكون من الأوائل في الحصول على تدوينات وشروحات حصرية

أنا لا أرسل أبدا البريد المزعج! اقرأ سياسة الخصوصية لمزيد من المعلومات.

14 تعليق

    1. العفو أخي, شكرا لك على المرور! يسعدني إنك تستفيد من المواضيع التي أنشرها, فمرادنا هو أن يستفيد أكبير عدد ممكن من الأشخاص.

  1. شكرا لك مقاله رائعة
    وموقع مفيد جدا .
    واتمني أن يكون هناك شرح أيضا لل Meta Box …. وإذا كان ممكن شرح فديو

    وكذلك كيفية استخدام المقالات المخصصة في loop

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

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

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

      بالتوفيق أخي.

  3. شكرا لك على كل هذا الكم من المعلومات
    و لكن لدى استفسار

    اريد الكود المسؤل عن حركه الصور البارزة فى هذا الموقع
    او كيفيه انشاء مثل هذه الحركات

اترك تعليقًا

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