BP_Group_Extension
用于创建组扩展的API,无需将内容硬编码到主题中。
描述
要实现,请扩展这个类。在构造函数中,向parent::init()传递一个可选参数数组,以配置小部件。config数组支持以下值:
- 你的扩展的唯一标识符。这个值将用于构建url,所以要确保url安全。
- 为您的扩展提供一个可翻译的名称。此值用于填充导航选项卡,以及admin/ edit/create选项卡的默认标题。
- “可见性”设置为“公共”(默认)为您的扩展(主标签和小部件),以供任何人可以访问组,“私人”否则。
- 一个整数,用来说明导航项应该出现在tab列表的哪个位置。
- ' enable_nav_item '设置为真为您的扩展的主选项卡可用于任何人谁可以访问组。
- ' nav_item_name '你想要出现在nav标签的可翻译文本。默认值为' name '。
- widget_display()方法被钩到的WordPress动作。
- template_file用于加载主扩展选项卡内容的模板文件。默认为“团体/单/ plugins.php”。
- 一个多维数组,描述如下。
- ' access '用户可以访问插件的标签。
- 用户可以看到插件的导航标签。
BP_Group_Extension使用“设置屏幕”的概念。设置屏幕有三种上下文:
- ' create ',它将一个新步骤插入到组创建过程中
- ' edit ',它为您的扩展添加一个标签到组的管理部分
- 每个设置屏幕都由一对方法填充:一个为屏幕创建标记,一个处理从屏幕提交的表单数据。如果你的插件在所有三种情况下都需要屏幕,并且标记和表单处理逻辑在每一种情况下都是相同的,你可以定义两个方法来处理所有的屏幕:如果一个或多个设置屏幕需要单独的逻辑,你可以定义特定于上下文的方法,例如:BP_Group_Extension将使用更具体的方法,如果他们是可用的。
你可以通过向init数组传递一个可选的' screens '参数来进一步定制设置屏幕(标签名等)。格式如下:“屏幕”= >阵列(“创建”= >数组(“鼻涕虫”= >“foo”,“名字”= >“foo”、“位置”= > 55岁' screen_callback ' = > ' my_create_screen_callback ', ' screen_save_callback ' = > ' my_create_screen_save_callback ',), '编辑' = >数组 ( // ... ), 只提供这些参数,你真的想要改变从默认配置。BP_Group_Extension我会做剩下的。
注意,' edit '屏幕接受一个附加参数:' submit_text ',它定义了自动添加到扩展的edit屏幕的Submit按钮的文本(默认为' Save Changes ')。此外,“admin”屏幕接受两个额外的参数:“metabox_priority”和“metabox_context”。有关这些参数的更多细节,请参阅add_meta_box()文档。
在BuddyPress 1.7之前,组扩展配置的设置略有不同。遗留方法虽然已弃用,但仍然受到支持。
源
文件:bp-groups /类/ class-bp-group-extension.php
Class BP_Group_extension {/ **公开************************************************************ / / ** *有关此扩展屏幕的信息。* * @since buddypress 1.8.0 * @var array * / public $ screens = array();/ ** *扩展课程的名称。* * @since buddypress 1.8.0 * @var字符串* / public $ class_name ='';/ ** *当前扩展的反射组对象。* * @since buddypress 1.8.0 * @var reflectionclass * / public $ class_reflection = null;/ ** *扩展的解析配置参数。* * @since buddypress 1.8.0 * @var array * / public $ params = array();/ ** *原始配置参数,由扩展类传递。* * @since buddypress 2.1.0 * @var array * / public $ params_raw = array(); /** * The ID of the current group. * * @since BuddyPress 1.8.0 * @var int */ public $group_id = 0; /** * The slug of the current extension. * * @since BuddyPress 1.1.0 * @var string */ public $slug = ''; /** * The translatable name of the current extension. * * @since BuddyPress 1.1.0 * @var string */ public $name = ''; /** * The visibility of the extension tab. 'public' or 'private'. * * @since BuddyPress 1.1.0 * @var string */ public $visibility = 'public'; /** * The numeric position of the main nav item. * * @since BuddyPress 1.1.0 * @var int */ public $nav_item_position = 81; /** * Whether to show the nav item. * * @since BuddyPress 1.1.0 * @var bool */ public $enable_nav_item = true; /** * Whether the current user should see the navigation item. * * @since BuddyPress 2.1.0 * @var bool */ public $user_can_see_nav_item; /** * Whether the current user can visit the tab. * * @since BuddyPress 2.1.0 * @var bool */ public $user_can_visit; /** * The text of the nav item. Defaults to self::name. * * @since BuddyPress 1.1.0 * @var string */ public $nav_item_name = ''; /** * The WP action that self::widget_display() is attached to. * * Default: 'groups_custom_group_boxes'. * * @since BuddyPress 1.1.0 * @var string */ public $display_hook = 'groups_custom_group_boxes'; /** * The template file used to load the plugin content. * * Default: 'groups/single/plugins'. * * @since BuddyPress 1.1.0 * @var string */ public $template_file = 'groups/single/plugins'; /** Protected *********************************************************/ /** * Has the extension been initialized? * * @since BuddyPress 1.8.0 * @var bool */ protected $initialized = false; /** * Extension properties as set by legacy extensions. * * @since BuddyPress 1.8.0 * @var array */ protected $legacy_properties = array(); /** * Converted legacy parameters. * * These are the extension properties as set by legacy extensions, but * then converted to match the new format for params. * * @since BuddyPress 1.8.0 * @var array */ protected $legacy_properties_converted = array(); /** * Redirect location as defined by post-edit save callback. * * @since BuddyPress 2.1.0 * @var string */ protected $post_save_redirect; /** * Miscellaneous data as set by the __set() magic method. * * @since BuddyPress 1.8.0 * @var array */ protected $data = array(); /** Screen Overrides **************************************************/ /* * Screen override methods are how your extension will display content * and handle form submits. Your extension should only override those * methods that it needs for its purposes. */ /** * The content of the group tab. * * @since BuddyPress 1.1.0 * * @param int|null $group_id ID of the group to display. */ public function display( $group_id = null ) {} /** * Content displayed in a widget sidebar, if applicable. * * @since BuddyPress 1.1.0 */ public function widget_display() {} /* * *_screen() displays the settings form for the given context * *_screen_save() processes data submitted via the settings form * The settings_* methods are generic fallbacks, which can optionally * be overridden by the more specific edit_*, create_*, and admin_* * versions. */ public function settings_screen( $group_id = null ) {} public function settings_screen_save( $group_id = null ) {} public function edit_screen( $group_id = null ) {} public function edit_screen_save( $group_id = null ) {} public function create_screen( $group_id = null ) {} public function create_screen_save( $group_id = null ) {} public function admin_screen( $group_id = null ) {} public function admin_screen_save( $group_id = null ) {} /** Setup *************************************************************/ /** * Initialize the extension, using your config settings. * * Your plugin should call this method at the very end of its * constructor, like so: * * public function __construct() { * $args = array( * 'slug' => 'my-group-extension', * 'name' => 'My Group Extension', * // ... * ); * * parent::init( $args ); * } * * @since BuddyPress 1.8.0 * @since BuddyPress 2.1.0 Added 'access' and 'show_tab' arguments to `$args`. * * @param array $args { * Array of initialization arguments. * @type string $slug Unique, URL-safe identifier for your extension. * @type string $name Translatable name for your extension. Used to populate * navigation items. * @type string $visibility Optional. Set to 'public' for your extension (the main tab as well * as the widget) to be available to anyone who can access the group; * set to 'private' otherwise. Default: 'public'. * @type int $nav_item_position Optional. Location of the nav item in the tab list. * Default: 81. * @type bool $enable_nav_item Optional. Whether the extension's tab should be accessible to * anyone who can view the group. Default: true. * @type string $nav_item_name Optional. The translatable text you want to appear in the nav tab. * Default: the value of `$name`. * @type string $display_hook Optional. The WordPress action that the widget_display() method is * hooked to. Default: 'groups_custom_group_boxes'. * @type string $template_file Optional. Theme-relative path to the template file BP should use * to load the content of your main extension tab. * Default: 'groups/single/plugins.php'. * @type array $screens A multi-dimensional array of configuration information for the * extension screens. See docblock of {@link BP_Group_Extension} * for more details. * @type string|array $access Which users can visit the plugin's tab. Possible values: 'anyone', * 'loggedin', 'member', 'mod', 'admin' or 'noone'. ('member', 'mod', * 'admin' refer to user's role in group.) Note that 'mod' targets * only group moderators. If you want to allow access to group moderators * and admins, specify `array( 'mod', 'admin' )`. Defaults to 'anyone' * for public groups and 'member' for private groups. * @type string|array $show_tab Which users can see the plugin's navigation tab. Possible values: * 'anyone', 'loggedin', 'member', 'mod', 'admin' or 'noone'. * ('member', 'mod', 'admin' refer to user's role in group.) Note * that 'mod' targets only group moderators. If you want to show the * tab to group moderators and admins, specify * `array( 'mod', 'admin' )`. Defaults to 'anyone' for public groups * and 'member' for private groups. * } */ public function init( $args = array() ) { // Store the raw arguments. $this->params_raw = $args; // Before this init() method was introduced, plugins were // encouraged to set their config directly. For backward // compatibility with these plugins, we detect whether this is // one of those legacy plugins, and parse any legacy arguments // with those passed to init(). $this->parse_legacy_properties(); $args = $this->parse_args_r( $args, $this->legacy_properties_converted ); // Parse with defaults. $this->params = $this->parse_args_r( $args, array( 'slug' => $this->slug, 'name' => $this->name, 'visibility' => $this->visibility, 'nav_item_position' => $this->nav_item_position, 'enable_nav_item' => (bool) $this->enable_nav_item, 'nav_item_name' => $this->nav_item_name, 'display_hook' => $this->display_hook, 'template_file' => $this->template_file, 'screens' => $this->get_default_screens(), 'access' => null, 'show_tab' => null, ) ); $this->initialized = true; } /** * The main setup routine for the extension. * * This method contains the primary logic for setting up an extension's * configuration, setting up backward compatibility for legacy plugins, * and hooking the extension's screen functions into WP and BP. * * Marked 'public' because it must be accessible to add_action(). * However, you should never need to invoke this method yourself - it * is called automatically at the right point in the load order by * bp_register_group_extension(). * * @since BuddyPress 1.1.0 */ public function _register() { // Detect and parse properties set by legacy extensions. $this->parse_legacy_properties(); // Initialize, if necessary. This should only happen for // legacy extensions that don't call parent::init() themselves. if ( true !== $this->initialized ) { $this->init(); } // Set some config values, based on the parsed params. $this->group_id = $this->get_group_id(); $this->slug = $this->params['slug']; $this->name = $this->params['name']; $this->visibility = $this->params['visibility']; $this->nav_item_position = $this->params['nav_item_position']; $this->nav_item_name = $this->params['nav_item_name']; $this->display_hook = $this->params['display_hook']; $this->template_file = $this->params['template_file']; // Configure 'screens': create, admin, and edit contexts. $this->setup_screens(); // Configure access-related settings. $this->setup_access_settings(); // Mirror configuration data so it's accessible to plugins // that look for it in its old locations. $this->setup_legacy_properties(); // Hook the extension into BuddyPress. $this->setup_display_hooks(); $this->setup_create_hooks(); $this->setup_edit_hooks(); $this->setup_admin_hooks(); } /** * Set up some basic info about the Extension. * * Here we collect the name of the extending class, as well as a * ReflectionClass that is used in get_screen_callback() to determine * whether your extension overrides certain callback methods. * * @since BuddyPress 1.8.0 */ protected function setup_class_info() { if ( empty( $this->class_name ) ) { $this->class_name = get_class( $this ); } if ( is_null( $this->class_reflection ) ) { $this->class_reflection = new ReflectionClass( $this->class_name ); } } /** * Get the current group ID. * * Check for: * - current group * - new group * - group admin * * @since BuddyPress 1.8.0 * * @return int */ public static function get_group_id() { // Usually this will work. $group_id = bp_get_current_group_id(); // On the admin, get the group id out of the $_GET params. if ( empty( $group_id ) && is_admin() && ( isset( $_GET['page'] ) && ( 'bp-groups' === $_GET['page'] ) ) && ! empty( $_GET['gid'] ) ) { $group_id = (int) $_GET['gid']; } // This fallback will only be hit when the create step is very // early. if ( empty( $group_id ) && bp_get_new_group_id() ) { $group_id = bp_get_new_group_id(); } // On some setups, the group id has to be fetched out of the // $_POST array // @todo Figure out why this is happening during group creation. if ( empty( $group_id ) && isset( $_POST['group_id'] ) ) { $group_id = (int) $_POST['group_id']; } return $group_id; } /** * Gather configuration data about your screens. * * @since BuddyPress 1.8.0 * * @return array */ protected function get_default_screens() { $this->setup_class_info(); $screens = array( 'create' => array( 'position' => 81, ), 'edit' => array( 'submit_text' => __( 'Save Changes', 'buddyboss' ), ), 'admin' => array( 'metabox_context' => 'normal', 'metabox_priority' => 'core', ), ); foreach ( $screens as $context => &$screen ) { $screen['enabled'] = true; $screen['name'] = $this->name; $screen['slug'] = $this->slug; $screen['screen_callback'] = $this->get_screen_callback( $context, 'screen' ); $screen['screen_save_callback'] = $this->get_screen_callback( $context, 'screen_save' ); } return $screens; } /** * Set up screens array based on params. * * @since BuddyPress 1.8.0 */ protected function setup_screens() { foreach ( (array) $this->params['screens'] as $context => $screen ) { if ( empty( $screen['slug'] ) ) { $screen['slug'] = $this->slug; } if ( empty( $screen['name'] ) ) { $screen['name'] = $this->name; } $this->screens[ $context ] = $screen; } } /** * Set up access-related settings for this extension. * * @since BuddyPress 2.1.0 */ protected function setup_access_settings() { // Bail if no group ID is available. if ( empty( $this->group_id ) ) { return; } // Backward compatibility. if ( isset( $this->params['enable_nav_item'] ) ) { $this->enable_nav_item = (bool) $this->params['enable_nav_item']; } // Tab Access. $this->user_can_visit = false; // Backward compatibility for components that do not provide // explicit 'access' parameter. if ( empty( $this->params['access'] ) ) { if ( false === $this->params['enable_nav_item'] ) { $this->params['access'] = 'noone'; } else { $group = groups_get_group( $this->group_id ); if ( ! empty( $group->status ) && 'public' === $group->status ) { // Tabs in public groups are accessible to anyone by default. $this->params['access'] = 'anyone'; } else { // All other groups have members-only as the default. $this->params['access'] = 'member'; } } } // Parse multiple access conditions into an array. $access_conditions = $this->params['access']; if ( ! is_array( $access_conditions ) ) { $access_conditions = explode( ',', $access_conditions ); } // If the current user meets at least one condition, the // get access. foreach ( $access_conditions as $access_condition ) { if ( $this->user_meets_access_condition( $access_condition ) ) { $this->user_can_visit = true; break; } } // Tab Visibility. $this->user_can_see_nav_item = false; // Backward compatibility for components that do not provide // explicit 'show_tab' parameter. if ( empty( $this->params['show_tab'] ) ) { if ( false === $this->params['enable_nav_item'] ) { // The enable_nav_item index is only false if it's been // defined explicitly as such in the // constructor. So we always trust this value. $this->params['show_tab'] = 'noone'; } elseif ( isset( $this->params_raw['enable_nav_item'] ) || isset( $this->params_raw['visibility'] ) ) { // If enable_nav_item or visibility is passed, // we assume this is a legacy extension. // Legacy behavior is that enable_nav_item=true + // visibility=private implies members-only. if ( 'public' !== $this->visibility ) { $this->params['show_tab'] = 'member'; } else { $this->params['show_tab'] = 'anyone'; } } else { // No show_tab or enable_nav_item value is // available, so match the value of 'access'. $this->params['show_tab'] = $this->params['access']; } } // Parse multiple access conditions into an array. $access_conditions = $this->params['show_tab']; if ( ! is_array( $access_conditions ) ) { $access_conditions = explode( ',', $access_conditions ); } // If the current user meets at least one condition, the // get access. foreach ( $access_conditions as $access_condition ) { if ( $this->user_meets_access_condition( $access_condition ) ) { $this->user_can_see_nav_item = true; break; } } } /** * Check whether the current user meets an access condition. * * @since BuddyPress 2.1.0 * * @param string $access_condition 'anyone', 'loggedin', 'member', * 'mod', 'admin' or 'noone'. * @return bool */ protected function user_meets_access_condition( $access_condition ) { switch ( $access_condition ) { case 'admin' : $meets_condition = groups_is_user_admin( bp_loggedin_user_id(), $this->group_id ); break; case 'mod' : $meets_condition = groups_is_user_mod( bp_loggedin_user_id(), $this->group_id ); break; case 'member' : $meets_condition = groups_is_user_member( bp_loggedin_user_id(), $this->group_id ); break; case 'loggedin' : $meets_condition = is_user_logged_in(); break; case 'noone' : $meets_condition = false; break; case 'anyone' : default : $meets_condition = true; break; } return $meets_condition; } /** Display ***********************************************************/ /** * Hook this extension's group tab into BuddyPress, if necessary. * * @since BuddyPress 1.8.0 */ protected function setup_display_hooks() { // Bail if not a group. if ( ! bp_is_group() ) { return; } // Backward compatibility only. if ( ( 'public' !== $this->visibility ) && ! buddypress()->groups->current_group->user_has_access ) { return; } // If the user can see the nav item, we create it. $user_can_see_nav_item = $this->user_can_see_nav_item(); if ( $user_can_see_nav_item ) { $group_permalink = bp_get_group_permalink( groups_get_current_group() ); bp_core_create_subnav_link( array( 'name' => ! $this->nav_item_name ? $this->name : $this->nav_item_name, 'slug' => $this->slug, 'parent_slug' => bp_get_current_group_slug(), 'parent_url' => $group_permalink, 'position' => $this->nav_item_position, 'item_css_id' => 'nav-' . $this->slug, 'screen_function' => array( &$this, '_display_hook' ), 'user_has_access' => $user_can_see_nav_item, 'no_access_url' => $group_permalink, ), 'groups' ); } // If the user can visit the screen, we register it. $user_can_visit = $this->user_can_visit(); if ( $user_can_visit ) { $group_permalink = bp_get_group_permalink( groups_get_current_group() ); bp_core_register_subnav_screen_function( array( 'slug' => $this->slug, 'parent_slug' => bp_get_current_group_slug(), 'screen_function' => array( &$this, '_display_hook' ), 'user_has_access' => $user_can_visit, 'no_access_url' => $group_permalink, ), 'groups' ); // When we are viewing the extension display page, set the title and options title. if ( bp_is_current_action( $this->slug ) ) { add_filter( 'bp_group_user_has_access', array( $this, 'group_access_protection' ), 10, 2 ); $extension_name = $this->name; add_action( 'bp_template_content_header', function() use ( $extension_name ) { echo esc_attr( $extension_name ); } ); add_action( 'bp_template_title', function() use ( $extension_name ) { echo esc_attr( $extension_name ); } ); } } // Hook the group home widget. if ( bp_is_group_home() ) { add_action( $this->display_hook, array( &$this, 'widget_display' ) ); } } /** * Hook the main display method, and loads the template file. * * @since BuddyPress 1.1.0 */ public function _display_hook() { add_action( 'bp_template_content', array( &$this, 'call_display' ) ); /** * Filters the template to load for the main display method. * * @since BuddyPress 1.0.0 * * @param string $template_file Path to the template to load. */ bp_core_load_template( apply_filters( 'bp_core_template_plugin', $this->template_file ) ); } /** * Call the display() method. * * We use this wrapper so that we can pass the group_id to the * display() callback. * * @since BuddyPress 2.1.1 */ public function call_display() { $this->display( $this->group_id ); } /** * Determine whether the current user should see this nav tab. * * Note that this controls only the display of the navigation item. * Access to the tab is controlled by the user_can_visit() check. * * @since BuddyPress 2.1.0 * * @param bool $user_can_see_nav_item Whether or not the user can see the nav item. * @return bool */ public function user_can_see_nav_item( $user_can_see_nav_item = false ) { // Always allow moderators to see nav items, even if explicitly 'noone' if ( ( 'noone' !== $this->params['show_tab'] ) && bp_current_user_can( 'bp_moderate' ) ) { return true; } return $this->user_can_see_nav_item; } /** * Determine whether the current user has access to visit this tab. * * Note that this controls the ability of a user to access a tab. * Display of the navigation item is controlled by user_can_see_nav_item(). * * @since BuddyPress 2.1.0 * * @param bool $user_can_visit Whether or not the user can visit the tab. * @return bool */ public function user_can_visit( $user_can_visit = false ) { // Always allow moderators to visit a tab, even if explicitly 'noone' if ( ( 'noone' !== $this->params['access'] ) && bp_current_user_can( 'bp_moderate' ) ) { return true; } return $this->user_can_visit; } /** * Filter the access check in bp_groups_group_access_protection() for this extension. * * Note that $no_access_args is passed by reference, as there are some * circumstances where the bp_core_no_access() arguments need to be * modified before the redirect takes place. * * @since BuddyPress 2.1.0 * * @param bool $user_can_visit Whether or not the user can visit the tab. * @param array $no_access_args Array of args to help determine access. * @return bool */ public function group_access_protection( $user_can_visit, &$no_access_args ) { $user_can_visit = $this->user_can_visit(); if ( ! $user_can_visit && is_user_logged_in() ) { $current_group = groups_get_group( $this->group_id ); $no_access_args['message'] = __( 'You do not have access to this content.', 'buddyboss' ); $no_access_args['root'] = bp_get_group_permalink( $current_group ) . 'home/'; $no_access_args['redirect'] = false; } return $user_can_visit; } /** Create ************************************************************/ /** * Hook this extension's Create step into BuddyPress, if necessary. * * @since BuddyPress 1.8.0 */ protected function setup_create_hooks() { if ( ! $this->is_screen_enabled( 'create' ) ) { return; } $screen = $this->screens['create']; // Insert the group creation step for the new group extension. buddypress()->groups->group_creation_steps[ $screen['slug'] ] = array( 'name' => $screen['name'], 'slug' => $screen['slug'], 'position' => $screen['position'], ); // The maybe_ methods check to see whether the create_* // callbacks should be invoked (ie, are we on the // correct group creation step). Hooked in separate // methods because current creation step info not yet // available at this point. add_action( 'groups_custom_create_steps', array( $this, 'maybe_create_screen' ) ); add_action( 'groups_create_group_step_save_' . $screen['slug'], array( $this, 'maybe_create_screen_save' ) ); } /** * Call the create_screen() method, if we're on the right page. * * @since BuddyPress 1.8.0 */ public function maybe_create_screen() { if ( ! bp_is_group_creation_step( $this->screens['create']['slug'] ) ) { return; } call_user_func( $this->screens['create']['screen_callback'], $this->group_id ); $this->nonce_field( 'create' ); // The create screen requires an additional nonce field // due to a quirk in the way the templates are built. wp_nonce_field( 'groups_create_save_' . bp_get_groups_current_create_step(), '_wpnonce', false ); } /** * Call the create_screen_save() method, if we're on the right page. * * @since BuddyPress 1.8.0 */ public function maybe_create_screen_save() { if ( ! bp_is_group_creation_step( $this->screens['create']['slug'] ) ) { return; } $this->check_nonce( 'create' ); call_user_func( $this->screens['create']['screen_save_callback'], $this->group_id ); } /** Edit **************************************************************/ /** * Hook this extension's Edit panel into BuddyPress, if necessary. * * @since BuddyPress 1.8.0 */ protected function setup_edit_hooks() { // Bail if not in a group. if ( ! bp_is_group() ) { return; } // Bail if not an edit screen. if ( ! $this->is_screen_enabled( 'edit' ) || ! bp_is_item_admin() ) { return; } $screen = $this->screens['edit']; $position = isset( $screen['position'] ) ? (int) $screen['position'] : 10; $position += 40; $current_group = groups_get_current_group(); $admin_link = trailingslashit( bp_get_group_permalink( $current_group ) . 'admin' ); $subnav_args = array( 'name' => $screen['name'], 'slug' => $screen['slug'], 'parent_slug' => $current_group->slug . '_manage', 'parent_url' => $admin_link, 'user_has_access' => bp_is_item_admin(), 'position' => $position, 'screen_function' => 'groups_screen_group_admin', ); // Should we add a menu to the Group's WP Admin Bar. if ( ! empty( $screen['show_in_admin_bar'] ) ) { $subnav_args['show_in_admin_bar'] = true; } // Add the tab to the manage navigation. bp_core_new_subnav_item( $subnav_args, 'groups' ); // Catch the edit screen and forward it to the plugin template. if ( bp_is_groups_component() && bp_is_current_action( 'admin' ) && bp_is_action_variable( $screen['slug'], 0 ) ) { $this->call_edit_screen_save( $this->group_id ); add_action( 'groups_custom_edit_steps', array( &$this, 'call_edit_screen' ) ); // Determine the proper template and save for later // loading. if ( '' !== bp_locate_template( array( 'groups/single/home.php' ), false ) ) { $this->edit_screen_template = '/groups/single/home'; } else { add_action( 'bp_template_content_header', function() { echo '
- '; bp_group_admin_tabs(); echo '
更新日志
版本 | 描述 |
---|---|
BuddyPress 1.1.0 | 介绍了。 |
方法
- __get-提供对其他不可用的对象属性的访问。
- __isset当foo不可用时,为isset($this->foo)提供一个回退。
- __set-允许插件设置其他不可用的对象属性。
- _display_hook—挂接主显示方法,加载模板文件。
- _meta_box_display_callback-为这个扩展创建仪表板元框。
- _register-主要的设置程序的扩展。
- admin_screen
- admin_screen_save
- call_admin_screen-调用admin_screen()方法,并添加nonce字段。
- call_admin_screen_save-检查nonce,并调用admin_screen_save()方法。
- call_display-调用display()方法。
- call_edit_screen-调用edit_screen()方法。
- call_edit_screen_save-检查nonce,并调用edit_screen_save()方法。
- call_edit_screen_template_loader—加载包含Edit屏幕的模板。
- check_nonce-在提交的设置表单上检查nonce。
- create_screen
- create_screen_save
- detect_post_save_redirect- Detect重定向到硬编码的edit_screen_save()回调。
- 显示—“group”页签内容。
- edit_screen
- edit_screen_save
- get_default_screens-收集屏幕的配置数据。
- get_group_id—获取当前组ID。
- get_legacy_property_list-返回遗留属性列表。
- get_screen_callback为指定的上下文/类型获取适当的屏幕回调。
- group_access_protection-在bp_group_group_access_protection()中为这个扩展过滤访问检查。
- has_submit_button-给定的标记有提交按钮吗?
- 初始化初始化扩展,使用您的配置设置。
- is_screen_enabled—是否开启指定的屏幕?
- maybe_add_submit_button-添加一个提交按钮到编辑表单,如果它需要一个。
- maybe_create_screen-如果我们在正确的页面上,调用create_screen()方法。
- maybe_create_screen_save-如果我们在正确的页面上,调用create_screen_save()方法。
- nonce_field-生成设置表单的nonce字段。
- parse_args_r-递归参数解析。
- parse_legacy_properties—解析遗留属性。
- settings_screen
- settings_screen_save
- setup_access_settings-设置该扩展的访问相关设置。
- setup_admin_hooks-挂钩这个扩展的Admin metabox到BuddyPress,如果必要。
- setup_class_info-设置一些基本信息的扩展。
- setup_create_hooks-挂钩这个扩展的创建步骤进入BuddyPress,如果必要。
- setup_display_hooks-挂钩这个扩展的组标签进入BuddyPress,如果必要。
- setup_edit_hooks-挂钩这个扩展的编辑面板到BuddyPress,如果必要。
- setup_legacy_properties—设置遗留属性。
- setup_screens-基于参数设置屏幕阵列。
- user_can_see_nav_item-确定当前用户是否应该看到这个导航选项卡。
- user_can_visit—确认当前用户是否具有访问权限。
- user_meets_access_condition—当前用户是否满足接入条件。
- widget_display-显示在小部件侧边栏的内容,如果适用。