register_post_type [ WordPress Function ]
| Parameters: |
|
| Uses: |
|
| Returns: |
|
| Defined at: |
|
Register a post type. Do not use before init.
A function for creating or modifying a post type based on the parameters given. The function will accept an array (second optional parameter), along with a string for the post type name.
Optional $args contents:
- label - Name of the post type shown in the menu. Usually plural. If not set, labels['name'] will be used.
- labels - An array of labels for this post type.
- If not set, post labels are inherited for non-hierarchical types and page labels for hierarchical ones.
- You can see accepted values in {@link get_post_type_labels()}.
- description - A short descriptive summary of what the post type is. Defaults to blank.
- public - Whether a post type is intended for use publicly either via the admin interface or by front-end users.
- Defaults to false.
- While the default settings of exclude_from_search, publicly_queryable, show_ui, and show_in_nav_menus are inherited from public, each does not rely on this relationship and controls a very specific intention.
- exclude_from_search - Whether to exclude posts with this post type from front end search results.
- If not set, the the opposite of public's current value is used.
- publicly_queryable - Whether queries can be performed on the front end for the post type as part of parse_request().
- ?post_type={post_type_key}
- ?{post_type_key}={single_post_slug}
- ?{post_type_query_var}={single_post_slug}
- If not set, the default is inherited from public.
- show_ui - Whether to generate a default UI for managing this post type in the admin.
- If not set, the default is inherited from public.
- show_in_nav_menus - Makes this post type available for selection in navigation menus.
- If not set, the default is inherited from public.
- show_in_menu - Where to show the post type in the admin menu.
- If true, the post type is shown in its own top level menu.
- If false, no menu is shown
- If a string of an existing top level menu (eg. 'tools.php' or 'edit.php?post_type=page'), the post type will be placed as a sub menu of that.
- show_ui must be true.
- If not set, the default is inherited from show_ui
- show_in_admin_bar - Makes this post type available via the admin bar.
- If not set, the default is inherited from show_in_menu
- menu_position - The position in the menu order the post type should appear.
- show_in_menu must be true
- Defaults to null, which places it at the bottom of its area.
- menu_icon - The url to the icon to be used for this menu. Defaults to use the posts icon.
- capability_type - The string to use to build the read, edit, and delete capabilities. Defaults to 'post'.
- May be passed as an array to allow for alternative plurals when using this argument as a base to construct the capabilities, e.g. array('story', 'stories').
- capabilities - Array of capabilities for this post type.
- By default the capability_type is used as a base to construct capabilities.
- You can see accepted values in {@link get_post_type_capabilities()}.
- map_meta_cap - Whether to use the internal default meta capability handling. Defaults to false.
- hierarchical - Whether the post type is hierarchical (e.g. page). Defaults to false.
- supports - An alias for calling add_post_type_support() directly. Defaults to title and editor.
- See {@link add_post_type_support()} for documentation.
- register_meta_box_cb - Provide a callback function that will be called when setting up the meta boxes for the edit form. Do remove_meta_box() and add_meta_box() calls in the callback.
- taxonomies - An array of taxonomy identifiers that will be registered for the post type.
- Default is no taxonomies.
- Taxonomies can be registered later with register_taxonomy() or register_taxonomy_for_object_type().
- has_archive - True to enable post type archives. Default is false.
- Will generate the proper rewrite rules if rewrite is enabled.
- rewrite - Triggers the handling of rewrites for this post type. Defaults to true, using $post_type as slug.
- To prevent rewrite, set to false.
- To specify rewrite rules, an array can be passed with any of these keys
- 'slug' => string Customize the permastruct slug. Defaults to $post_type key
- 'with_front' => bool Should the permastruct be prepended with WP_Rewrite::$front. Defaults to true.
- 'feeds' => bool Should a feed permastruct be built for this post type. Inherits default from has_archive.
- 'pages' => bool Should the permastruct provide for pagination. Defaults to true.
- 'ep_mask' => const Assign an endpoint mask.
- If not specified and permalink_epmask is set, inherits from permalink_epmask.
- If not specified and permalink_epmask is not set, defaults to EP_PERMALINK
- query_var - Sets the query_var key for this post type. Defaults to $post_type key
- If false, a post type cannot be loaded at ?{query_var}={post_slug}
- If specified as a string, the query ?{query_var_string}={post_slug} will be valid.
- can_export - Allows this post type to be exported. Defaults to true.
- delete_with_user - Whether to delete posts of this type when deleting a user.
- If true, posts of this type belonging to the user will be moved to trash when then user is deleted.
- If false, posts of this type belonging to the user will not be trashed or deleted.
- If not set (the default), posts are trashed if post_type_supports('author'). Otherwise posts are not trashed or deleted.
- _builtin - true if this post type is a native or "built-in" post_type. THIS IS FOR INTERNAL USE ONLY!
- _edit_link - URL segement to use for edit link of this post type. THIS IS FOR INTERNAL USE ONLY!
Source
<?php
function register_post_type( $post_type, $args = array() ) {
global $wp_post_types, $wp_rewrite, $wp;
if ( !is_array($wp_post_types) )
$wp_post_types = array();
// Args prefixed with an underscore are reserved for internal use.
$defaults = array(
'labels' => array(), 'description' => '', 'publicly_queryable' => null, 'exclude_from_search' => null,
'capability_type' => 'post', 'capabilities' => array(), 'map_meta_cap' => null,
'_builtin' => false, '_edit_link' => 'post.php?post=%d', 'hierarchical' => false,
'public' => false, 'rewrite' => true, 'has_archive' => false, 'query_var' => true,
'supports' => array(), 'register_meta_box_cb' => null,
'taxonomies' => array(), 'show_ui' => null, 'menu_position' => null, 'menu_icon' => null,
'can_export' => true,
'show_in_nav_menus' => null, 'show_in_menu' => null, 'show_in_admin_bar' => null,
'delete_with_user' => null,
);
$args = wp_parse_args($args, $defaults);
$args = (object) $args;
$post_type = sanitize_key($post_type);
$args->name = $post_type;
if ( strlen( $post_type ) > 20 )
return new WP_Error( 'post_type_too_long', __( 'Post types cannot exceed 20 characters in length' ) );
// If not set, default to the setting for public.
if ( null === $args->publicly_queryable )
$args->publicly_queryable = $args->public;
// If not set, default to the setting for public.
if ( null === $args->show_ui )
$args->show_ui = $args->public;
// If not set, default to the setting for show_ui.
if ( null === $args->show_in_menu || ! $args->show_ui )
$args->show_in_menu = $args->show_ui;
// If not set, default to the whether the full UI is shown.
if ( null === $args->show_in_admin_bar )
$args->show_in_admin_bar = true === $args->show_in_menu;
// Whether to show this type in nav-menus.php. Defaults to the setting for public.
if ( null === $args->show_in_nav_menus )
$args->show_in_nav_menus = $args->public;
// If not set, default to true if not public, false if public.
if ( null === $args->exclude_from_search )
$args->exclude_from_search = !$args->public;
// Back compat with quirky handling in version 3.0. #14122
if ( empty( $args->capabilities ) && null === $args->map_meta_cap && in_array( $args->capability_type, array( 'post', 'page' ) ) )
$args->map_meta_cap = true;
if ( null === $args->map_meta_cap )
$args->map_meta_cap = false;
$args->cap = get_post_type_capabilities( $args );
unset($args->capabilities);
if ( is_array( $args->capability_type ) )
$args->capability_type = $args->capability_type[0];
if ( ! empty($args->supports) ) {
add_post_type_support($post_type, $args->supports);
unset($args->supports);
} else {
// Add default features
add_post_type_support($post_type, array('title', 'editor'));
}
if ( false !== $args->query_var && !empty($wp) ) {
if ( true === $args->query_var )
$args->query_var = $post_type;
$args->query_var = sanitize_title_with_dashes($args->query_var);
$wp->add_query_var($args->query_var);
}
if ( false !== $args->rewrite && ( is_admin() || '' != get_option('permalink_structure') ) ) {
if ( ! is_array( $args->rewrite ) )
$args->rewrite = array();
if ( empty( $args->rewrite['slug'] ) )
$args->rewrite['slug'] = $post_type;
if ( ! isset( $args->rewrite['with_front'] ) )
$args->rewrite['with_front'] = true;
if ( ! isset( $args->rewrite['pages'] ) )
$args->rewrite['pages'] = true;
if ( ! isset( $args->rewrite['feeds'] ) || ! $args->has_archive )
$args->rewrite['feeds'] = (bool) $args->has_archive;
if ( ! isset( $args->rewrite['ep_mask'] ) ) {
if ( isset( $args->permalink_epmask ) )
$args->rewrite['ep_mask'] = $args->permalink_epmask;
else
$args->rewrite['ep_mask'] = EP_PERMALINK;
}
if ( $args->hierarchical )
add_rewrite_tag("%$post_type%", '(.+?)', $args->query_var ? "{$args->query_var}=" : "post_type=$post_type&name=");
else
add_rewrite_tag("%$post_type%", '([^/]+)', $args->query_var ? "{$args->query_var}=" : "post_type=$post_type&name=");
if ( $args->has_archive ) {
$archive_slug = $args->has_archive === true ? $args->rewrite['slug'] : $args->has_archive;
if ( $args->rewrite['with_front'] )
$archive_slug = substr( $wp_rewrite->front, 1 ) . $archive_slug;
else
$archive_slug = $wp_rewrite->root . $archive_slug;
add_rewrite_rule( "{$archive_slug}/?$", "index.php?post_type=$post_type", 'top' );
if ( $args->rewrite['feeds'] && $wp_rewrite->feeds ) {
$feeds = '(' . trim( implode( '|', $wp_rewrite->feeds ) ) . ')';
add_rewrite_rule( "{$archive_slug}/feed/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' );
add_rewrite_rule( "{$archive_slug}/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' );
}
if ( $args->rewrite['pages'] )
add_rewrite_rule( "{$archive_slug}/{$wp_rewrite->pagination_base}/([0-9]{1,})/?$", "index.php?post_type=$post_type" . '&paged=$matches[1]', 'top' );
}
add_permastruct( $post_type, "{$args->rewrite['slug']}/%$post_type%", $args->rewrite );
}
if ( $args->register_meta_box_cb )
add_action('add_meta_boxes_' . $post_type, $args->register_meta_box_cb, 10, 1);
$args->labels = get_post_type_labels( $args );
$args->label = $args->labels->name;
$wp_post_types[$post_type] = $args;
add_action( 'future_' . $post_type, '_future_post_hook', 5, 2 );
foreach ( $args->taxonomies as $taxonomy ) {
register_taxonomy_for_object_type( $taxonomy, $post_type );
}
do_action( 'registered_post_type', $post_type, $args );
return $args;
}
?>
Examples [ wp-snippets.com ]
Top Google zoekresultaten
- register_post_type - WordPress Codex
Description. Create or modify a post type. Do not use register_post_type before init. Usage. <?php register_post_type( $post_type, $args ) ?> Parameters ...
codex.wordpress.org - How to integrate register_post_type in my own plugin?? - WordPress
if you are just asking how to put it into the plugin, it's the same code... functions that work in functions.php can often just be dropped into your plugin the same ...
wordpress.org - register_post_type - Create or Modify WordPress Post Type
Feb 28, 2011 ... Create or modify WordPress post type based on the parameters given. The function will accept an array, along with a string for the post type ...
w4dev.com - register_post_type « Functions - Watch of the Web Warlocks
Description of the function register_post_type located in the file wp-includes ... <? php register_post_type( $post_type, $args = array( 'labels' => array(), ...
www.web-warlocks.net
Gebruikersdiscussies [ wordpress.org ]
- jnhghy on "Query posts by custom post type and category id"
- oneside on "Query posts by custom post type and category id"
- Ipstenu on "Query posts by custom post type and category id"
- oneside on "Query posts by custom post type and category id"
- Ipstenu on "Query posts by custom post type and category id"
- oneside on "Query posts by custom post type and category id"
- Måns Jonasson on "Custom post type receives no trackbacks?"
- dhechler on "Posts are saved but uneditable. Using wp_insert_post() for custom post type."
- ryanve on "Remove base slug on Custom Post Type?"
- colmsjo on "Error calling register_post_type() when installing theme"