本文整理汇总了PHP中get_post_type_capabilities函数的典型用法代码示例。如果您正苦于以下问题:PHP get_post_type_capabilities函数的具体用法?PHP get_post_type_capabilities怎么用?PHP get_post_type_capabilities使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了get_post_type_capabilities函数的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: register_post_type
//.........这里部分代码省略.........
}
// 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 = (bool) $args->show_in_menu;
}
// If not set, default 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 not set, default to false.
if (null === $args->map_meta_cap) {
$args->map_meta_cap = false;
}
// If there's no specified edit link and no UI, remove the edit link.
if (!$args->show_ui && !$has_edit_link) {
$args->_edit_link = '';
}
$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);
} elseif (false !== $args->supports) {
// Add default features
add_post_type_support($post_type, array('title', 'editor'));
}
if (false !== $args->query_var) {
if (true === $args->query_var) {
$args->query_var = $post_type;
} else {
$args->query_var = sanitize_title_with_dashes($args->query_var);
}
if ($wp && is_post_type_viewable($args)) {
$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'])) {
示例2: set_own_caps
public function set_own_caps()
{
global $wp_post_types;
$post_types = get_post_types(array(), 'objects');
$_post_types = $this->lib->_get_post_types();
foreach ($post_types as $post_type) {
if (!in_array($post_type->name, $_post_types)) {
continue;
}
if ($post_type->name == 'post' || $post_type->capability_type != 'post') {
continue;
}
$wp_post_types[$post_type->name]->capability_type = $post_type->name;
$wp_post_types[$post_type->name]->map_meta_cap = true;
$cap_object = new stdClass();
$cap_object->capability_type = $wp_post_types[$post_type->name]->capability_type;
$cap_object->map_meta_cap = true;
$cap_object->capabilities = array();
$create_posts0 = $wp_post_types[$post_type->name]->cap->create_posts;
$wp_post_types[$post_type->name]->cap = get_post_type_capabilities($cap_object);
if ($post_type->name == 'attachment') {
$wp_post_types[$post_type->name]->cap->create_posts = $create_posts0;
// restore initial 'upload_files'
}
}
}
示例3: init_user_roles
/**
* Init WooCommerce Memberships user roles
*
* @since 1.0.0
*/
private static function init_user_roles()
{
global $wp_roles;
if (class_exists('WP_Roles') && !isset($wp_roles)) {
$wp_roles = new WP_Roles();
}
// Allow shop managers and admins to manage membership plans and user memberships
if (is_object($wp_roles)) {
foreach (array('membership_plan', 'user_membership') as $post_type) {
$args = new stdClass();
$args->map_meta_cap = true;
$args->capability_type = $post_type;
$args->capabilities = array();
foreach (get_post_type_capabilities($args) as $builtin => $mapped) {
$wp_roles->add_cap('shop_manager', $mapped);
$wp_roles->add_cap('administrator', $mapped);
}
}
$wp_roles->add_cap('shop_manager', 'manage_woocommerce_membership_plans');
$wp_roles->add_cap('administrator', 'manage_woocommerce_membership_plans');
$wp_roles->add_cap('shop_manager', 'manage_woocommerce_user_memberships');
$wp_roles->add_cap('administrator', 'manage_woocommerce_user_memberships');
}
}
示例4: register_post_type
/**
* 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.
* - description - A short descriptive summary of what the post type is. Defaults to blank.
* - public - Whether posts of this type should be shown in the admin UI. Defaults to false.
* - 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.
* - publicly_queryable - Whether post_type queries can be performed from the front page.
* Defaults to whatever public is set as.
* - 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.
* - 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.
* - menu_position - The position in the menu order the post type should appear. Defaults to the bottom.
* - 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. Defaults to false.
* - supports - An alias for calling add_post_type_support() directly. See {@link add_post_type_support()}
* for documentation. Defaults to none.
* - 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().
* - labels - An array of labels for this post type. By default post labels are used for non-hierarchical
* types and page labels for hierarchical ones. You can see accepted values in {@link get_post_type_labels()}.
* - permalink_epmask - The default rewrite endpoint bitmasks.
* - has_archive - True to enable post type archives. Will generate the proper rewrite rules if rewrite is enabled.
* - rewrite - false to prevent rewrite. Defaults to true. Use array('slug'=>$slug) to customize permastruct;
* default will use $post_type as slug. Other options include 'with_front', 'feeds', and 'pages'.
* - query_var - false to prevent queries, or string to value of the query var to use for this post type
* - can_export - true allows this post type to be exported.
* - show_in_nav_menus - true makes this post type available for selection in navigation menus.
* - _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!
*
* @since 2.9.0
* @uses $wp_post_types Inserts new post type object into the list
*
* @param string $post_type Name of the post type.
* @param array|string $args See above description.
* @return object|WP_Error the registered post type object, or an error object
*/
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, 'permalink_epmask' => EP_PERMALINK, 'can_export' => true, 'show_in_nav_menus' => null, 'show_in_menu' => 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;
}
// 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);
//.........这里部分代码省略.........
示例5: map_meta_cap
/**
* Restrict access to edit or delete posts based on the post's access restrictions.
*
* @param array $caps
* @param string $cap
* @param int $user_id
* @param array $args
* @return array
*/
public static function map_meta_cap($caps, $cap, $user_id, $args)
{
if (isset($args[0])) {
if (strpos($cap, 'edit_') === 0 || strpos($cap, 'delete_') === 0) {
if ($post_type = get_post_type($args[0])) {
$edit_post_type = 'edit_' . $post_type;
$delete_post_type = 'delete_' . $post_type;
if ($post_type_object = get_post_type_object($post_type)) {
if (!isset($post_type_object->capabilities)) {
$post_type_object->capabilities = array();
}
$caps_object = get_post_type_capabilities($post_type_object);
if (isset($caps_object->edit_post)) {
$edit_post_type = $caps_object->edit_post;
}
if (isset($caps_object->delete_post)) {
$delete_post_type = $caps_object->delete_post;
}
}
if ($cap === $edit_post_type || $cap === $delete_post_type) {
$post_id = null;
if (is_numeric($args[0])) {
$post_id = $args[0];
} else {
if ($args[0] instanceof WP_Post) {
$post_id = $post->ID;
}
}
if ($post_id) {
if (!self::user_can_read_post($post_id, $user_id)) {
$caps[] = 'do_not_allow';
}
}
}
}
}
}
return $caps;
}
示例6: register_post_type
/**
* Register a post type. Do not use before init.
*
* A simple 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.
* - description - A short descriptive summary of what the post type is. Defaults to blank.
* - public - Whether posts of this type should be shown in the admin UI. Defaults to false.
* - 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.
* - publicly_queryable - Whether post_type queries can be performed from the front page. Defaults to whatever public is set as.
* - 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.
* - menu_position - The position in the menu order the post type should appear. Defaults to the bottom.
* - menu_icon - The url to the icon to be used for this menu. Defaults to use the posts icon.
* - capability_type - The post type to use for checking read, edit, and delete capabilities. Defaults to "post".
* - 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 to construct capabilities.
* - hierarchical - Whether the post type is hierarchical. Defaults to false.
* - supports - An alias for calling add_post_type_support() directly. See add_post_type_support() for Documentation. Defaults to none.
* - 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().
* - 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.
* - permalink_epmask - The default rewrite endpoint bitmasks.
* - rewrite - false to prevent rewrite, or array('slug'=>$slug) to customize permastruct; default will use $post_type as slug.
* - query_var - false to prevent queries, or string to value of the query var to use for this post type
* - can_export - true allows this post type to be exported.
* - show_in_nav_menus - true makes this post type available for selection in navigation menus.
* - _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. Set to 'post.php?post=%d'. THIS IS FOR INTERNAL USE ONLY!
*
* @since 2.9.0
* @uses $wp_post_types Inserts new post type object into the list
*
* @param string $post_type Name of the post type.
* @param array|string $args See above description.
* @return object the registered post type object
*/
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, '_builtin' => false, '_edit_link' => 'post.php?post=%d', 'capability_type' => 'post', 'capabilities' => array(), 'hierarchical' => false, 'public' => false, 'rewrite' => true, 'query_var' => true, 'supports' => array(), 'register_meta_box_cb' => null, 'taxonomies' => array(), 'show_ui' => null, 'menu_position' => null, 'menu_icon' => null, 'permalink_epmask' => EP_PERMALINK, 'can_export' => true, 'show_in_nav_menus' => null);
$args = wp_parse_args($args, $defaults);
$args = (object) $args;
$post_type = sanitize_user($post_type, true);
$args->name = $post_type;
// 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;
}
// 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;
}
if (empty($args->capability_type)) {
$args->capability_type = 'post';
}
$args->cap = get_post_type_capabilities($args);
unset($args->capabilities);
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 && '' != get_option('permalink_structure')) {
if (!is_array($args->rewrite)) {
$args->rewrite = array();
}
if (!isset($args->rewrite['slug'])) {
$args->rewrite['slug'] = $post_type;
}
if (!isset($args->rewrite['with_front'])) {
$args->rewrite['with_front'] = true;
}
if ($args->hierarchical) {
$wp_rewrite->add_rewrite_tag("%{$post_type}%", '(.+?)', $args->query_var ? "{$args->query_var}=" : "post_type={$post_type}&name=");
} else {
//.........这里部分代码省略.........
示例7: get_post_type_capabilities
private function get_post_type_capabilities($post_type)
{
$args = $this->registered_post_type_args[$post_type];
if (is_array($args->capability_type) || $args->capability_type !== 'post') {
return $args->cap;
}
$args->capability_type = $post_type;
$args->map_meta_cap = TRUE;
$args->capabilities = array();
return get_post_type_capabilities($args);
}
开发者ID:JulieKuehl,项目名称:auburn-agency,代码行数:11,代码来源:class-wpfront-user-role-editor-custom-post-types.php
示例8: set_props
/**
* Sets post type properties.
*
* @since 4.6.0
* @access public
*
* @param array|string $args Array or string of arguments for registering a post type.
*/
public function set_props($args)
{
$args = wp_parse_args($args);
/**
* Filters the arguments for registering a post type.
*
* @since 4.4.0
*
* @param array $args Array of arguments for registering a post type.
* @param string $post_type Post type key.
*/
$args = apply_filters('register_post_type_args', $args, $this->name);
$has_edit_link = !empty($args['_edit_link']);
// Args prefixed with an underscore are reserved for internal use.
$defaults = array('labels' => array(), 'description' => '', 'public' => false, 'hierarchical' => false, 'exclude_from_search' => null, 'publicly_queryable' => null, 'show_ui' => null, 'show_in_menu' => null, 'show_in_nav_menus' => null, 'show_in_admin_bar' => null, 'menu_position' => null, 'menu_icon' => null, 'capability_type' => 'post', 'capabilities' => array(), 'map_meta_cap' => null, 'supports' => array(), 'register_meta_box_cb' => null, 'taxonomies' => array(), 'has_archive' => false, 'rewrite' => true, 'query_var' => true, 'can_export' => true, 'delete_with_user' => null, '_builtin' => false, '_edit_link' => 'post.php?post=%d');
$args = array_merge($defaults, $args);
$args['name'] = $this->name;
// 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'] = (bool) $args['show_in_menu'];
}
// If not set, default 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 not set, default to false.
if (null === $args['map_meta_cap']) {
$args['map_meta_cap'] = false;
}
// If there's no specified edit link and no UI, remove the edit link.
if (!$args['show_ui'] && !$has_edit_link) {
$args['_edit_link'] = '';
}
$this->cap = get_post_type_capabilities((object) $args);
unset($args['capabilities']);
if (is_array($args['capability_type'])) {
$args['capability_type'] = $args['capability_type'][0];
}
if (false !== $args['query_var']) {
if (true === $args['query_var']) {
$args['query_var'] = $this->name;
} else {
$args['query_var'] = sanitize_title_with_dashes($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'] = $this->name;
}
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;
}
}
}
foreach ($args as $property_name => $property_value) {
$this->{$property_name} = $property_value;
}
//.........这里部分代码省略.........
示例9: save_post
/**
* Save capability options.
*
* @param int $post_id
* @param mixed $post post data (not used here)
*/
public static function save_post($post_id = null, $post = null)
{
if (defined("DOING_AUTOSAVE") && DOING_AUTOSAVE) {
} else {
$post_type = get_post_type($post_id);
$post_type_object = get_post_type_object($post_type);
if ($post_type_object && $post_type != 'attachment') {
$post_types_option = Groups_Options::get_option(Groups_Post_Access::POST_TYPES, array());
if (!isset($post_types_option[$post_type]['add_meta_box']) || $post_types_option[$post_type]['add_meta_box']) {
if (isset($_POST[self::NONCE]) && wp_verify_nonce($_POST[self::NONCE], self::SET_CAPABILITY)) {
$post_type = isset($_POST["post_type"]) ? $_POST["post_type"] : null;
if ($post_type !== null) {
// See http://codex.wordpress.org/Function_Reference/current_user_can 20130119 WP 3.5
// "... Some capability checks (like 'edit_post' or 'delete_page') require this [the post ID] be provided."
// If the post ID is not provided, it will throw:
// PHP Notice: Undefined offset: 0 in /var/www/groups-forums/wp-includes/capabilities.php on line 1067
$edit_post_type = 'edit_' . $post_type;
if ($post_type_object = get_post_type_object($post_type)) {
if (!isset($post_type_object->capabilities)) {
// get_post_type_capabilities() (WP 3.8) will throw a warning
// when trying to merge the missing property otherwise. It's either a
// bug or the function's documentation should make it clear that you
// have to provide that.
$post_type_object->capabilities = array();
}
$caps_object = get_post_type_capabilities($post_type_object);
if (isset($caps_object->edit_post)) {
$edit_post_type = $caps_object->edit_post;
}
}
if (current_user_can($edit_post_type, $post_id)) {
// quick-create ?
if (current_user_can(GROUPS_ADMINISTER_GROUPS)) {
if (!empty($_POST['quick-group-capability'])) {
$creator_id = get_current_user_id();
$datetime = date('Y-m-d H:i:s', time());
$name = ucfirst(strtolower(trim($_POST['quick-group-capability'])));
if (strlen($name) > 0) {
// create or obtain the group
if ($group = Groups_Group::read_by_name($name)) {
} else {
if ($group_id = Groups_Group::create(compact('creator_id', 'datetime', 'name'))) {
$group = Groups_Group::read($group_id);
}
}
// create or obtain the capability
$name = strtolower($name);
if ($capability = Groups_Capability::read_by_capability($name)) {
} else {
if ($capability_id = Groups_Capability::create(array('capability' => $name))) {
$capability = Groups_Capability::read($capability_id);
}
}
if ($group && $capability) {
// add the capability to the group
if (!Groups_Group_Capability::read($group->group_id, $capability->capability_id)) {
Groups_Group_Capability::create(array('group_id' => $group->group_id, 'capability_id' => $capability->capability_id));
}
// enable the capability for access restriction
$valid_read_caps = Groups_Options::get_option(Groups_Post_Access::READ_POST_CAPABILITIES, array(Groups_Post_Access::READ_POST_CAPABILITY));
if (!in_array($capability->capability, $valid_read_caps)) {
$valid_read_caps[] = $capability->capability;
}
Groups_Options::update_option(Groups_Post_Access::READ_POST_CAPABILITIES, $valid_read_caps);
// add the current user to the group
Groups_User_Group::create(array('user_id' => get_current_user_id(), 'group_id' => $group->group_id));
// put the capability ID in $_POST[self::CAPABILITY] so it is treated below
if (empty($_POST[self::CAPABILITY])) {
$_POST[self::CAPABILITY] = array();
}
if (!in_array($capability->capability_id, $_POST[self::CAPABILITY])) {
$_POST[self::CAPABILITY][] = $capability->capability_id;
}
}
}
}
}
// set
if (self::user_can_restrict()) {
$valid_read_caps = self::get_valid_read_caps_for_user();
foreach ($valid_read_caps as $valid_read_cap) {
if ($capability = Groups_Capability::read_by_capability($valid_read_cap)) {
if (!empty($_POST[self::CAPABILITY]) && is_array($_POST[self::CAPABILITY]) && in_array($capability->capability_id, $_POST[self::CAPABILITY])) {
Groups_Post_Access::create(array('post_id' => $post_id, 'capability' => $capability->capability));
} else {
Groups_Post_Access::delete($post_id, $capability->capability);
}
}
}
}
// show groups
Groups_Options::update_user_option(self::SHOW_GROUPS, !empty($_POST[self::SHOW_GROUPS]));
}
}
//.........这里部分代码省略.........
示例10: wpcf_access_registered_post_type_hook
/**
* Maps rules and settings for post types registered outside of Types.
*
* @param type $post_type
* @param type $args
*/
function wpcf_access_registered_post_type_hook($post_type, $args)
{
global $wpcf_access, $wp_post_types;
$settings_access = get_option('wpcf-access-types', array());
if (isset($settings_access[$post_type])) {
$data = $settings_access[$post_type];
// Mark that will inherit post settings
// TODO New types to be added
if (!in_array($post_type, array('post', 'page', 'attachment', 'media')) && (empty($wp_post_types[$post_type]->capability_type) || $wp_post_types[$post_type]->capability_type == 'post')) {
$wp_post_types[$post_type]->_wpcf_access_inherits_post_cap = 1;
}
if ($data['mode'] == 'not_managed') {
return false;
}
// Force map meta caps
$wp_post_types[$post_type]->capability_type = array(sanitize_title($wp_post_types[$post_type]->labels->singular_name), sanitize_title($wp_post_types[$post_type]->labels->name));
$wp_post_types[$post_type]->map_meta_cap = true;
$wp_post_types[$post_type]->capabilities = array();
$wp_post_types[$post_type]->cap = get_post_type_capabilities($wp_post_types[$post_type]);
unset($wp_post_types[$post_type]->capabilities);
$caps = wpcf_access_types_caps();
$mapped = array();
// Map predefined
foreach ($caps as $cap_slug => $cap_spec) {
if (isset($data['permissions'][$cap_spec['predefined']])) {
$mapped[$cap_slug] = $data['permissions'][$cap_spec['predefined']];
} else {
$mapped[$cap_slug] = $cap_spec['predefined'];
}
}
// Set rule settings for post type by pre-defined caps
foreach ($args->cap as $cap_slug => $cap_spec) {
if (isset($mapped[$cap_slug])) {
if (isset($mapped[$cap_slug]['role'])) {
$wpcf_access->rules->types[$cap_spec]['role'] = $mapped[$cap_slug]['role'];
} else {
$wpcf_access->rules->types[$cap_spec]['role'] = 'administrator';
}
$wpcf_access->rules->types[$cap_spec]['users'] = isset($mapped[$cap_slug]['users']) ? $mapped[$cap_slug]['users'] : array();
$wpcf_access->rules->types[$cap_spec]['types'][$args->name] = 1;
}
}
// TODO create_posts set manually for now
// Monitor WP changes
if (!isset($wpcf_access->rules->types['create_posts'])) {
$wpcf_access->rules->types['create_posts'] = $wpcf_access->rules->types['edit_posts'];
}
if (!isset($wpcf_access->rules->types['create_post'])) {
$wpcf_access->rules->types['create_post'] = $wpcf_access->rules->types['edit_post'];
}
}
// Check read permissions
// Check unlogged user settings
$check_read = false;
if (isset($settings_access[$post_type])) {
$data = $settings_access[$post_type];
$check_read = true;
}
if ($check_read) {
if ($data['mode'] == 'not_managed') {
return false;
}
// Mark post type as hidden
if (!empty($data['permissions']['read']['role'])) {
wpcf_access_hide_post_type($data['permissions']['read']['role'], $post_type);
} else {
// Missed setting? Debug that!
$wpcf_access->errors['hide_post'][$post_type] = array('data' => $data);
}
}
}
示例11: wpcf_access_registered_post_type_hook
/**
* Maps rules and settings for post types registered outside of Types.
*
* @param type $post_type
* @param type $args
*/
public static function wpcf_access_registered_post_type_hook($post_type, $args)
{
global $wpcf_access, $wp_post_types;
static $_builtin_types = null;
$model = TAccess_Loader::get('MODEL/Access');
$settings_access = $model->getAccessTypes();
if (isset($wp_post_types[$post_type])) {
// Force map meta caps, if not builtin
if (in_array($post_type, array('post', 'page'))) {
switch ($post_type) {
case 'page':
$_sing = 'page';
$_plur = 'pages';
break;
case 'post':
default:
$_sing = 'post';
$_plur = 'posts';
break;
}
} else {
// else use singular/plural names
$_sing = sanitize_title($wp_post_types[$post_type]->labels->singular_name);
$_plur = sanitize_title($wp_post_types[$post_type]->labels->name);
if ($_sing == $_plur) {
$_plur = $_plur . '_s';
}
}
$capability_type = array($_sing, $_plur);
// set singular / plural caps based on names or default for builtins
$tmp = unserialize(serialize($wp_post_types[$post_type]));
$tmp->capability_type = $capability_type;
$tmp->map_meta_cap = true;
$tmp->capabilities = array();
$tmp->cap = get_post_type_capabilities($tmp);
// provide access pointers
$wp_post_types[$post_type]->__accessIsCapValid = !self::wpcf_check_cap_conflict(array_values((array) $tmp->cap));
$wp_post_types[$post_type]->__accessIsNameValid = self::wpcf_is_object_valid('type', self::wpcf_object_to_array($tmp));
$wp_post_types[$post_type]->__accessNewCaps = $tmp->cap;
if (isset($settings_access[$post_type])) {
$data = $settings_access[$post_type];
/*if (null===$_builtin_types)
{
$_builtin_types=get_post_types(array('_builtin' => true), 'names');
}*/
// Mark that will inherit post settings
// TODO New types to be added
if (!in_array($post_type, array('post', 'page', 'attachment', 'media')) && (empty($wp_post_types[$post_type]->capability_type) || $wp_post_types[$post_type]->capability_type == 'post')) {
$wp_post_types[$post_type]->_wpcf_access_inherits_post_cap = 1;
}
if ($data['mode'] == 'not_managed' || !$wp_post_types[$post_type]->__accessIsCapValid || !$wp_post_types[$post_type]->__accessIsNameValid) {
$settings_access[$post_type]['mode'] = 'not_managed';
$model->updateAccessTypes($settings_access);
return false;
}
$caps = self::wpcf_access_types_caps();
$mapped = array();
// Map predefined
foreach ($caps as $cap_slug => $cap_spec) {
if (isset($data['permissions'][$cap_spec['predefined']])) {
$mapped[$cap_slug] = $data['permissions'][$cap_spec['predefined']];
} else {
$mapped[$cap_slug] = $cap_spec['predefined'];
}
}
// set singular / plural caps based on names or default for builtins
$wp_post_types[$post_type]->capability_type = $capability_type;
$wp_post_types[$post_type]->map_meta_cap = true;
$wp_post_types[$post_type]->capabilities = array();
$wp_post_types[$post_type]->cap = get_post_type_capabilities($wp_post_types[$post_type]);
//$wp_post_types[$post_type]=$tmp;
unset($wp_post_types[$post_type]->capabilities);
// Set rule settings for post type by pre-defined caps
foreach ($args->cap as $cap_slug => $cap_spec) {
if (isset($mapped[$cap_slug])) {
if (isset($mapped[$cap_slug]['role'])) {
$wpcf_access->rules->types[$cap_spec]['role'] = $mapped[$cap_slug]['role'];
} else {
$wpcf_access->rules->types[$cap_spec]['role'] = 'administrator';
}
$wpcf_access->rules->types[$cap_spec]['users'] = isset($mapped[$cap_slug]['users']) ? $mapped[$cap_slug]['users'] : array();
$wpcf_access->rules->types[$cap_spec]['types'][$post_type] = 1;
}
}
//taccess_log(array($post_type, $args->cap, $mapped, $wpcf_access->rules->types));
// TODO create_posts set manually for now
// Monitor WP changes
if (!isset($wpcf_access->rules->types['create_posts']) && isset($wpcf_access->rules->types['edit_posts'])) {
$wpcf_access->rules->types['create_posts'] = $wpcf_access->rules->types['edit_posts'];
}
/*if (!isset($wpcf_access->rules->types['create_pages']) && isset($wpcf_access->rules->types['edit_pages'])) {
$wpcf_access->rules->types['create_pages'] = $wpcf_access->rules->types['edit_pages'];
}*/
if (!isset($wpcf_access->rules->types['create_post']) && isset($wpcf_access->rules->types['edit_post'])) {
//.........这里部分代码省略.........