BP_Group_Extension::get_screen_callback( string $context = '', string $type = 'screen' )

Get the appropriate screen callback for the specified context/type.

Description

BP Group Extensions have three special "screen contexts": create, admin, and edit. Each of these contexts has a corresponding _screen() and _screen_save() method, which allow group extension plugins to define different markup and logic for each context.

BP also supports fallback settings_screen() and settings_screen_save() methods, which can be used to define markup and logic that is shared between context. For each context, you may either provide context-specific methods, or you can let BP fall back on the shared settings_* callbacks.

For example, consider a BP_Group_Extension implementation that looks like this:

// … function create_screen( $group_id ) { … } function create_screen_save( $group_id ) { … } function settings_screen( $group_id ) { … } function settings_screen_save( $group_id ) { … } // …

BP_Group_Extension will use your create_ methods for the Create steps, and will use your generic settings_ methods for the Edit and Admin contexts. This schema allows plugin authors maximum flexibility without having to repeat themselves.

The get_screen_callback() method uses a ReflectionClass object to determine whether your extension has provided a given callback.

Parameters

$context

(Optional) Screen context. 'create', 'edit', or 'admin'.

Default value: ''

$type

(Optional) Screen type. 'screen' or 'screen_save'. Default: 'screen'.

Default value: 'screen'

Return

(callable) A callable function handle.

Source

File: bp-groups/classes/class-bp-group-extension.php

	public function get_screen_callback( $context = '', $type = 'screen' ) {
		$callback = '';

		// Try the context-specific callback first.
		$method  = $context . '_' . $type;
		$rmethod = $this->class_reflection->getMethod( $method );
		if ( isset( $rmethod->class ) && $this->class_name === $rmethod->class ) {
			$callback = array( $this, $method );
		}

		if ( empty( $callback ) ) {
			$fallback_method  = 'settings_' . $type;
			$rfallback_method = $this->class_reflection->getMethod( $fallback_method );
			if ( isset( $rfallback_method->class ) && $this->class_name === $rfallback_method->class ) {
				$callback = array( $this, $fallback_method );
			}
		}

		return $callback;
	}

Changelog

Changelog
Version Description
BuddyPress 1.8.0 Introduced.

Questions?

We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.