You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

174 lines
3.7 KiB
PHP

<?php
/**
* The BuddyPress Module.
*
* @since 1.0.32
* @package RankMath
* @subpackage RankMath\BuddyPress
* @author Rank Math <support@rankmath.com>
*/
namespace RankMath\BuddyPress;
use RankMath\Traits\Hooker;
defined( 'ABSPATH' ) || exit;
/**
* BuddyPress class.
*/
class BuddyPress {
use Hooker;
/**
* The Constructor.
*/
public function __construct() {
if ( is_admin() ) {
new Admin();
}
$this->filter( 'rank_math/paper/hash', 'paper' );
$this->action( 'rank_math/vars/register_extra_replacements', 'register_replacements' );
$this->filter( 'rank_math/json_ld', 'json_ld', 11 );
$this->filter( 'rank_math/frontend/title', 'change_activate_title' );
}
/**
* Filter to change the Activate page title.
*
* @param string $title Page title.
*/
public function change_activate_title( $title ) {
if ( function_exists( 'bp_is_current_component' ) && bp_is_current_component( 'activate' ) ) {
return false;
}
return $title;
}
/**
* Add BuddyPress class.
*
* @param array $hash Paper Hash.
*/
public function paper( $hash ) {
$bp_data = [
'BP_User' => bp_is_user(),
'BP_Group' => ! is_singular() && bp_is_groups_component(),
];
return array_merge( $bp_data, $hash );
}
/**
* Collect data to output in JSON-LD.
*
* @param array $data An array of data to output in JSON-LD.
*/
public function json_ld( $data ) {
if ( ! bp_is_user() ) {
return $data;
}
if ( isset( $data['richSnippet'] ) ) {
unset( $data['richSnippet'] );
}
$user_id = bp_displayed_user_id();
$data['ProfilePage'] = [
'@type' => 'ProfilePage',
'@id' => get_author_posts_url( $user_id ),
'headline' => sprintf( 'About %s', get_the_author_meta( 'display_name', $user_id ) ),
'about' => [
'@type' => 'Person',
'name' => get_the_author_meta( 'display_name', $user_id ),
'url' => esc_url( bp_core_get_user_domain( $user_id ) ),
'description' => get_the_author_meta( 'description', $user_id ),
'image' => [
'@type' => 'ImageObject',
'url' => get_avatar_url( $user_id, 96 ),
'height' => 96,
'width' => 96,
],
],
];
return $data;
}
/**
* Register variable replacements for BuddyPress groups.
*/
public function register_replacements() {
rank_math_register_var_replacement(
'group_name',
[
'name' => esc_html__( 'Group name.', 'rank-math' ),
'description' => esc_html__( 'Group name of the current group', 'rank-math' ),
'variable' => 'group_name',
'example' => $this->get_group_name(),
],
[ $this, 'get_group_name' ]
);
rank_math_register_var_replacement(
'group_desc',
[
'name' => esc_html__( 'Group Description.', 'rank-math' ),
'description' => esc_html__( 'Group description of the current group', 'rank-math' ),
'variable' => 'group_desc',
'example' => $this->get_group_desc(),
],
[ $this, 'get_group_desc' ]
);
}
/**
* Retrieves the group name.
*
* @return string
*/
public function get_group_name() {
$group = $this->get_group();
if ( ! is_object( $group ) ) {
return '';
}
return $group->name;
}
/**
* Retrieves the group description.
*
* @return string
*/
public function get_group_desc() {
$group = $this->get_group();
if ( ! is_object( $group ) ) {
return '';
}
return $group->description;
}
/**
* Returns the group object when the current page is the group page.
*
* @return null|Object
*/
private function get_group() {
if ( ! function_exists( 'groups_get_current_group' ) ) {
return '';
}
$group = groups_get_current_group();
if ( ! is_object( $group ) ) {
return '';
}
return $group;
}
}