WordPress.org

Make WordPress Core

Changeset 15934


Ignore:
Timestamp:
10/23/2010 06:03:26 PM (10 years ago)
Author:
nacin
Message:

Allow capability_type to be an array, for odd plural situations such as story/storys/stories. After registration it reverts to a singular string. Lots of documentation for meta capabilities and post types, also some cleanups for register_post_type documentation. see #14122.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/post.php

    r15909 r15934  
    823823 * Register a post type. Do not use before init.
    824824 *
    825  * A simple function for creating or modifying a post type based on the
     825 * A function for creating or modifying a post type based on the
    826826 * parameters given. The function will accept an array (second optional
    827827 * parameter), along with a string for the post type name.
    828  *
    829828 *
    830829 * Optional $args contents:
     
    833832 * - description - A short descriptive summary of what the post type is. Defaults to blank.
    834833 * - public - Whether posts of this type should be shown in the admin UI. Defaults to false.
    835  * - exclude_from_search - Whether to exclude posts with this post type from search results. Defaults to true if the type is not public, false if the type is public.
    836  * - publicly_queryable - Whether post_type queries can be performed from the front page.  Defaults to whatever public is set as.
    837  * - show_ui - Whether to generate a default UI for managing this post type. Defaults to true if the type is public, false if the type is not public.
    838  * - show_in_menu - Where to show the post type in the admin menu. True for a top level menu, false for no menu, or can be a top level page like 'tools.php' or 'edit.php?post_type=page'. show_ui must be true.
     834 * - exclude_from_search - Whether to exclude posts with this post type from search results.
     835 *     Defaults to true if the type is not public, false if the type is public.
     836 * - publicly_queryable - Whether post_type queries can be performed from the front page.
     837 *     Defaults to whatever public is set as.
     838 * - show_ui - Whether to generate a default UI for managing this post type. Defaults to true
     839 *     if the type is public, false if the type is not public.
     840 * - show_in_menu - Where to show the post type in the admin menu. True for a top level menu,
     841 *     false for no menu, or can be a top level page like 'tools.php' or 'edit.php?post_type=page'.
     842 *     show_ui must be true.
    839843 * - menu_position - The position in the menu order the post type should appear. Defaults to the bottom.
    840844 * - menu_icon - The url to the icon to be used for this menu. Defaults to use the posts icon.
    841  * - capability_type - The post type to use for checking read, edit, and delete capabilities. Defaults to "post".
    842  * - capabilities - Array of capabilities for this post type. You can see accepted values in {@link get_post_type_capabilities()}. By default the capability_type is used as a base to construct capabilities.
     845 * - capability_type - The post type to use for checking read, edit, and delete capabilities. Defaults to 'post'.
     846 *   May be passed as an array to allow for alternative plurals when using this argument as a base to construct the
     847 *   capabilities, e.g. array('story', 'stories').
     848 * - capabilities - Array of capabilities for this post type. By default the capability_type is used
     849 *      as a base to construct capabilities. You can see accepted values in {@link get_post_type_capabilities()}.
    843850 * - map_meta_cap - Whether to use the internal default meta capability handling. Defaults to false.
    844851 * - hierarchical - Whether the post type is hierarchical. Defaults to false.
    845  * - supports - An alias for calling add_post_type_support() directly. See add_post_type_support() for Documentation. Defaults to none.
    846  * - 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.
    847  * - 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().
    848  * - labels - An array of labels for this post type. You can see accepted values in {@link get_post_type_labels()}. By default post labels are used for non-hierarchical types and page labels for hierarchical ones.
     852 * - supports - An alias for calling add_post_type_support() directly. See {@link add_post_type_support()}
     853 *     for documentation. Defaults to none.
     854 * - register_meta_box_cb - Provide a callback function that will be called when setting up the
     855 *     meta boxes for the edit form.  Do remove_meta_box() and add_meta_box() calls in the callback.
     856 * - taxonomies - An array of taxonomy identifiers that will be registered for the post type.
     857 *     Default is no taxonomies. Taxonomies can be registered later with register_taxonomy() or
     858 *     register_taxonomy_for_object_type().
     859 * - labels - An array of labels for this post type. By default post labels are used for non-hierarchical
     860 *     types and page labels for hierarchical ones. You can see accepted values in {@link get_post_type_labels()}.
    849861 * - permalink_epmask - The default rewrite endpoint bitmasks.
    850  * - rewrite - false to prevent rewrite, or array('slug'=>$slug) to customize permastruct; default will use $post_type as slug.
     862 * - rewrite - false to prevent rewrite. Defaults to true. Use array('slug'=>$slug) to customize permastruct;
     863 *     default will use $post_type as slug. Other options include 'with_front' and 'feeds'.
    851864 * - query_var - false to prevent queries, or string to value of the query var to use for this post type
    852865 * - can_export - true allows this post type to be exported.
    853866 * - show_in_nav_menus - true makes this post type available for selection in navigation menus.
    854  * - _builtin - true if this post type is a native or "built-in" post_type.  THIS IS FOR INTERNAL USE ONLY!
    855  * - _edit_link - URL segement to use for edit link of this post type.  Set to 'post.php?post=%d'.  THIS IS FOR INTERNAL USE ONLY!
     867 * - _builtin - true if this post type is a native or "built-in" post_type. THIS IS FOR INTERNAL USE ONLY!
     868 * - _edit_link - URL segement to use for edit link of this post type. THIS IS FOR INTERNAL USE ONLY!
    856869 *
    857870 * @since 2.9.0
     
    909922    unset($args->capabilities);
    910923
     924    if ( is_array( $args->capability_type ) )
     925        $args->capability_type = $args->capability_type[0];
     926
    911927    if ( ! empty($args->supports) ) {
    912928        add_post_type_support($post_type, $args->supports);
     
    975991 * Builds an object with all post type capabilities out of a post type object
    976992 *
    977  * Accepted keys of the capabilities array in the post type object:
    978  * - edit_post - The meta capability that controls editing a particular object of this post type. Defaults to "edit_ . $capability_type" (edit_post).
    979  * - edit_posts - The capability that controls editing objects of this post type as a class. Defaults to "edit_ . $capability_type . s" (edit_posts).
    980  * - edit_others_posts - The capability that controls editing objects of this post type that are owned by other users. Defaults to "edit_others_ . $capability_type . s" (edit_others_posts).
    981  * - publish_posts - The capability that controls publishing objects of this post type. Defaults to "publish_ . $capability_type . s" (publish_posts).
    982  * - read_post - The meta capability that controls reading a particular object of this post type. Defaults to "read_ . $capability_type" (read_post).
    983  * - read_private_posts - The capability that controls reading private posts. Defaults to "read_private . $capability_type . s" (read_private_posts).
    984  * - delete_post - The meta capability that controls deleting a particular object of this post type. Defaults to "delete_ . $capability_type" (delete_post).
     993 * Post type capabilities use the 'capability_type' argument as a base, if the
     994 * capability is not set in the 'capabilities' argument array or if the
     995 * 'capabilities' argument is not supplied.
     996 *
     997 * The capability_type argument can optionally be registered as an array, with
     998 * the first value being singular and the second plural, e.g. array('story, 'stories')
     999 * Otherwise, an 's' will be added to the value for the plural form. After
     1000 * registration, capability_type will always be a string of the singular value.
     1001 *
     1002 * By default, seven keys are accepted as part of the capabilities array:
     1003 *
     1004 * - edit_post, read_post, and delete_post are meta capabilities, which are then
     1005 *   generally mapped to corresponding primitive capabilities depending on the
     1006 *   context, which would be the post being edited/read/deleted and the user or
     1007 *   role being checked. Thus these capabilities would generally not be granted
     1008 *   directly to users or roles.
     1009 *
     1010 * - edit_posts - Controls whether objects of this post type can be edited.
     1011 * - edit_others_posts - Controls whether objects of this type owned by other users
     1012 *   can be edited. If the post type does not support an author, then this will
     1013 *   behave like edit_posts.
     1014 * - publish_posts - Controls publishing objects of this post type.
     1015 * - read_private_posts - Controls whether private objects can be read.
     1016 
     1017 * These four primitive capabilities are checked in core in various locations.
     1018 * There are also seven other primitive capabilities which are not referenced
     1019 * directly in core, except in map_meta_cap(), which takes the three aforementioned
     1020 * meta capabilities and translates them into one or more primitive capabilities
     1021 * that must then be checked against the user or role, depending on the context.
     1022 *
     1023 * - read - Controls whether objects of this post type can be read.
     1024 * - delete_posts - Controls whether objects of this post type can be deleted.
     1025 * - delete_private_posts - Controls whether private objects can be deleted.
     1026 * - delete_published_posts - Controls whether published objects can be deleted.
     1027 * - delete_others_posts - Controls whether objects owned by other users can be
     1028 *   can be deleted. If the post type does not support an author, then this will
     1029 *   behave like delete_posts.
     1030 * - edit_private_posts - Controls whether private objects can be edited.
     1031 * - edit_published_posts - Controls whether published objects can be deleted.
     1032 *
     1033 * These additional capabilities are only used in map_meta_cap(). Thus, they are
     1034 * only assigned by default if the post type is registered with the 'map_meta_cap'
     1035 * argument set to true (default is false).
    9851036 *
    9861037 * @see map_meta_cap()
    9871038 * @since 3.0.0
    9881039 *
    989  * @param object $args
     1040 * @param object $args Post type registration arguments
    9901041 * @return object object with all the capabilities as member variables
    9911042 */
    9921043function get_post_type_capabilities( $args ) {
     1044    if ( ! is_array( $args->capability_type ) )
     1045        $args->capability_type = array( $args->capability_type, $args->capability_type . 's' );
     1046
     1047    // Singular base for meta capabilities, plural base for primitive capabilities.
     1048    list( $singular_base, $plural_base ) = $args->capability_type;
     1049
    9931050    $default_capabilities = array(
    994         // Meta capabilities are generally mapped to primitive capabilities depending on the context
    995         // (which would be the post being edited/deleted/read), instead of granted to users or roles:
    996         'edit_post'          => 'edit_'         . $args->capability_type,
    997         'read_post'          => 'read_'         . $args->capability_type,
    998         'delete_post'        => 'delete_'       . $args->capability_type,
    999         // Primitive capabilities that are used outside of map_meta_cap():
    1000         'edit_posts'         => 'edit_'         . $args->capability_type . 's',
    1001         'edit_others_posts'  => 'edit_others_'  . $args->capability_type . 's',
    1002         'publish_posts'      => 'publish_'      . $args->capability_type . 's',
    1003         'read_private_posts' => 'read_private_' . $args->capability_type . 's',
     1051        // Meta capabilities
     1052        'edit_post'          => 'edit_'         . $singular_base,
     1053        'read_post'          => 'read_'         . $singular_base,
     1054        'delete_post'        => 'delete_'       . $singular_base,
     1055        // Primitive capabilities used outside of map_meta_cap():
     1056        'edit_posts'         => 'edit_'         . $plural_base,
     1057        'edit_others_posts'  => 'edit_others_'  . $plural_base,
     1058        'publish_posts'      => 'publish_'      . $plural_base,
     1059        'read_private_posts' => 'read_private_' . $plural_base,
    10041060    );
    10051061
    1006     // Primitive capabilities that are used within map_meta_cap():
     1062    // Primitive capabilities used within map_meta_cap():
    10071063    if ( $args->map_meta_cap ) {
    10081064        $default_capabilities_for_mapping = array(
    10091065            'read'                   => 'read',
    1010             'delete_posts'           => 'delete_'           . $args->capability_type . 's',
    1011             'delete_private_posts'   => 'delete_private_'   . $args->capability_type . 's',
    1012             'delete_published_posts' => 'delete_published_' . $args->capability_type . 's',
    1013             'delete_others_posts'    => 'delete_others_'    . $args->capability_type . 's',
    1014             'edit_private_posts'     => 'edit_private_'     . $args->capability_type . 's',
    1015             'edit_published_posts'   => 'edit_published_'   . $args->capability_type . 's',
     1066            'delete_posts'           => 'delete_'           . $plural_base,
     1067            'delete_private_posts'   => 'delete_private_'   . $plural_base,
     1068            'delete_published_posts' => 'delete_published_' . $plural_base,
     1069            'delete_others_posts'    => 'delete_others_'    . $plural_base,
     1070            'edit_private_posts'     => 'edit_private_'     . $plural_base,
     1071            'edit_published_posts'   => 'edit_published_'   . $plural_base,
    10161072        );
    10171073        $default_capabilities = array_merge( $default_capabilities, $default_capabilities_for_mapping );
Note: See TracChangeset for help on using the changeset viewer.