Switch language

wpseek.com
A WordPress-centric search engine for devs and theme authors




register_post_type [ WordPress Function ]

register_post_type ( $post_type, $args = array() )
Parameters:
  • (string) $post_type Post type key, must not exceed 20 characters
  • (array|string) $args See optional args description above.
Uses:
  • $wp_post_types
Returns:
  • (object|WP_Error) the registered post type object, or an error object
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) . $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 '(' trimimplode'|'$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_cb101);

    
$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);

    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 Search Results

More ...

0 User Note(s)

None yet. Be the first!

Add New ...



HTML5 Powered with CSS3 / Styling, Performance & Integration, and Semantics