/**
  * Set up the BuddyPress-specific theme compat methods.
  *
  * Themes should use this method in their constructor.
  *
  * @since BuddyPress (1.7.0)
  */
 protected function start()
 {
     // Sanity check
     if (!bp_use_theme_compat_with_current_theme()) {
         return;
     }
     // Setup methods
     $this->setup_globals();
     $this->setup_actions();
 }
/**
 * Load a specific template file with fallback support.
 *
 * Example:
 *   bp_core_load_template( 'members/index' );
 * Loads:
 *   wp-content/themes/[activated_theme]/members/index.php
 *
 * @param array $templates Array of templates to attempt to load.
 */
function bp_core_load_template($templates)
{
    global $wp_query;
    // Reset the post.
    bp_theme_compat_reset_post(array('ID' => 0, 'is_404' => true, 'post_status' => 'publish'));
    // Set theme compat to false since the reset post function automatically sets
    // theme compat to true.
    bp_set_theme_compat_active(false);
    // Fetch each template and add the php suffix.
    $filtered_templates = array();
    foreach ((array) $templates as $template) {
        $filtered_templates[] = $template . '.php';
    }
    // Only perform template lookup for bp-default themes.
    if (!bp_use_theme_compat_with_current_theme()) {
        $template = locate_template((array) $filtered_templates, false);
        // Theme compat doesn't require a template lookup.
    } else {
        $template = '';
    }
    /**
     * Filters the template locations.
     *
     * Allows plugins to alter where the template files are located.
     *
     * @since 1.1.0
     *
     * @param string $template           Located template path.
     * @param array  $filtered_templates Array of templates to attempt to load.
     */
    $located_template = apply_filters('bp_located_template', $template, $filtered_templates);
    if (!empty($located_template)) {
        // Template was located, lets set this as a valid page and not a 404.
        status_header(200);
        $wp_query->is_page = true;
        $wp_query->is_singular = true;
        $wp_query->is_404 = false;
        /**
         * Fires before the loading of a located template file.
         *
         * @since 1.6.0
         *
         * @param string $located_template Template found to be loaded.
         */
        do_action('bp_core_pre_load_template', $located_template);
        /**
         * Filters the selected template right before loading.
         *
         * @since 1.1.0
         *
         * @param string $located_template Template found to be loaded.
         */
        load_template(apply_filters('bp_load_template', $located_template));
        /**
         * Fires after the loading of a located template file.
         *
         * @since 1.6.0
         *
         * @param string $located_template Template found that was loaded.
         */
        do_action('bp_core_post_load_template', $located_template);
        // Kill any other output after this.
        exit;
        // No template found, so setup theme compatibility.
        // @todo Some other 404 handling if theme compat doesn't kick in.
    } else {
        // We know where we are, so reset important $wp_query bits here early.
        // The rest will be done by bp_theme_compat_reset_post() later.
        if (is_buddypress()) {
            status_header(200);
            $wp_query->is_page = true;
            $wp_query->is_singular = true;
            $wp_query->is_404 = false;
        }
        /**
         * Fires if there are no found templates to load and theme compat is needed.
         *
         * @since 1.7.0
         */
        do_action('bp_setup_theme_compat');
    }
}
/**
 * Attempt to load a custom BP functions file, similar to each themes functions.php file.
 *
 * @since 1.7.0
 *
 * @global string $pagenow
 * @uses bp_locate_template()
 */
function bp_load_theme_functions()
{
    global $pagenow, $wp_query;
    // do not load our custom BP functions file if theme compat is disabled
    if (!bp_use_theme_compat_with_current_theme()) {
        return;
    }
    // Do not include on BuddyPress deactivation
    if (bp_is_deactivation()) {
        return;
    }
    // If the $wp_query global is empty (the main query has not been run,
    // or has been reset), load_template() will fail at setting certain
    // global values. This does not happen on a normal page load, but can
    // cause problems when running automated tests
    if (!is_a($wp_query, 'WP_Query')) {
        return;
    }
    // Only include if not installing or if activating via wp-activate.php
    if (!defined('WP_INSTALLING') || 'wp-activate.php' === $pagenow) {
        bp_locate_template('buddypress-functions.php', true);
    }
}
/**
 * Reset main query vars and filter 'the_content' to output a BuddyPress template part as needed.
 *
 * @since 1.7.0
 *
 * @uses bp_is_single_user() To check if page is single user.
 * @uses bp_get_single_user_template() To get user template.
 * @uses bp_is_single_user_edit() To check if page is single user edit.
 * @uses bp_get_single_user_edit_template() To get user edit template.
 * @uses bp_is_single_view() To check if page is single view.
 * @uses bp_get_single_view_template() To get view template.
 * @uses bp_is_forum_edit() To check if page is forum edit.
 * @uses bp_get_forum_edit_template() To get forum edit template.
 * @uses bp_is_topic_merge() To check if page is topic merge.
 * @uses bp_get_topic_merge_template() To get topic merge template.
 * @uses bp_is_topic_split() To check if page is topic split.
 * @uses bp_get_topic_split_template() To get topic split template.
 * @uses bp_is_topic_edit() To check if page is topic edit.
 * @uses bp_get_topic_edit_template() To get topic edit template.
 * @uses bp_is_reply_edit() To check if page is reply edit.
 * @uses bp_get_reply_edit_template() To get reply edit template.
 * @uses bp_set_theme_compat_template() To set the global theme compat template.
 *
 * @param string $template Template name.
 * @return string $template Template name.
 */
function bp_template_include_theme_compat($template = '')
{
    // If the current theme doesn't need theme compat, bail at this point.
    if (!bp_use_theme_compat_with_current_theme()) {
        return $template;
    }
    /**
     * Fires when resetting main query vars and filtering 'the_content' to output BuddyPress template parts.
     *
     * Use this action to execute code that will communicate to BuddyPress's
     * theme compatibility layer whether or not we're replacing the_content()
     * with some other template part.
     *
     * @since 1.7.0
     */
    do_action('bp_template_include_reset_dummy_post_data');
    // Bail if the template already matches a BuddyPress template.
    if (!empty(buddypress()->theme_compat->found_template)) {
        return $template;
    }
    /**
     * If we are relying on BuddyPress's built in theme compatibility to load
     * the proper content, we need to intercept the_content, replace the
     * output, and display ours instead.
     *
     * To do this, we first remove all filters from 'the_content' and hook
     * our own function into it, which runs a series of checks to determine
     * the context, and then uses the built in shortcodes to output the
     * correct results from inside an output buffer.
     *
     * Uses bp_get_theme_compat_templates() to provide fall-backs that
     * should be coded without superfluous mark-up and logic (prev/next
     * navigation, comments, date/time, etc...)
     *
     * Hook into 'bp_get_buddypress_template' to override the array of
     * possible templates, or 'bp_buddypress_template' to override the result.
     */
    if (bp_is_theme_compat_active()) {
        $template = bp_get_theme_compat_templates();
        add_filter('the_content', 'bp_replace_the_content');
        // Add BuddyPress's head action to wp_head.
        if (!has_action('wp_head', 'bp_head')) {
            add_action('wp_head', 'bp_head');
        }
    }
    /**
     * Filters the template name to include.
     *
     * @since 1.7.0
     *
     * @param string $template Template name.
     */
    return apply_filters('bp_template_include_theme_compat', $template);
}
Esempio n. 5
0
/**
 * Load a specific template file with fallback support.
 *
 * Example:
 *   bp_core_load_template( 'members/index' );
 * Loads:
 *   wp-content/themes/[activated_theme]/members/index.php
 *
 * @param array $templates Array of templates to attempt to load.
 * @return bool|null Returns false on failure.
 */
function bp_core_load_template($templates)
{
    global $wp_query;
    // check if BP page belongs to, or is a child of, a BP directory page
    $page_id = false;
    foreach ((array) buddypress()->pages as $page) {
        if ($page->name == buddypress()->unfiltered_uri[buddypress()->unfiltered_uri_offset]) {
            $page_id = $page->id;
            break;
        }
    }
    // Set up reset post args
    $reset_post_args = array('is_404' => true, 'post_status' => 'publish');
    // BP page exists - fill in the $wp_query->post object
    //
    // bp_theme_compat_reset_post() looks at the $wp_query->post object to fill in
    // the post globals
    if (!empty($page_id)) {
        $wp_query->post = get_post($page_id);
        $reset_post_args['ID'] = $page_id;
    } else {
        $reset_post_args['ID'] = 0;
    }
    // Reset the post
    bp_theme_compat_reset_post($reset_post_args);
    // Set theme compat to false since the reset post function automatically sets
    // theme compat to true
    bp_set_theme_compat_active(false);
    // Fetch each template and add the php suffix
    $filtered_templates = array();
    foreach ((array) $templates as $template) {
        $filtered_templates[] = $template . '.php';
    }
    // Only perform template lookup for bp-default themes
    if (!bp_use_theme_compat_with_current_theme()) {
        $template = locate_template((array) $filtered_templates, false);
        // Theme compat doesn't require a template lookup
    } else {
        $template = '';
    }
    // Filter the template locations so that plugins can alter where they are located
    $located_template = apply_filters('bp_located_template', $template, $filtered_templates);
    if (!empty($located_template)) {
        // Template was located, lets set this as a valid page and not a 404.
        status_header(200);
        $wp_query->is_page = true;
        $wp_query->is_singular = true;
        $wp_query->is_404 = false;
        do_action('bp_core_pre_load_template', $located_template);
        load_template(apply_filters('bp_load_template', $located_template));
        do_action('bp_core_post_load_template', $located_template);
        // Kill any other output after this.
        exit;
        // No template found, so setup theme compatability
        // @todo Some other 404 handling if theme compat doesn't kick in
    } else {
        // We know where we are, so reset important $wp_query bits here early.
        // The rest will be done by bp_theme_compat_reset_post() later.
        if (is_buddypress()) {
            status_header(200);
            $wp_query->is_page = true;
            $wp_query->is_singular = true;
            $wp_query->is_404 = false;
        }
        do_action('bp_setup_theme_compat');
    }
}
Esempio n. 6
0
/**
 * Load a specific template file with fallback support.
 *
 * Example:
 *   bp_core_load_template( 'members/index' );
 * Loads:
 *   wp-content/themes/[activated_theme]/members/index.php
 *
 * @param array $templates Array of templates to attempt to load.
 * @return bool|null Returns false on failure.
 */
function bp_core_load_template( $templates ) {
	global $wp_query;

	// Reset the post
	bp_theme_compat_reset_post( array(
		'ID'          => 0,
		'is_404'      => true,
		'post_status' => 'publish',
	) );

	// Set theme compat to false since the reset post function automatically sets
	// theme compat to true
	bp_set_theme_compat_active( false );

	// Fetch each template and add the php suffix
	$filtered_templates = array();
	foreach ( (array) $templates as $template ) {
		$filtered_templates[] = $template . '.php';
	}

	// Only perform template lookup for bp-default themes
	if ( ! bp_use_theme_compat_with_current_theme() ) {
		$template = locate_template( (array) $filtered_templates, false );

	// Theme compat doesn't require a template lookup
	} else {
		$template = '';
	}

	// Filter the template locations so that plugins can alter where they are located
	$located_template = apply_filters( 'bp_located_template', $template, $filtered_templates );
	if ( !empty( $located_template ) ) {
		// Template was located, lets set this as a valid page and not a 404.
		status_header( 200 );
		$wp_query->is_page     = true;
		$wp_query->is_singular = true;
		$wp_query->is_404      = false;

		do_action( 'bp_core_pre_load_template', $located_template );

		load_template( apply_filters( 'bp_load_template', $located_template ) );

		do_action( 'bp_core_post_load_template', $located_template );

		// Kill any other output after this.
		exit();

	// No template found, so setup theme compatibility
	// @todo Some other 404 handling if theme compat doesn't kick in
	} else {

		// We know where we are, so reset important $wp_query bits here early.
		// The rest will be done by bp_theme_compat_reset_post() later.
		if ( is_buddypress() ) {
			status_header( 200 );
			$wp_query->is_page     = true;
			$wp_query->is_singular = true;
			$wp_query->is_404      = false;
		}

		do_action( 'bp_setup_theme_compat' );
	}
}
    public function generate_activity_stream($atts, $content = null)
    {
        //allow to use all those args awesome!
        $atts = shortcode_atts(array('title' => 'Latest Activity', 'pagination' => 'true', 'display_comments' => 'threaded', 'include' => false, 'exclude' => false, 'in' => false, 'sort' => 'DESC', 'page' => 1, 'per_page' => 5, 'max' => false, 'scope' => false, 'user_id' => false, 'object' => false, 'action' => false, 'primary_id' => false, 'secondary_id' => false, 'search_terms' => false, 'use_compat' => bp_use_theme_compat_with_current_theme(), 'allow_posting' => false), $atts);
        extract($atts);
        //hide on user activity, activity directory and group activity
        if (is_user_logged_in() && (function_exists('bp_is_activity_component') && bp_is_activity_component() || function_exists('bp_is_group_home') && bp_is_group_home())) {
            return '';
        }
        ob_start();
        ?>
	
    <?php 
        if ($use_compat) {
            ?>
        <div id="buddypress">
    <?php 
        }
        ?>
		
	<?php 
        if ($title) {
            ?>
            <h3 class="activity-shortcode-title"><?php 
            echo $title;
            ?>
</h3>
        <?php 
        }
        ?>
    
		
        <?php 
        do_action('bp_before_activity_loop');
        ?>
			
		<?php 
        if ($allow_posting && is_user_logged_in()) {
            ?>

			<?php 
            bp_locate_template(array('activity/post-form.php'), true);
            ?>

		<?php 
        }
        ?>
			
        <?php 
        if (bp_has_activities($atts)) {
            ?>
            <div class="activity <?php 
            if (!$display_comments) {
                ?>
 hide-activity-comments<?php 
            }
            ?>
 shortcode-activity-stream">

                 <?php 
            if (empty($_POST['page'])) {
                ?>

                    <ul id="activity-stream" class="activity-list item-list">

                 <?php 
            }
            ?>

                 <?php 
            while (bp_activities()) {
                bp_the_activity();
                ?>

                    <?php 
                bp_get_template_part('activity/entry');
                ?>

                 <?php 
            }
            ?>

                 <?php 
            if (empty($_POST['page'])) {
                ?>
                    </ul>
                 <?php 
            }
            ?>
                
                <?php 
            if ($pagination) {
                ?>
                    <div class="pagination">
                        <div class="pag-count"><?php 
                bp_activity_pagination_count();
                ?>
</div>
                        <div class="pagination-links"><?php 
                bp_activity_pagination_links();
                ?>
</div>
                    </div>
                <?php 
            }
            ?>
            </div>

	
	<?php 
        } else {
            ?>

        <div id="message" class="info">
            <p><?php 
            _e('Sorry, there was no activity found. Please try a different filter.', 'buddypress');
            ?>
</p>
        </div>
            
          
    <?php 
        }
        ?>
            
    <?php 
        do_action('bp_after_activity_loop');
        ?>

    <form action="" name="activity-loop-form" id="activity-loop-form" method="post">

        <?php 
        wp_nonce_field('activity_filter', '_wpnonce_activity_filter');
        ?>

    </form>
     <?php 
        if ($use_compat) {
            ?>
       
        </div>
     <?php 
        }
        ?>
    <?php 
        $output = ob_get_clean();
        return $output;
    }