bp_nouveau_ajax_object_template_loader()
Load the template loop for the current object.
Description
Return
(string) Template loop for the specified object.
Source
File: bp-templates/bp-nouveau/includes/ajax.php
function bp_nouveau_ajax_object_template_loader() {
if ( ! bp_is_post_request() ) {
wp_send_json_error();
}
if ( empty( $_POST['object'] ) ) {
wp_send_json_error();
}
$object = sanitize_title( $_POST['object'] );
// Bail if object is not an active component to prevent arbitrary file inclusion.
if ( ! bp_is_active( $object ) ) {
wp_send_json_error();
}
// Nonce check!
if ( empty( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'bp_nouveau_' . $object ) ) {
wp_send_json_error();
}
$result = array();
if ( 'activity' === $object ) {
$scope = '';
if ( ! empty( $_POST['scope'] ) ) {
$scope = sanitize_text_field( $_POST['scope'] );
}
// We need to calculate and return the feed URL for each scope.
switch ( $scope ) {
case 'friends':
$feed_url = bp_loggedin_user_domain() . bp_get_activity_slug() . '/friends/feed/';
break;
case 'groups':
$feed_url = bp_loggedin_user_domain() . bp_get_activity_slug() . '/groups/feed/';
break;
case 'favorites':
$feed_url = bp_loggedin_user_domain() . bp_get_activity_slug() . '/favorites/feed/';
break;
case 'mentions':
$feed_url = bp_loggedin_user_domain() . bp_get_activity_slug() . '/mentions/feed/';
// Get user new mentions
$new_mentions = bp_get_user_meta( bp_loggedin_user_id(), 'bp_new_mentions', true );
// If we have some, include them into the returned json before deleting them
if ( is_array( $new_mentions ) ) {
$result['new_mentions'] = $new_mentions;
// Clear new mentions
bp_activity_clear_new_mentions( bp_loggedin_user_id() );
}
break;
default:
$feed_url = bp_get_sitewide_activity_feed_link();
break;
}
/**
* Filters the browser URL for the template loader.
*
* @since BuddyPress 3.0.0
*
* @param string $feed_url Template feed url.
* @param string $scope Current component scope.
*/
$result['feed_url'] = apply_filters( 'bp_nouveau_ajax_object_template_loader', $feed_url, $scope );
}
/*
* AJAX requests happen too early to be seen by bp_update_is_directory()
* so we do it manually here to ensure templates load with the correct
* context. Without this check, templates will load the 'single' version
* of themselves rather than the directory version.
*/
if ( ! bp_current_action() ) {
bp_update_is_directory( true, bp_current_component() );
}
// Get the template path based on the 'template' variable via the AJAX request.
$template = isset( $_POST['template'] ) ? wp_unslash( $_POST['template'] ) : '';
switch ( $template ) {
case 'group_members' :
case 'groups/single/members' :
$template_part = 'groups/single/members-loop.php';
break;
case 'group_requests' :
$template_part = 'groups/single/requests-loop.php';
break;
case 'member_notifications' :
$template_part = 'members/single/notifications/notifications-loop.php';
break;
default :
$template_part = $object . '/' . $object . '-loop.php';
break;
}
ob_start();
$template_path = bp_locate_template( array( $template_part ), false );
/**
* Filters the server path for the template loader.
*
* @since BuddyPress 3.0.0
*
* @param string Template file path.
*/
$template_path = apply_filters( 'bp_nouveau_object_template_path', $template_path );
load_template( $template_path );
$result['contents'] = ob_get_contents();
ob_end_clean();
if ( 'members' === $object ) {
$result['count'] = $GLOBALS["members_template"]->total_member_count;
} elseif ( 'groups' === $object ) {
$result['count'] = $GLOBALS["groups_template"]->group_count;
} elseif ( 'activity' === $object ) {
//$result['count'] = $GLOBALS["activities_template"]->activity_count;
}
$result = apply_filters( 'bp_nouveau_object_template_result', $result, $object );
// Locate the object template.
wp_send_json_success( $result );
}
Changelog
| Version | Description |
|---|---|
| BuddyPress 3.0.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.