(أنواع منشورات مخصصة) في ووردبريس
1. مقدمة: يعني إيه Custom Post Types؟
ووردبريس بيجي بواجهة جاهزة للكتابة زي المقالات (Posts) والصفحات (Pages)، بس ساعات بيكون عندك محتوى مختلف محتاج تنسقه وتعرضه بشكل مختلف، زي:
- منتجات في متجر
- مشاريع أعمال (Portfolio)
- فيديوهات
- مراجعات كتب
- أي نوع محتوى خاص بيك
الأنواع دي بنسميها Custom Post Types أو “أنواع منشورات مخصصة”.
2. ليه نستخدم أنواع منشورات مخصصة؟
- عشان تنظم المحتوى بشكل أفضل
- عشان تخلي كل نوع محتوى له صفحة أرشيف خاصة وشكل عرض مختلف
- عشان تضيف وظائف وحقول خاصة لنوع المحتوى ده
- عشان تحسن تجربة المستخدم وتبسط إدارة المحتوى
3. الفرق بين المنشورات العادية وأنواع المنشورات المخصصة
| الخاصية | منشورات (Posts) | صفحات (Pages) | منشورات مخصصة (Custom Post Types) |
|---|---|---|---|
| نوع المحتوى | مقالات، أخبار | صفحات ثابتة | أي نوع محتوى تخصصه بنفسك |
| الأرشيف | نعم | لا | حسب إعدادات النوع |
| التصنيفات | يدعم تصنيفات | لا | ممكن تدعم تصنيفات ووسوم |
| القوالب | قالب المقالات | قالب الصفحات | تقدر تعمل قوالب خاصة |
4. إزاي تنشئ نوع منشور جديد يدويًا في ملف functions.php
هنا بنستخدم الدالة register_post_type() داخل دالة مربوطة بـ init:
function abozaid_register_custom_post_type() {
$labels = array(
'name' => __('منتجات', 'abozaid'),
'singular_name' => __('منتج', 'abozaid'),
'add_new' => __('أضف منتج جديد', 'abozaid'),
'add_new_item' => __('أضف منتج جديد', 'abozaid'),
'edit_item' => __('تعديل المنتج', 'abozaid'),
'new_item' => __('منتج جديد', 'abozaid'),
'view_item' => __('عرض المنتج', 'abozaid'),
'search_items' => __('بحث في المنتجات', 'abozaid'),
'not_found' => __('مافيش منتجات', 'abozaid'),
'not_found_in_trash' => __('مافيش منتجات في سلة المهملات', 'abozaid'),
'menu_name' => __('المنتجات', 'abozaid'),
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'menu_icon' => 'dashicons-cart',
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
'rewrite' => array('slug' => 'products'),
'show_in_rest' => true, // لتفعيل محرر Gutenberg
);
register_post_type('product', $args);
}
add_action('init', 'abozaid_register_custom_post_type');
5. شرح أهم الوسائط (Arguments) في register_post_type
labels: النصوص اللي بتظهر في لوحة التحكمpublic: هل النوع ظاهر في الموقع ولوحة التحكمhas_archive: هل له صفحة أرشيف خاصةmenu_icon: أيقونة في لوحة التحكمsupports: الحقول اللي يدعمها النوع (العنوان، المحرر، الصور البارزة…)rewrite: ضبط رابط الصنفshow_in_rest: تفعيل دعم محرر جوتنبرج (مهم جداً لو تستخدم المحرر الجديد)
6. إضافة دعم تكستوص، صورة بارزة، تصنيفات، وحقول مخصصة
لو عايز النوع الجديد يدعم التصنيفات أو الوسوم، لازم تضيف دوال تسجيل لها:
function abozaid_register_taxonomies() {
register_taxonomy(
'product_category',
'product',
array(
'label' => __('تصنيفات المنتجات', 'abozaid'),
'hierarchical' => true,
'show_in_rest' => true,
)
);
}
add_action('init', 'abozaid_register_taxonomies');
وبكده تقدر تستخدم تصنيفات للمنتجات زي التصنيفات العادية.
7. طريقة عرض منشورات النوع المخصص في القالب
- صفحة الأرشيف: لو عندك
has_archiveمفعلة، تقدر تعمل ملف قالب اسمهarchive-product.php(لو اسم النوع هوproduct) لعرض كل المنشورات. - صفحة المفرد (Single): تعمل ملف
single-product.phpلعرض تفاصيل المنتج الواحد.
8. إنشاء ملفات قالب خاصة بالنوع المخصص
مثال بسيط لملف archive-product.php:
<?php get_header(); ?>
<h1>منتجاتنا</h1>
<?php if ( have_posts() ) : ?>
<div class="products-list">
<?php while ( have_posts() ) : the_post(); ?>
<article id="post-<?php the_ID(); ?>">
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php if ( has_post_thumbnail() ) {
the_post_thumbnail('medium');
} ?>
<p><?php the_excerpt(); ?></p>
</article>
<?php endwhile; ?>
</div>
<?php else : ?>
<p>مافيش منتجات متاحة دلوقتي.</p>
<?php endif; ?>
<?php get_footer(); ?>
9. مثال عملي كامل: إنشاء نوع منشور “منتجات”
1. تسجيل النوع في functions.php
(الكود اللي فوق في النقطة 4)
2. تسجيل تصنيف المنتجات (اختياري)
(الكود اللي فوق في النقطة 6)
3. إنشاء ملفات القالب:
archive-product.phpsingle-product.php
4. إضافة منتجات من لوحة التحكم وتجربتها
10. نصائح مهمة عند التعامل مع أنواع المنشورات المخصصة
- اختار أسماء واضحة ومختصرة
- فكر في الحقول اللي هتحتاجها (ممكن تستخدم Advanced Custom Fields أو أدوات أخرى)
- دايمًا فعّل
show_in_restلو هتستخدم محرر جوتنبرج - خلي رابط النوع بسيط وواضح
- صمم ملفات القالب بشكل متناسق مع شكل موقعك
11. استخدام إضافات لتسهيل إنشاء Custom Post Types
لو مش حابب تبرمج الكود، في إضافات ممتازة زي:
- Custom Post Type UI
- Pods
- Toolset
دي بتسهل عليك إنشاء النوع بدون كود، وتديرهم من لوحة التحكم.
12. مراجعة سريعة
- الأنواع المخصصة بتنظم المحتوى بشكل أفضل
- تسجيل النوع بيتم باستخدام
register_post_type - لازم تسجل التصنيفات لو عايزها مرتبطة بالنوع
- ملفات القالب زي
archive-{post_type}.phpوsingle-{post_type}.phpمهمة لعرض المحتوى - في إضافات بتسهل العملية لو مش محترف في الكود
13. أسئلة شائعة
س: هل الأنواع المخصصة بتأثر على سرعة الموقع؟
ج: لا، طالما الكود منظم ومفيش استعلامات غير ضرورية.
س: هل لازم أعمل ملفات قالب منفصلة لكل نوع؟
ج: مش لازم، بس لو عايز شكل مميز لكل نوع، ده الأفضل.
س: هل أقدر أعدل على لوحة التحكم بتاعت النوع المخصص؟
ج: أيوه، تقدر تضيف حقول مخصصة وأعمدة جديدة.
