It’s very likely that your CPT does indeed have custom fields, but because you’re using the classic editor, you need to have also enabled custom fields on the user you’re logged in as via the user profile/settings page
This is how core decides if there’s a custom fields metabox:
if ( post_type_supports( $post_type, 'custom-fields' ) ) {
add_meta_box(
'postcustom',
__( 'Custom Fields' ),
'post_custom_meta_box',
null,
'normal',
'core',
array(
'__back_compat_meta_box' => ! (bool) get_user_meta( get_current_user_id(), 'enable_custom_fields', true ),
'__block_editor_compatible_meta_box' => true,
)
);
}
Notice this specifically:
'__back_compat_meta_box' => ! (bool) get_user_meta( get_current_user_id(), 'enable_custom_fields', true ),
Important
You don’t need the custom fields metabox to use post meta. Lots of fields plugin frameworks exist, and post meta works even if the metabox isn’t present and your CPT doesn’t support them. Nothing is stopping you from using get_post_meta
and update_post_meta
, or registering your own custom metaboxes that read/save/update these values.
You might see very old tutorials or tutorials from people with less experience using this as a beginner method of adding data without introducing metaboxes or sidebar panels, but modern WP development rarely relies on these.