פיתוח סוגי פוסטים מותאמים אישית (CPT) בוורדפרס

פוסטים סטנדרטיים של WordPress לא מתאימים כשהאתר שלך זקוק לסוגי תוכן מותאמים אישית—פרויקטים, משרות פנויות או מוצרים. אנחנו בונים סוגי פוסטים מותאמים אישית (CPT) מאפס כדי להתאים למבנה הנתונים שלך. הצוות שלנו מספק פתרון מלא—החל מהגדרת CPT ועד עמודות מותאמות אישית וחיפוש—ומבטיח ביצועים אמינים ותמיכה מתמשכת.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
פיתוח סוגי פוסטים מותאמים אישית (CPT) בוורדפרס
פשוט
מ- 1 יום עד 3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1502
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1307
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1049
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

פיתוח סוגי תוכן מותאמים אישית (CPT) בוורדפרס

תארו לעצמכם שלקוח מבקש קטע "תיק עבודות" עם סינון לפי שנה, אבל פוסטים רגילים לא מספקים כתובת URL מותאמת אישית או שדות מותאמים אישית. אנחנו נתקלים בזה באופן קבוע. וורדפרס מחוץ לקופסה עובדת עם שני סוגי תוכן — פוסטים ועמודים. כשאתר צריך פרויקטים, משרות, נדל"ן, המלצות או מוצרים, נוצר סוג תוכן מותאם אישית (CPT) עבור כל אחד. CPT מספק קטע נפרד ב-/wp-admin, כתובות URL משלו, דפי ארכיון ושליטה מלאה על מבנה הנתונים. רישום CPT עם הגדרות בסיסיות לוקח כמה שעות; תצורה מלאה עם כתובות URL יפות, עמודות מותאמות אישית ויכולות חיפוש לוקחת 1–2 ימים. הניסיון שלנו: מעל 50 CPT מוגדרים לפרויקטים שונים, מתיקי עבודות ועד חנויות מקוונות.

איך לרשום CPT עם הגדרות נכונות?

הרישום מתחיל עם ה-hook init. בתוכו, קראו ל-register_post_type עם פרמטרים נדרשים. שקלו דוגמה לסוג "פרויקטים":

add_action('init', function () {
    register_post_type('project', [
        'labels' => [
            'name' => 'Проекты',
            'singular_name' => 'Проект',
            'add_new' => 'Добавить проект',
            'add_new_item' => 'Новый проект',
            'edit_item' => 'Редактировать проект',
            'new_item' => 'Новый проект',
            'view_item' => 'Просмотр проекта',
            'search_items' => 'Поиск проектов',
            'not_found' => 'Проекты не найдены',
            'not_found_in_trash' => 'Корзина пуста',
            'menu_name' => 'Проекты',
        ],
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'query_var' => true,
        'rewrite' => ['slug' => 'projects', 'with_front' => false],
        'capability_type' => 'post',
        'has_archive' => 'projects',
        'hierarchical' => false,
        'menu_position' => 5,
        'menu_icon' => 'dashicons-portfolio',
        'supports' => ['title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'],
        'show_in_rest' => true,
        'rest_base' => 'projects',
    ]);
});

add_action('init', function () { register_post_type('project', [ 'labels' => [ 'name' => 'Проекты', 'singular_name' => 'Проект', 'add_new' => 'Добавить проект', 'add_new_item' => 'Новый проект', 'edit_item' => 'Редактировать проект', 'new_item' => 'Новый проект', 'view_item' => 'Просмотр проекта', 'search_items' => 'Поиск проектов', 'not_found' => 'Проекты не найдены', 'not_found_in_trash' => 'Корзина пуста', 'menu_name' => 'Проекты', ], 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => ['slug' => 'projects', 'with_front' => false], 'capability_type' => 'post', 'has_archive' => 'projects', 'hierarchical' => false, 'menu_position' => 5, 'menu_icon' => 'dashicons-portfolio', 'supports' => ['title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'], 'show_in_rest' => true, 'rest_base' => 'projects', ]); }); יוצר דף ארכיון ב-has_archive => 'projects' — כל הפוסטים מסוג זה הולכים לשם. /projects/ הופך את הסוג לנגיש דרך REST API ובעורך גוטנברג. לאחר הרישום, הקפידו לעדכן את כללי ה-permalink: בניהול, עברו ל"הגדרות → Permalinks" ולחצו "שמור" או בצעו show_in_rest => true בעת ההפעלה.

עמודות מותאמות אישית ברשימת הפוסטים ומיון

כברירת מחדל, רשימת הפרויקטים מציגה רק את הכותרת והתאריך. בואו נוסיף עמודות "לקוח", "שנה" ו"מומלץ" — כולן ניתנות למיון. הנה בלוק קוד קומפקטי הכולל רישום עמודות, פלט נתונים ומיון:

// Регистрируем колонки и выводим данные
add_filter('manage_project_posts_columns', function (array $columns): array {
    $new = [];
    foreach ($columns as $key => $title) {
        $new[$key] = $title;
        if ($key === 'title') {
            $new['client'] = 'Клиент';
            $new['year'] = 'Год';
            $new['featured'] = 'На главной';
        }
    }
    unset($new['comments']);
    return $new;
});

add_action('manage_project_posts_custom_column', function (string $column, int $post_id): void {
    switch ($column) {
        case 'client':
            echo esc_html(get_post_meta($post_id, '_project_client', true) ?: '—');
            break;
        case 'year':
            echo esc_html(get_post_meta($post_id, '_project_year', true) ?: '—');
            break;
        case 'featured':
            $is_featured = get_post_meta($post_id, '_project_featured', true);
            echo $is_featured ? '⭐' : '—';
            break;
    }
}, 10, 2);

add_filter('manage_edit-project_sortable_columns', function (array $columns): array {
    $columns['year'] = 'year';
    return $columns;
});

add_action('pre_get_posts', function (WP_Query $query): void {
    if (!is_admin() || !$query->is_main_query()) return;
    if ($query->get('orderby') === 'year') {
        $query->set('meta_key', '_project_year');
        $query->set('orderby', 'meta_value_num');
    }
});

כלילת CPT בחיפוש וורדפרס וסינון לפי טקסונומיה

כברירת מחדל, החיפוש הסטנדרטי אינו כולל CPT מותאמים אישית. תקנו זאת דרך flush_rewrite_rules():

add_action('pre_get_posts', function (WP_Query $query): void {
    if ($query->is_search() && !is_admin() && $query->is_main_query()) {
        $post_types = $query->get('post_type') ?: ['post'];
        if (!is_array($post_types)) {
            $post_types = [$post_types];
        }
        $query->set('post_type', array_merge($post_types, ['project', 'vacancy']));
    }
});

ולסינון הרשימה לפי טקסונומיה (למשל, קטגוריית פרויקט) הוסיפו תפריט נפתח:

add_action('restrict_manage_posts', function (string $post_type): void {
    if ($post_type !== 'project') return;
    $taxonomy = get_taxonomy('project_category');
    wp_dropdown_categories([
        'taxonomy' => 'project_category',
        'name' => 'project_category',
        'show_option_all' => 'Все категории',
        'selected' => $_GET['project_category'] ?? 0,
        'value_field' => 'slug',
        'hierarchical' => true,
    ]);
});

השוואה: CPT לעומת טקסונומיה לעומת שדה מותאם אישית

טעות נפוצה היא שימוש ב-CPT במקום שבו טקסונומיה או שדה היו מספיקים. הטבלה הבאה עוזרת לבחור את הכלי הנכון:

ישות מתי להשתמש דוגמה
סוג תוכן מותאם אישית צריך עמוד נפרד, ארכיון, עורך תוכן פרויקט, המלצה, משרה
טקסונומיה צריך קיבוץ או סינון של פוסטים קטגוריית פרויקט, תג שירות
שדה מותאם אישית אחסון תכונה של פוסט קיים מחיר מוצר, שנת פרויקט, כתובת משרד

CPT עדיף על טקסונומיה עבור ישויות עשירות בתוכן — הוא מספק כתובת URL נפרדת, עורך ושליטה מלאה. שימוש בטקסונומיה במקום CPT פירושו אובדן פוטנציאל SEO והגבלת תוכן.

אילו תבניות נדרשות להצגת CPT נכונה?

וורדפרס מחפשת אוטומטית תבניות בסדר מסוים. עבור סוג // Регистрируем колонки и выводим данные add_filter('manage_project_posts_columns', function (array $columns): array { $new = []; foreach ($columns as $key => $title) { $new[$key] = $title; if ($key === 'title') { $new['client'] = 'Клиент'; $new['year'] = 'Год'; $new['featured'] = 'На главной'; } } unset($new['comments']); return $new; }); add_action('manage_project_posts_custom_column', function (string $column, int $post_id): void { switch ($column) { case 'client': echo esc_html(get_post_meta($post_id, '_project_client', true) ?: '—'); break; case 'year': echo esc_html(get_post_meta($post_id, '_project_year', true) ?: '—'); break; case 'featured': $is_featured = get_post_meta($post_id, '_project_featured', true); echo $is_featured ? '⭐' : '—'; break; } }, 10, 2); add_filter('manage_edit-project_sortable_columns', function (array $columns): array { $columns['year'] = 'year'; return $columns; }); add_action('pre_get_posts', function (WP_Query $query): void { if (!is_admin() || !$query->is_main_query()) return; if ($query->get('orderby') === 'year') { $query->set('meta_key', '_project_year'); $query->set('orderby', 'meta_value_num'); } }); , העדיפות היא:

עדיפות תבנית מטרה
1 pre_get_posts פוסט בודד
2 add_action('pre_get_posts', function (WP_Query $query): void { if ($query->is_search() && !is_admin() && $query->is_main_query()) { $post_types = $query->get('post_type') ?: ['post']; if (!is_array($post_types)) { $post_types = [$post_types]; } $query->set('post_type', array_merge($post_types, ['project', 'vacancy'])); } }); גיבוי לפוסטים
3 add_action('restrict_manage_posts', function (string $post_type): void { if ($post_type !== 'project') return; $taxonomy = get_taxonomy('project_category'); wp_dropdown_categories([ 'taxonomy' => 'project_category', 'name' => 'project_category', 'show_option_all' => 'Все категории', 'selected' => $_GET['project_category'] ?? 0, 'value_field' => 'slug', 'hierarchical' => true, ]); }); ארכיון (רשימה)
4 project גיבוי לארכיונים

אם התבנית הנדרשת חסרה, וורדפרס נופלת ל-single-project.php. יצירת single.php ו-archive-project.php היא פרקטיקה בסיסית לכל CPT.

פוסטים קשורים בין CPT שונים

הדרך הסטנדרטית לקשר שני CPT היא אחסון מזהי פוסטים קשורים ב-post meta. לדוגמה, קישור מקרים לפרויקט:

// Сохранение связей
update_post_meta($project_id, '_related_cases', array_map('absint', $case_ids));

// Получение связанных кейсов
$case_ids = get_post_meta($project_id, '_related_cases', true);
if (!empty($case_ids)) {
    $cases = get_posts([
        'post_type' => 'case',
        'post__in' => $case_ids,
        'orderby' => 'post__in',
        'posts_per_page' => -1,
    ]);
}

לקשרים דו-כיווניים (רבים לרבים), השתמשו בתוסף Posts 2 Posts או צרו טבלת ביניים.

מה כלול בהגדרת CPT במפתחות

הניסיון שלנו: מעל 5 שנות פיתוח וורדפרס, מעל 50 CPT מוגדרים לתיקי עבודות, חנויות מקוונות וקטלוגים. השירות כולל:

  • רישום CPT עם סט פרמטרים מלא (כתובות URL יפות, ארכיון, אייקון, עמודות);
  • עמודות מותאמות אישית עם מיון וסינון;
  • אינטגרציה עם חיפוש ו-REST API;
  • יצירת תבניות single-{cpt}.php ו-archive-{cpt}.php;
  • תיעוד והעברת גישה;
  • הדרכה למנהלי תוכן.

אנחנו מבטיחים שכל ה-CPT יעבדו כראוי עם גוטנברג ומאמת W3C. צרו קשר כדי לדון בפרויקט שלכם — נעריך את המשימה תוך יום עסקים אחד. קבלו ייעוץ: נעזור לבחור את הארכיטקטורה האופטימלית וליישם את ה-CPT שלכם מהר יותר ממה שתכתבו מפרט.

למה להפקיד את הגדרת CPT בידי אנשי מקצוע?

רישום CPT שגוי מוביל לשגיאות 404, חיפוש שבור וירידות בביצועים. אנחנו משתמשים בתבניות מוכחות: archive.php לשטיפת כללים, עמודות מותאמות אישית ללא שאילתות מיותרות, index.php תקין. האתר שלכם לא יאבד מהירות — אנחנו מבטיחים Core Web Vitals באזור הירוק.

להבנה מעמיקה של מנגנון הרישום, עיינו בתיעוד הרשמי: register_post_type. המומחים שלנו תמיד זמינים לייעץ ולמצוא את הפתרון הנכון לפרויקט שלכם.