BP_Suggestions

Base class for the BuddyPress Suggestions API.


Description Description

Originally built to power BuddyPress’ at-mentions suggestions, it’s flexible enough to be used for similar kinds of future core requirements, or those desired by third-party developers.

To implement a new suggestions service, create a new class that extends this one, and update the list of default services in bp_core_get_suggestions(). If you’re building a plugin, it’s recommend that you use the bp_suggestions_services filter to do this. 🙂

While the implementation of the query logic is left to you, it should be as quick and efficient as possible. When implementing the abstract methods in this class, pay close attention to the recommendations provided in the phpDoc blocks, particularly the expected return types.


Source Source

File: bp-core/classes/class-bp-suggestions.php

abstract class BP_Suggestions {

	/**
	 * Default arguments common to all suggestions services.
	 *
	 * If your custom service requires further defaults, add them here.
	 *
	 * @since 2.1.0
	 * @var array
	 */
	protected $default_args = array(
		'limit' => 16,
		'term'  => '',
		'type'  => '',
	);

	/**
	 * Holds the arguments for the query (about to made to the suggestions service).
	 *
	 * This includes `$default_args`, as well as the user-supplied values.
	 *
	 * @since 2.1.0
	 * @var array
	 */
	protected $args = array(
	);


	/**
	 * Constructor.
	 *
	 * @since 2.1.0
	 *
	 * @param array $args Optional. If set, used as the parameters for the suggestions service query.
	 */
	public function __construct( array $args = array() ) {
		if ( ! empty( $args ) ) {
			$this->set_query( $args );
		}
	}

	/**
	 * Set the parameters for the suggestions service query.
	 *
	 * @since 2.1.0
	 *
	 * @param array $args {
	 *     @type int    $limit Maximum number of results to display. Optional, default: 16.
	 *     @type string $type  The name of the suggestion service to use for the request. Mandatory.
	 *     @type string $term  The suggestion service will try to find results that contain this string.
	 *                         Mandatory.
	 * }
	 */
	public function set_query( array $args = array() ) {
		$this->args = wp_parse_args( $args, $this->default_args );
	}

	/**
	 * Validate and sanitise the parameters for the suggestion service query.
	 *
	 * Be sure to call this class' version of this method when implementing it in your own service.
	 * If validation fails, you must return a WP_Error object.
	 *
	 * @since 2.1.0
	 *
	 * @return true|WP_Error If validation fails, return a WP_Error object. On success, return true (bool).
	 */
	public function validate() {
		$this->args['limit'] = absint( $this->args['limit'] );
		$this->args['term']  = trim( sanitize_text_field( $this->args['term'] ) );

		/**
		 * Filters the arguments to be validated for the BP_Suggestions query.
		 *
		 * @since 2.1.0
		 *
		 * @param BP_Suggestions $value Arguments to be validated.
		 * @param BP_Suggestions $this  Current BP_Suggestions instance.
		 */
		$this->args          = apply_filters( 'bp_suggestions_args', $this->args, $this );

		// Check for invalid or missing mandatory parameters.
		if ( ! $this->args['limit'] || ! $this->args['term'] ) {
			return new WP_Error( 'missing_parameter' );
		}

		// Check for blocked users (e.g. deleted accounts, or spammers).
		if ( is_user_logged_in() && ! bp_is_user_active( get_current_user_id() ) ) {
			return new WP_Error( 'invalid_user' );
		}

		/**
		 * Filters the status of validation for the BP_Suggestions query.
		 *
		 * @since 2.1.0
		 *
		 * @param bool           $value Whether or not the values are valid.
		 * @param BP_Suggestions $this  Current BP_Suggestions instance.
		 */
		return apply_filters( 'bp_suggestions_validate_args', true, $this );
	}

	/**
	 * Find and return a list of suggestions that match the query.
	 *
	 * The return type is important. If no matches are found, an empty array must be returned.
	 * Matches must be returned as objects in an array.
	 *
	 * The object format for each match must be: { 'ID': string, 'image': string, 'name': string }
	 * For example: { 'ID': 'admin', 'image': 'http://example.com/logo.png', 'name': 'Name Surname' }
	 *
	 * @since 2.1.0
	 *
	 * @return array|WP_Error Array of results. If there were problems, returns a WP_Error object.
	 */
	abstract public function get_suggestions();
}

Top ↑

Changelog Changelog

Changelog
Version Description
2.1.0 Introduced.


Top ↑

Methods Methods

  • __construct — Constructor.
  • get_suggestions — Find and return a list of suggestions that match the query.
  • set_query — Set the parameters for the suggestions service query.
  • validate — Validate and sanitise the parameters for the suggestion service query.

Top ↑

User Contributed Notes User Contributed Notes

You must log in before being able to contribute a note or feedback.