BBP_Default
Loads bbPress Default Theme functionality
Description Description
This is not a real theme by WordPress standards, and is instead used as the fallback for any WordPress theme that does not have bbPress templates in it.
To make your custom theme bbPress compatible and customize the templates, you can copy these files into your theme without needing to merge anything together; bbPress should safely handle the rest.
See @link BBP_Theme_Compat() for more.
Source Source
File: templates/default/bbpress-functions.php
class BBP_Default extends BBP_Theme_Compat {
/** Functions *************************************************************/
/**
* The main bbPress (Default) Loader
*
* @since 2.1.0 bbPress (r3732)
*/
public function __construct( $properties = array() ) {
parent::__construct( bbp_parse_args( $properties, array(
'id' => 'default',
'name' => 'bbPress Default',
'version' => bbp_get_version(),
'dir' => trailingslashit( bbpress()->themes_dir . 'default' ),
'url' => trailingslashit( bbpress()->themes_url . 'default' ),
), 'default_theme' ) );
$this->setup_actions();
}
/**
* Setup the theme hooks
*
* @since 2.1.0 bbPress (r3732)
*
* @access private
*/
private function setup_actions() {
/** Scripts ***********************************************************/
add_action( 'bbp_enqueue_scripts', array( $this, 'enqueue_styles' ) ); // Enqueue theme CSS
add_action( 'bbp_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); // Enqueue theme JS
add_filter( 'bbp_enqueue_scripts', array( $this, 'localize_topic_script' ) ); // Enqueue theme script localization
add_action( 'bbp_ajax_favorite', array( $this, 'ajax_favorite' ) ); // Handles the topic ajax favorite/unfavorite
add_action( 'bbp_ajax_subscription', array( $this, 'ajax_subscription' ) ); // Handles the topic ajax subscribe/unsubscribe
/** Template Wrappers *************************************************/
add_action( 'bbp_before_main_content', array( $this, 'before_main_content' ) ); // Top wrapper HTML
add_action( 'bbp_after_main_content', array( $this, 'after_main_content' ) ); // Bottom wrapper HTML
/** Override **********************************************************/
do_action_ref_array( 'bbp_theme_compat_actions', array( &$this ) );
}
/**
* Inserts HTML at the top of the main content area to be compatible with
* the Twenty Twelve theme.
*
* @since 2.1.0 bbPress (r3732)
*/
public function before_main_content() {
?>
<div id="bbp-container">
<div id="bbp-content" role="main">
<?php
}
/**
* Inserts HTML at the bottom of the main content area to be compatible with
* the Twenty Twelve theme.
*
* @since 2.1.0 bbPress (r3732)
*/
public function after_main_content() {
?>
</div><!-- #bbp-content -->
</div><!-- #bbp-container -->
<?php
}
/**
* Load the theme CSS
*
* @since 2.1.0 bbPress (r3732)
*/
public function enqueue_styles() {
// Setup the default styling
$defaults = array(
'bbp-default' => array(
'file' => 'css/bbpress.css',
'dependencies' => array()
)
);
// Optionally support an RTL variant
if ( is_rtl() ) {
$defaults['bbp-default-rtl'] = array(
'file' => 'css/bbpress-rtl.css',
'dependencies' => array()
);
}
// Get and filter the bbp-default style
$styles = apply_filters( 'bbp_default_styles', $defaults );
// Enqueue the styles
foreach ( $styles as $handle => $attributes ) {
bbp_enqueue_style( $handle, $attributes['file'], $attributes['dependencies'], $this->version );
}
}
/**
* Enqueue the required JavaScript files
*
* @since 2.1.0 bbPress (r3732)
*/
public function enqueue_scripts() {
// Setup scripts array
$scripts = array();
// Editor scripts
// @see https://bbpress.trac.wordpress.org/ticket/2930
if ( bbp_use_wp_editor() && is_bbpress() ) {
$scripts['bbpress-editor'] = array(
'file' => 'js/editor.js',
'dependencies' => array( 'jquery' )
);
}
// Forum-specific scripts
if ( bbp_is_single_forum() ) {
$scripts['bbpress-engagements'] = array(
'file' => 'js/engagements.js',
'dependencies' => array( 'jquery' )
);
}
// Topic-specific scripts
if ( bbp_is_single_topic() || bbp_is_topic_edit() ) {
// Engagements
$scripts['bbpress-engagements'] = array(
'file' => 'js/engagements.js',
'dependencies' => array( 'jquery' )
);
// Hierarchical replies
if ( bbp_thread_replies() ) {
$scripts['bbpress-reply'] = array(
'file' => 'js/reply.js',
'dependencies' => array( 'jquery' )
);
}
}
// User Profile edit
if ( bbp_is_single_user_edit() ) {
wp_enqueue_script( 'user-profile' );
}
// Filter the scripts
$scripts = apply_filters( 'bbp_default_scripts', $scripts );
// Enqueue the scripts
foreach ( $scripts as $handle => $attributes ) {
bbp_enqueue_script( $handle, $attributes['file'], $attributes['dependencies'], $this->version, true );
}
}
/**
* Load localizations for topic script
*
* These localizations require information that may not be loaded even by init.
*
* @since 2.1.0 bbPress (r3732)
*/
public function localize_topic_script() {
// Single forum or topic
if ( bbp_is_single_forum() || bbp_is_single_topic() ) {
wp_localize_script( 'bbpress-engagements', 'bbpEngagementJS', array(
'object_id' => get_the_ID(),
'bbp_ajaxurl' => bbp_get_ajax_url(),
'generic_ajax_error' => esc_html__( 'Something went wrong. Refresh your browser and try again.', 'bbpress' ),
) );
}
}
/**
* AJAX handler to add or remove a topic from a user's favorites
*
* @since 2.1.0 bbPress (r3732)
*/
public function ajax_favorite() {
// Bail if favorites are not active
if ( ! bbp_is_favorites_active() ) {
bbp_ajax_response( false, esc_html__( 'Favorites are no longer active.', 'bbpress' ), 300 );
}
// Bail if user is not logged in
if ( ! is_user_logged_in() ) {
bbp_ajax_response( false, esc_html__( 'Please login to favorite.', 'bbpress' ), 301 );
}
// Get user and topic data
$user_id = bbp_get_current_user_id();
$id = ! empty( $_POST['id'] ) ? intval( $_POST['id'] ) : 0;
$type = ! empty( $_POST['type'] ) ? sanitize_key( $_POST['type'] ) : 'post';
// Bail if user cannot add favorites for this user
if ( ! current_user_can( 'edit_user', $user_id ) ) {
bbp_ajax_response( false, esc_html__( 'You do not have permission to do this.', 'bbpress' ), 302 );
}
// Get the object
if ( 'post' === $type ) {
$object = get_post( $id );
}
// Bail if topic cannot be found
if ( empty( $object ) ) {
bbp_ajax_response( false, esc_html__( 'Favorite failed.', 'bbpress' ), 303 );
}
// Bail if user did not take this action
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'toggle-favorite_' . $object->ID ) ) {
bbp_ajax_response( false, esc_html__( 'Are you sure you meant to do that?', 'bbpress' ), 304 );
}
// Take action
$status = bbp_is_user_favorite( $user_id, $object->ID )
? bbp_remove_user_favorite( $user_id, $object->ID )
: bbp_add_user_favorite( $user_id, $object->ID );
// Bail if action failed
if ( empty( $status ) ) {
bbp_ajax_response( false, esc_html__( 'The request was unsuccessful. Please try again.', 'bbpress' ), 305 );
}
// Put subscription attributes in convenient array
$attrs = array(
'object_id' => $object->ID,
'object_type' => $type,
'user_id' => $user_id
);
// Action succeeded
bbp_ajax_response( true, bbp_get_user_favorites_link( $attrs, $user_id, false ), 200 );
}
/**
* AJAX handler to Subscribe/Unsubscribe a user from a topic
*
* @since 2.1.0 bbPress (r3732)
*/
public function ajax_subscription() {
// Bail if subscriptions are not active
if ( ! bbp_is_subscriptions_active() ) {
bbp_ajax_response( false, esc_html__( 'Subscriptions are no longer active.', 'bbpress' ), 300 );
}
// Bail if user is not logged in
if ( ! is_user_logged_in() ) {
bbp_ajax_response( false, esc_html__( 'Please login to subscribe.', 'bbpress' ), 301 );
}
// Get user and topic data
$user_id = bbp_get_current_user_id();
$id = ! empty( $_POST['id'] ) ? intval( $_POST['id'] ) : 0;
$type = ! empty( $_POST['type'] ) ? sanitize_key( $_POST['type'] ) : 'post';
// Bail if user cannot add favorites for this user
if ( ! current_user_can( 'edit_user', $user_id ) ) {
bbp_ajax_response( false, esc_html__( 'You do not have permission to do this.', 'bbpress' ), 302 );
}
// Get the object
if ( 'post' === $type ) {
$object = get_post( $id );
}
// Bail if topic cannot be found
if ( empty( $object ) ) {
bbp_ajax_response( false, esc_html__( 'Subscription failed.', 'bbpress' ), 303 );
}
// Bail if user did not take this action
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'toggle-subscription_' . $object->ID ) ) {
bbp_ajax_response( false, esc_html__( 'Are you sure you meant to do that?', 'bbpress' ), 304 );
}
// Take action
$status = bbp_is_user_subscribed( $user_id, $object->ID )
? bbp_remove_user_subscription( $user_id, $object->ID )
: bbp_add_user_subscription( $user_id, $object->ID );
// Bail if action failed
if ( empty( $status ) ) {
bbp_ajax_response( false, esc_html__( 'The request was unsuccessful. Please try again.', 'bbpress' ), 305 );
}
// Put subscription attributes in convenient array
$attrs = array(
'object_id' => $object->ID,
'object_type' => $type,
'user_id' => $user_id
);
// Add separator to topic if favorites is active
if ( ( 'post' === $type ) && ( bbp_get_topic_post_type() === get_post_type( $object ) ) && bbp_is_favorites_active() ) {
$attrs['before'] = ' | ';
}
// Action succeeded
bbp_ajax_response( true, bbp_get_user_subscribe_link( $attrs, $user_id, false ), 200 );
}
}
Changelog Changelog
| Version | Description |
|---|---|
| 2.1.0 | Introduced. |
Methods Methods
- __construct — The main bbPress (Default) Loader
- after_main_content — Inserts HTML at the bottom of the main content area to be compatible with the Twenty Twelve theme.
- ajax_favorite — AJAX handler to add or remove a topic from a user's favorites
- ajax_subscription — AJAX handler to Subscribe/Unsubscribe a user from a topic
- before_main_content — Inserts HTML at the top of the main content area to be compatible with the Twenty Twelve theme.
- enqueue_scripts — Enqueue the required JavaScript files
- enqueue_styles — Load the theme CSS
- localize_topic_script — Load localizations for topic script
- setup_actions — Setup the theme hooks