As you have checked the problem is not with the post-type
not existing or the database being empty. The key to your solution is in the line you have highlighted: class="locked-indicator"
. You can find the code in WP_posts_List_Table
if you want.
Somehow during the migration the posts have received the status ‘locked’, which means somebody is editing them. Usually that status is retracted as that user stops editing. Now it isn’t. And even as an admin you cannot edit posts that are locked, so you cannot change the status.
Now we’re getting into unknown terrain. The locked status is sparsely documented. Changing it with WordPress functions may be impossible. That means you will have to change the post_status
directly in the database. My suggestion would be to try a couple of bulk editing plugins to change all ‘locked’ posts to ‘publish’. Else you probably have no choice but to backup your database and run a MySQL query to get this done.
Update
Another line of thought: ignore the ‘locked’ status (only temporarily, else you’ll mess up the locking process forever). If you look at wp_check_post_lock
you see these lines:
$lock = get_post_meta( $post->ID, '_edit_lock', true );
if ( ! $lock ) {
return false;
}
So, if you can manipulate what is returned from get_post_meta
you can shortcut the locking process. Down the line this opportunity arises in this line in get_meta_data_raw
:
$check = apply_filters( "get_{$meta_type}_metadata", null, $object_id, $meta_key, $single, $meta_type );
Here you can force _edit_lock
to be false (I hope).