+ * @since 2.9.0
+ */
+function create_initial_post_types() {
+ register_post_type( 'post', array(
+ 'labels' => array(
+ 'name_admin_bar' => _x( 'Post', 'add new from admin bar' ),
+ ),
+ 'public' => true,
+ '_builtin' => true, /* internal use only. don't use this when registering your own post type. */
+ '_edit_link' => 'post.php?post=%d', /* internal use only. don't use this when registering your own post type. */
+ 'capability_type' => 'post',
+ 'map_meta_cap' => true,
+ 'menu_position' => 5,
+ 'hierarchical' => false,
+ 'rewrite' => false,
+ 'query_var' => false,
+ 'delete_with_user' => true,
+ 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'post-formats' ),
+ 'show_in_rest' => true,
+ 'rest_base' => 'posts',
+ 'rest_controller_class' => 'WP_REST_Posts_Controller',
+ ) );
+
+ register_post_type( 'page', array(
+ 'labels' => array(
+ 'name_admin_bar' => _x( 'Page', 'add new from admin bar' ),
+ ),
+ 'public' => true,
+ 'publicly_queryable' => false,
+ '_builtin' => true, /* internal use only. don't use this when registering your own post type. */
+ '_edit_link' => 'post.php?post=%d', /* internal use only. don't use this when registering your own post type. */
+ 'capability_type' => 'page',
+ 'map_meta_cap' => true,
+ 'menu_position' => 20,
+ 'hierarchical' => true,
+ 'rewrite' => false,
+ 'query_var' => false,
+ 'delete_with_user' => true,
+ 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'page-attributes', 'custom-fields', 'comments', 'revisions' ),
+ 'show_in_rest' => true,
+ 'rest_base' => 'pages',
+ 'rest_controller_class' => 'WP_REST_Posts_Controller',
+ ) );
+
+ register_post_type( 'attachment', array(
+ 'labels' => array(
+ 'name' => _x('Media', 'post type general name'),
+ 'name_admin_bar' => _x( 'Media', 'add new from admin bar' ),
+ 'add_new' => _x( 'Add New', 'add new media' ),
+ 'edit_item' => __( 'Edit Media' ),
+ 'view_item' => __( 'View Attachment Page' ),
+ 'attributes' => __( 'Attachment Attributes' ),
+ ),
+ 'public' => true,
+ 'show_ui' => true,
+ '_builtin' => true, /* internal use only. don't use this when registering your own post type. */
+ '_edit_link' => 'post.php?post=%d', /* internal use only. don't use this when registering your own post type. */
+ 'capability_type' => 'post',
+ 'capabilities' => array(
+ 'create_posts' => 'upload_files',
+ ),
+ 'map_meta_cap' => true,
+ 'hierarchical' => false,
+ 'rewrite' => false,
+ 'query_var' => false,
+ 'show_in_nav_menus' => false,
+ 'delete_with_user' => true,
+ 'supports' => array( 'title', 'author', 'comments' ),
+ 'show_in_rest' => true,
+ 'rest_base' => 'media',
+ 'rest_controller_class' => 'WP_REST_Attachments_Controller',
+ ) );
+ add_post_type_support( 'attachment:audio', 'thumbnail' );
+ add_post_type_support( 'attachment:video', 'thumbnail' );
+
+ register_post_type( 'revision', array(
+ 'labels' => array(
+ 'name' => __( 'Revisions' ),
+ 'singular_name' => __( 'Revision' ),
+ ),
+ 'public' => false,
+ '_builtin' => true, /* internal use only. don't use this when registering your own post type. */
+ '_edit_link' => 'revision.php?revision=%d', /* internal use only. don't use this when registering your own post type. */
+ 'capability_type' => 'post',
+ 'map_meta_cap' => true,
+ 'hierarchical' => false,
+ 'rewrite' => false,
+ 'query_var' => false,
+ 'can_export' => false,
+ 'delete_with_user' => true,
+ 'supports' => array( 'author' ),
+ ) );
+
+ register_post_type( 'nav_menu_item', array(
+ 'labels' => array(
+ 'name' => __( 'Navigation Menu Items' ),
+ 'singular_name' => __( 'Navigation Menu Item' ),
+ ),
+ 'public' => false,
+ '_builtin' => true, /* internal use only. don't use this when registering your own post type. */
+ 'hierarchical' => false,
+ 'rewrite' => false,
+ 'delete_with_user' => false,
+ 'query_var' => false,
+ ) );
+
+ register_post_type( 'custom_css', array(
+ 'labels' => array(
+ 'name' => __( 'Custom CSS' ),
+ 'singular_name' => __( 'Custom CSS' ),
+ ),
+ 'public' => false,
+ 'hierarchical' => false,
+ 'rewrite' => false,
+ 'query_var' => false,
+ 'delete_with_user' => false,
+ 'can_export' => true,
+ '_builtin' => true, /* internal use only. don't use this when registering your own post type. */
+ 'supports' => array( 'title', 'revisions' ),
+ 'capabilities' => array(
+ 'delete_posts' => 'edit_theme_options',
+ 'delete_post' => 'edit_theme_options',
+ 'delete_published_posts' => 'edit_theme_options',
+ 'delete_private_posts' => 'edit_theme_options',
+ 'delete_others_posts' => 'edit_theme_options',
+ 'edit_post' => 'edit_css',
+ 'edit_posts' => 'edit_css',
+ 'edit_others_posts' => 'edit_css',
+ 'edit_published_posts' => 'edit_css',
+ 'read_post' => 'read',
+ 'read_private_posts' => 'read',
+ 'publish_posts' => 'edit_theme_options',
+ ),
+ ) );
+
+ register_post_type( 'customize_changeset', array(
+ 'labels' => array(
+ 'name' => _x( 'Changesets', 'post type general name' ),
+ 'singular_name' => _x( 'Changeset', 'post type singular name' ),
+ 'menu_name' => _x( 'Changesets', 'admin menu' ),
+ 'name_admin_bar' => _x( 'Changeset', 'add new on admin bar' ),
+ 'add_new' => _x( 'Add New', 'Customize Changeset' ),
+ 'add_new_item' => __( 'Add New Changeset' ),
+ 'new_item' => __( 'New Changeset' ),
+ 'edit_item' => __( 'Edit Changeset' ),
+ 'view_item' => __( 'View Changeset' ),
+ 'all_items' => __( 'All Changesets' ),
+ 'search_items' => __( 'Search Changesets' ),
+ 'not_found' => __( 'No changesets found.' ),
+ 'not_found_in_trash' => __( 'No changesets found in Trash.' ),
+ ),
+ 'public' => false,
+ '_builtin' => true, /* internal use only. don't use this when registering your own post type. */
+ 'map_meta_cap' => true,
+ 'hierarchical' => false,
+ 'rewrite' => false,
+ 'query_var' => false,
+ 'can_export' => false,
+ 'delete_with_user' => false,
+ 'supports' => array( 'title', 'author' ),
+ 'capability_type' => 'customize_changeset',
+ 'capabilities' => array(
+ 'create_posts' => 'customize',
+ 'delete_others_posts' => 'customize',
+ 'delete_post' => 'customize',
+ 'delete_posts' => 'customize',
+ 'delete_private_posts' => 'customize',
+ 'delete_published_posts' => 'customize',
+ 'edit_others_posts' => 'customize',
+ 'edit_post' => 'customize',
+ 'edit_posts' => 'customize',
+ 'edit_private_posts' => 'customize',
+ 'edit_published_posts' => 'do_not_allow',
+ 'publish_posts' => 'customize',
+ 'read' => 'read',
+ 'read_post' => 'customize',
+ 'read_private_posts' => 'customize',
+ ),
+ ) );
+
+ register_post_status( 'publish', array(
+ 'label' => _x( 'Published', 'post status' ),
+ 'public' => true,
+ '_builtin' => true, /* internal use only. */
+ 'label_count' => _n_noop( 'Published <span class="count">(%s)</span>', 'Published <span class="count">(%s)</span>' ),
+ ) );
+
+ register_post_status( 'future', array(
+ 'label' => _x( 'Scheduled', 'post status' ),
+ 'protected' => true,
+ '_builtin' => true, /* internal use only. */
+ 'label_count' => _n_noop('Scheduled <span class="count">(%s)</span>', 'Scheduled <span class="count">(%s)</span>' ),
+ ) );
+
+ register_post_status( 'draft', array(
+ 'label' => _x( 'Draft', 'post status' ),
+ 'protected' => true,
+ '_builtin' => true, /* internal use only. */
+ 'label_count' => _n_noop( 'Draft <span class="count">(%s)</span>', 'Drafts <span class="count">(%s)</span>' ),
+ ) );
+
+ register_post_status( 'pending', array(
+ 'label' => _x( 'Pending', 'post status' ),
+ 'protected' => true,
+ '_builtin' => true, /* internal use only. */
+ 'label_count' => _n_noop( 'Pending <span class="count">(%s)</span>', 'Pending <span class="count">(%s)</span>' ),
+ ) );
+
+ register_post_status( 'private', array(
+ 'label' => _x( 'Private', 'post status' ),
+ 'private' => true,
+ '_builtin' => true, /* internal use only. */
+ 'label_count' => _n_noop( 'Private <span class="count">(%s)</span>', 'Private <span class="count">(%s)</span>' ),
+ ) );
+
+ register_post_status( 'trash', array(
+ 'label' => _x( 'Trash', 'post status' ),
+ 'internal' => true,
+ '_builtin' => true, /* internal use only. */
+ 'label_count' => _n_noop( 'Trash <span class="count">(%s)</span>', 'Trash <span class="count">(%s)</span>' ),
+ 'show_in_admin_status_list' => true,
+ ) );
+
+ register_post_status( 'auto-draft', array(
+ 'label' => 'auto-draft',
+ 'internal' => true,
+ '_builtin' => true, /* internal use only. */
+ ) );
+
+ register_post_status( 'inherit', array(
+ 'label' => 'inherit',
+ 'internal' => true,
+ '_builtin' => true, /* internal use only. */
+ 'exclude_from_search' => false,
+ ) );
+}
+
+/**
+ * Retrieve attached file path based on attachment ID.
+ *
+ * By default the path will go through the 'get_attached_file' filter, but
+ * passing a true to the $unfiltered argument of get_attached_file() will
+ * return the file path unfiltered.
+ *
+ * The function works by getting the single post meta name, named
+ * '_wp_attached_file' and returning it. This is a convenience function to
+ * prevent looking up the meta name and provide a mechanism for sending the
+ * attached filename through a filter.
+ *
+ * @since 2.0.0