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