Parent field missing from custom post type in the block editor

tl;dr – The Parent select menu will not render in the block editor if the parent_item_colon label is an empty string.

Ruling Out Common Issues

First, I needed to confirm that the following frequent reasons for the Parent field missing were all not the problem:

  1. hierarchical is true in register_post_type()
  2. page-attributes is included in the array of supports in register_post_type
  3. ✔ There are at least two published posts of the custom post type, the one I’m editing and one other (that could be the parent)

All of these things were true, but I still couldn’t set the Parent. I was able to further confirm most things were working by seeing that the Parent field was visible in the Quick Edit interface.

The breakthrough came when someone helping me tried removing the labels parameter from register_post_type() in the code above…

The Problem and Solution

If ['labels']['parent_item_color'] is set to an empty string in register_post_type() the Parent field will not appear in the the Page Attributes panel of the block editor sidebar.

This was a mistake on my part, but the impact was so unexpected that I wanted to share.

Setting the label to a non-empty string like __( 'Parent Guide:', 'textdomain' ) made the Parent select menu appear in the Block Editor sidebar.

Credits

I ran into this issue and was totally flummoxed for a day. Thanks to Elaine on the WP Campus community Slack who made a discovery leading to the answer!