גוטנברג הוא העורך של וורדפרס מאז גירסה 5.0. אך מסתבר שהוא אינו מופיע בצורה אוטומטית עבור סוגי תוכן מותאמים (Custom Post Types).
כברירת מחדל, סוגי תוכן מותאמים משתמשים בעורך הקלאסי של וורדפרס. כדי לאפשר את עורך הבלוקים עבור CPT, צריכים להתקיים שני תנאים בעת הרישום.
show_in_rest ל-true ולכלול את editor במערך supports. החסרה של אחד מהם תשאיר את העורך הקלאסי פעיל.דוגמה בסיסית
הנה רישום טיפוסי של סוג תוכן מותאם ללא תמיכה בגוטנברג:
function savvy_cpt_init() {
$labels = array(
// not relevant for this article
);
$args = array(
'labels' => $labels,
'description' => __( 'Description.', 'textdomain' ),
'public' => true,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
);
register_post_type( 'newcpt', $args );
}
add_action( 'init', 'savvy_cpt_init' );כדי לאפשר את גוטנברג עבור סוג תוכן זה, הוסיפו את show_in_rest עם ערך true:
function savvy_cpt_init() {
$labels = array(
// not relevant for this article
);
$args = array(
'labels' => $labels,
'description' => __( 'Description.', 'textdomain' ),
'public' => true,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ),
'show_in_rest' => true,
);
register_post_type( 'newcpt', $args );
}
add_action( 'init', 'savvy_cpt_init' );למה נדרש show_in_rest?
גוטנברג בנוי על גבי ה-REST API של וורדפרס. העורך משתמש בנקודות קצה של REST כדי לטעון, לשמור ולאמת תוכן פוסטים. הגדרת show_in_rest ל-true חושפת את סוג התוכן המותאם לנקודות קצה אלו, שזה תנאי מקדים לתפקוד עורך הבלוקים.
אם אתם צריכים להתאים אישית את נתיב ה-REST API עבור ה-CPT שלכם, תוכלו להשתמש בפרמטר
rest_baseכדי לשנות את ה-slug של נקודת הקצה ו-rest_controller_classכדי לציין controller מותאם.
ללא show_in_rest, וורדפרס חוזרת לעורך הקלאסי TinyMCE – גם אם editor נכלל במערך supports. זו גם הסיבה שחלק מהמפתחים מבטלים את גוטנברג על ידי הסרת תמיכת REST API מסוגי תוכן מסוימים.
הגדרת תבניות בלוקים ברירת מחדל ל-CPT
לאחר שגוטנברג מופעל, תוכלו להגדיר תבנית בלוקים שתמלא מראש את העורך בכל פעם שנוצר פוסט חדש מסוג זה. זה נעשה באמצעות הפרמטר template:
$args = array(
'public' => true,
'show_in_rest' => true,
'supports' => array( 'title', 'editor', 'thumbnail' ),
'template' => array(
array( 'core/image', array( 'align' => 'wide' ) ),
array( 'core/heading', array( 'placeholder' => 'Add subtitle...' ) ),
array( 'core/paragraph', array( 'placeholder' => 'Write content...' ) ),
),
);
register_post_type( 'portfolio', $args );תוכלו גם לנעול את התבנית כדי למנוע מעורכים להוסיף, להסיר או לסדר מחדש בלוקים על ידי הגדרת template_lock:
$args = array(
'public' => true,
'show_in_rest' => true,
'supports' => array( 'title', 'editor', 'thumbnail' ),
'template' => array(
array( 'core/image', array( 'align' => 'wide' ) ),
array( 'core/heading' ),
array( 'core/paragraph' ),
),
'template_lock' => 'all',
);
register_post_type( 'portfolio', $args );הגדרת template_lock ל-all מונעת כל שינוי במבנה הבלוקים. תוכלו גם להשתמש ב-insert כדי לאפשר הוספת בלוקים חדשים תוך שמירה על בלוקי התבנית הקיימים נעולים במקומם.
אם אתם עובדים עם ACF, תנו מבט במדריך על יצירת בלוקים מותאמים לגוטנברג באמצעות ACF והקובץ block.json. זו דרך עוצמתית לבנות סוגי תוכן מובנים עם חוויית עריכה ויזואלית.
שאלות נפוצות
שאלות נפוצות על הפעלת גוטנברג עבור סוגי תוכן מותאמים:
show_in_rest => true חסר בקריאת register_post_type() שלכם, או העדר editor במערך supports. שניהם נדרשים כדי שגוטנברג ייטען. בדקו גם שאף תוסף או תבנית לא מכריחים את העורך הקלאסי עבור סוג תוכן זה.show_in_rest הופך את סוג התוכן לנגיש דרך ה-REST API?
show_in_rest ל-true חושפת את סוג התוכן דרך ה-REST API, מה שאומר שהתוכן שלו יכול להיקרא על ידי בקשות לא מאומתות כברירת מחדל. אם ה-CPT מכיל מידע פרטי, כדאי לממש הרשאות מותאמות באמצעות rest_controller_class או בדיקות capabilities.public ל-false ועדיין לאפשר גוטנברג על ידי הגדרת show_in_rest ל-true ו-show_ui ל-true. חשיפת ה-REST API נדרשת עבור העורך, אך היא לא מחייבת שלסוג התוכן יהיה ארכיון ציבורי או תבנית single.template_lock?
template_lock שולט האם עורכים יכולים לשנות את מבנה הבלוקים שהוגדר בפרמטר template. הגדרתו ל-all מונעת הוספה, הסרה או הזזה של בלוקים. הגדרתו ל-insert מונעת הוספה או הסרה אך מאפשרת שינוי סדר. השמטתו נותנת לעורכים שליטה מלאה.show_in_rest?
show_in_rest לבדה לא מצריכה רענון של כללי rewrite. אם אתם משנים גם את rest_base או פרמטרים אחרים שמשפיעים על כתובות URL באותו זמן, בקרו ב-Settings > Permalinks פעם אחת כדי לרענן את הכללים. לעולם אל תקראו ל-flush_rewrite_rules() בכל טעינת עמוד - רק בהפעלה או כיבוי של תוסף.סיכום
הפעלת גוטנברג עבור סוג תוכן מותאם דורשת תוספת אחת בלבד לקריאת register_post_type() שלכם: הגדרת show_in_rest ל-true. זה חושף את סוג התוכן ל-REST API, שעורך הבלוקים תלוי בו כדי לפעול.
מעבר להפעלה בסיסית, תוכלו לנצל תבניות בלוקים כדי למלא מראש את העורך במבנה בלוקים ספציפי, ולנעול את התבנית כדי לאכוף עקביות תוכן. תכונות אלו הופכות CPTs עם גוטנברג לכלי עוצמתי לעריכת תוכן מובנה.


יש גם אופציה כזאת עם עובדים עם התוסף CPTUI , צריך לאפשר את סוג הפוסט ב REST API
(אחלה תוסף אגב)
טוב לדעת 🙂