2012-07-11 16:28:51 +00:00
< ? php
/**
* BP - Default theme functions and definitions
*
* Sets up the theme and provides some helper functions . Some helper functions
* are used in the theme as custom template tags . Others are attached to action and
* filter hooks in WordPress and BuddyPress to change core functionality .
*
* The first function , bp_dtheme_setup (), sets up the theme by registering support
* for various features in WordPress , such as post thumbnails and navigation menus , and
* for BuddyPress , action buttons and javascript localisation .
*
* When using a child theme ( see http :// codex . wordpress . org / Theme_Development , http :// codex . wordpress . org / Child_Themes
* and http :// codex . buddypress . org / theme - development / building - a - buddypress - child - theme / ), you can override
* certain functions ( those wrapped in a function_exists () call ) by defining them first in your
* child theme 's functions.php file. The child theme' s functions . php file is included before the
* parent theme ' s file , so the child theme functions would be used .
*
* Functions that are not pluggable ( not wrapped in function_exists ()) are instead attached
* to a filter or action hook . The hook can be removed by using remove_action () or
* remove_filter () and you can attach your own function to the hook .
*
* For more information on hooks , actions , and filters , see http :// codex . wordpress . org / Plugin_API .
*
* @ package BuddyPress
* @ subpackage BP - Default
* @ since 1.2
*/
2012-08-08 16:49:22 +00:00
if ( ! function_exists ( 'bp_is_active' ) )
return ;
2012-07-11 16:28:51 +00:00
2012-08-08 16:49:22 +00:00
// If BuddyPress is not activated, switch back to the default WP theme
if ( ! defined ( 'BP_VERSION' ) )
2012-07-11 16:28:51 +00:00
switch_theme ( WP_DEFAULT_THEME , WP_DEFAULT_THEME );
/**
* Set the content width based on the theme ' s design and stylesheet .
*
* Used to set the width of images and content . Should be equal to the width the theme
* is designed for , generally via the style . css stylesheet .
*/
if ( ! isset ( $content_width ) )
$content_width = 591 ;
2012-08-08 16:49:22 +00:00
if ( ! function_exists ( 'bp_dtheme_setup' ) ) :
2012-07-11 16:28:51 +00:00
/**
* Sets up theme defaults and registers support for various WordPress and BuddyPress features .
*
* Note that this function is hooked into the after_setup_theme hook , which runs
* before the init hook . The init hook is too late for some features , such as indicating
* support post thumbnails .
*
* To override bp_dtheme_setup () in a child theme , add your own bp_dtheme_setup to your child theme ' s
* functions . php file .
*
2012-08-08 16:49:22 +00:00
* @ global object $bp Global BuddyPress settings object
* @ since 1.5
2012-07-11 16:28:51 +00:00
*/
function bp_dtheme_setup () {
2012-08-08 16:49:22 +00:00
global $bp ;
2012-07-11 16:28:51 +00:00
// Load the AJAX functions for the theme
require ( TEMPLATEPATH . '/_inc/ajax.php' );
// This theme styles the visual editor with editor-style.css to match the theme style.
add_editor_style ();
// This theme uses post thumbnails
add_theme_support ( 'post-thumbnails' );
// Add default posts and comments RSS feed links to head
add_theme_support ( 'automatic-feed-links' );
// Add responsive layout support to bp-default without forcing child
// themes to inherit it if they don't want to
add_theme_support ( 'bp-default-responsive' );
// This theme uses wp_nav_menu() in one location.
register_nav_menus ( array (
'primary' => __ ( 'Primary Navigation' , 'buddypress' ),
) );
// This theme allows users to set a custom background
2012-08-08 16:49:22 +00:00
// Backward-compatibility with WP < 3.4 will be removed in a future release
if ( 3.4 <= bp_get_major_wp_version () ) {
$custom_background_args = array (
'wp-head-callback' => 'bp_dtheme_custom_background_style'
);
add_theme_support ( 'custom-background' , $custom_background_args );
} else {
add_custom_background ( 'bp_dtheme_custom_background_style' );
}
2012-07-11 16:28:51 +00:00
// Add custom header support if allowed
if ( ! defined ( 'BP_DTHEME_DISABLE_CUSTOM_HEADER' ) ) {
define ( 'HEADER_TEXTCOLOR' , 'FFFFFF' );
// The height and width of your custom header. You can hook into the theme's own filters to change these values.
// Add a filter to bp_dtheme_header_image_width and bp_dtheme_header_image_height to change these values.
define ( 'HEADER_IMAGE_WIDTH' , apply_filters ( 'bp_dtheme_header_image_width' , 1250 ) );
define ( 'HEADER_IMAGE_HEIGHT' , apply_filters ( 'bp_dtheme_header_image_height' , 133 ) );
// We'll be using post thumbnails for custom header images on posts and pages. We want them to be 1250 pixels wide by 133 pixels tall.
// Larger images will be auto-cropped to fit, smaller ones will be ignored.
set_post_thumbnail_size ( HEADER_IMAGE_WIDTH , HEADER_IMAGE_HEIGHT , true );
// Add a way for the custom header to be styled in the admin panel that controls custom headers.
2012-08-08 16:49:22 +00:00
// Backward-compatibility with WP < 3.4 will be removed in a future release
if ( 3.4 <= bp_get_major_wp_version () ) {
$custom_header_args = array (
'wp-head-callback' => 'bp_dtheme_header_style' ,
'admin-head-callback' => 'bp_dtheme_admin_header_style'
);
add_theme_support ( 'custom-header' , $custom_header_args );
} else {
add_custom_image_header ( 'bp_dtheme_header_style' , 'bp_dtheme_admin_header_style' );
}
2012-07-11 16:28:51 +00:00
}
if ( ! is_admin () ) {
// Register buttons for the relevant component templates
// Friends button
if ( bp_is_active ( 'friends' ) )
2012-08-08 16:49:22 +00:00
add_action ( 'bp_member_header_actions' , 'bp_add_friend_button' );
2012-07-11 16:28:51 +00:00
// Activity button
if ( bp_is_active ( 'activity' ) )
2012-08-08 16:49:22 +00:00
add_action ( 'bp_member_header_actions' , 'bp_send_public_message_button' );
2012-07-11 16:28:51 +00:00
// Messages button
if ( bp_is_active ( 'messages' ) )
2012-08-08 16:49:22 +00:00
add_action ( 'bp_member_header_actions' , 'bp_send_private_message_button' );
2012-07-11 16:28:51 +00:00
// Group buttons
if ( bp_is_active ( 'groups' ) ) {
2012-08-08 16:49:22 +00:00
add_action ( 'bp_group_header_actions' , 'bp_group_join_button' );
add_action ( 'bp_group_header_actions' , 'bp_group_new_topic_button' );
2012-07-11 16:28:51 +00:00
add_action ( 'bp_directory_groups_actions' , 'bp_group_join_button' );
}
// Blog button
if ( bp_is_active ( 'blogs' ) )
add_action ( 'bp_directory_blogs_actions' , 'bp_blogs_visit_blog_button' );
}
}
add_action ( 'after_setup_theme' , 'bp_dtheme_setup' );
endif ;
if ( ! function_exists ( 'bp_dtheme_enqueue_scripts' ) ) :
/**
* Enqueue theme javascript safely
*
* @ see http :// codex . wordpress . org / Function_Reference / wp_enqueue_script
2012-08-08 16:49:22 +00:00
* @ since 1.5
2012-07-11 16:28:51 +00:00
*/
function bp_dtheme_enqueue_scripts () {
2012-08-08 16:49:22 +00:00
// Bump this when changes are made to bust cache
$version = '20120110' ;
2012-07-11 16:28:51 +00:00
// Enqueue the global JS - Ajax will not work without it
2012-08-08 16:49:22 +00:00
wp_enqueue_script ( 'dtheme-ajax-js' , get_template_directory_uri () . '/_inc/global.js' , array ( 'jquery' ), $version );
2012-07-11 16:28:51 +00:00
// Add words that we need to use in JS to the end of the page so they can be translated and still used.
$params = array (
'my_favs' => __ ( 'My Favorites' , 'buddypress' ),
'accepted' => __ ( 'Accepted' , 'buddypress' ),
'rejected' => __ ( 'Rejected' , 'buddypress' ),
'show_all_comments' => __ ( 'Show all comments for this thread' , 'buddypress' ),
'show_all' => __ ( 'Show all' , 'buddypress' ),
'comments' => __ ( 'comments' , 'buddypress' ),
'close' => __ ( 'Close' , 'buddypress' ),
'view' => __ ( 'View' , 'buddypress' ),
'mark_as_fav' => __ ( 'Favorite' , 'buddypress' ),
'remove_fav' => __ ( 'Remove Favorite' , 'buddypress' )
);
2012-08-08 12:00:19 +00:00
2012-08-08 16:49:22 +00:00
wp_localize_script ( 'dtheme-ajax-js' , 'BP_DTheme' , $params );
2012-07-11 16:28:51 +00:00
}
add_action ( 'wp_enqueue_scripts' , 'bp_dtheme_enqueue_scripts' );
endif ;
if ( ! function_exists ( 'bp_dtheme_enqueue_styles' ) ) :
/**
* Enqueue theme CSS safely
*
* For maximum flexibility , BuddyPress Default ' s stylesheet is enqueued , using wp_enqueue_style () .
* If you ' re building a child theme of bp - default , your stylesheet will also be enqueued ,
* automatically , as dependent on bp - default ' s CSS . For this reason , bp - default child themes are
* not recommended to include bp - default ' s stylesheet using @ import .
*
* If you would prefer to use @ import , or would like to change the way in which stylesheets are
* enqueued , you can override bp_dtheme_enqueue_styles () in your theme ' s functions . php file .
*
* @ see http :// codex . wordpress . org / Function_Reference / wp_enqueue_style
* @ see http :// codex . buddypress . org / releases / 1 - 5 - developer - and - designer - information /
2012-08-08 16:49:22 +00:00
* @ since 1.5
2012-07-11 16:28:51 +00:00
*/
function bp_dtheme_enqueue_styles () {
2012-08-08 16:49:22 +00:00
// Bump this when changes are made to bust cache
$version = '20120110' ;
2012-07-11 16:28:51 +00:00
// Register our main stylesheet
2012-08-08 16:49:22 +00:00
wp_register_style ( 'bp-default-main' , get_template_directory_uri () . '/_inc/css/default.css' , array (), $version );
2012-07-11 16:28:51 +00:00
// If the current theme is a child of bp-default, enqueue its stylesheet
if ( is_child_theme () && 'bp-default' == get_template () ) {
2012-08-08 16:49:22 +00:00
wp_enqueue_style ( get_stylesheet (), get_stylesheet_uri (), array ( 'bp-default-main' ), $version );
2012-07-11 16:28:51 +00:00
}
// Enqueue the main stylesheet
wp_enqueue_style ( 'bp-default-main' );
// Default CSS RTL
if ( is_rtl () )
2012-08-08 16:49:22 +00:00
wp_enqueue_style ( 'bp-default-main-rtl' , get_template_directory_uri () . '/_inc/css/default-rtl.css' , array ( 'bp-default-main' ), $version );
2012-07-11 16:28:51 +00:00
// Responsive layout
if ( current_theme_supports ( 'bp-default-responsive' ) ) {
2012-08-08 16:49:22 +00:00
wp_enqueue_style ( 'bp-default-responsive' , get_template_directory_uri () . '/_inc/css/responsive.css' , array ( 'bp-default-main' ), $version );
2012-07-11 16:28:51 +00:00
2012-08-08 16:49:22 +00:00
if ( is_rtl () )
wp_enqueue_style ( 'bp-default-responsive-rtl' , get_template_directory_uri () . '/_inc/css/responsive-rtl.css' , array ( 'bp-default-responsive' ), $version );
2012-07-11 16:28:51 +00:00
}
}
add_action ( 'wp_enqueue_scripts' , 'bp_dtheme_enqueue_styles' );
endif ;
if ( ! function_exists ( 'bp_dtheme_admin_header_style' ) ) :
/**
* Styles the header image displayed on the Appearance > Header admin panel .
*
* Referenced via add_custom_image_header () in bp_dtheme_setup () .
*
* @ since 1.2
*/
function bp_dtheme_admin_header_style () {
?>
< style type = " text/css " >
#headimg {
position : relative ;
color : #fff;
2012-08-08 16:49:22 +00:00
background : url ( < ? php header_image () ?> );
2012-07-11 16:28:51 +00:00
- moz - border - radius - bottomleft : 6 px ;
- webkit - border - bottom - left - radius : 6 px ;
- moz - border - radius - bottomright : 6 px ;
- webkit - border - bottom - right - radius : 6 px ;
margin - bottom : 20 px ;
height : 133 px ;
}
#headimg h1{
position : absolute ;
bottom : 15 px ;
left : 15 px ;
width : 44 % ;
margin : 0 ;
font - family : Arial , Tahoma , sans - serif ;
}
#headimg h1 a{
2012-08-08 16:49:22 +00:00
color : #<?php header_textcolor() ?>;
2012-07-11 16:28:51 +00:00
text - decoration : none ;
border - bottom : none ;
}
#headimg #desc{
2012-08-08 16:49:22 +00:00
color : #<?php header_textcolor() ?>;
2012-07-11 16:28:51 +00:00
font - size : 1 em ;
margin - top :- 0.5 em ;
}
#desc {
display : none ;
}
< ? php if ( 'blank' == get_header_textcolor () ) { ?>
#headimg h1, #headimg #desc {
display : none ;
}
#headimg h1 a, #headimg #desc {
2012-08-08 16:49:22 +00:00
color : #<?php echo HEADER_TEXTCOLOR ?>;
2012-07-11 16:28:51 +00:00
}
< ? php } ?>
</ style >
< ? php
}
endif ;
if ( ! function_exists ( 'bp_dtheme_custom_background_style' ) ) :
/**
* The style for the custom background image or colour .
*
* Referenced via add_custom_background () in bp_dtheme_setup () .
*
* @ see _custom_background_cb ()
2012-08-08 16:49:22 +00:00
* @ since 1.5
2012-07-11 16:28:51 +00:00
*/
function bp_dtheme_custom_background_style () {
$background = get_background_image ();
$color = get_background_color ();
if ( ! $background && ! $color )
return ;
$style = $color ? " background-color: # $color ; " : '' ;
if ( $style && ! $background ) {
$style .= ' background-image: none;' ;
} elseif ( $background ) {
$image = " background-image: url(' $background '); " ;
$repeat = get_theme_mod ( 'background_repeat' , 'repeat' );
if ( ! in_array ( $repeat , array ( 'no-repeat' , 'repeat-x' , 'repeat-y' , 'repeat' ) ) )
$repeat = 'repeat' ;
$repeat = " background-repeat: $repeat ; " ;
$position = get_theme_mod ( 'background_position_x' , 'left' );
if ( ! in_array ( $position , array ( 'center' , 'right' , 'left' ) ) )
$position = 'left' ;
$position = " background-position: top $position ; " ;
$attachment = get_theme_mod ( 'background_attachment' , 'scroll' );
if ( ! in_array ( $attachment , array ( 'fixed' , 'scroll' ) ) )
$attachment = 'scroll' ;
$attachment = " background-attachment: $attachment ; " ;
$style .= $image . $repeat . $position . $attachment ;
}
?>
< style type = " text/css " >
body { < ? php echo trim ( $style ); ?> }
</ style >
< ? php
}
endif ;
if ( ! function_exists ( 'bp_dtheme_header_style' ) ) :
/**
* The styles for the post thumbnails / custom page headers .
*
* Referenced via add_custom_image_header () in bp_dtheme_setup () .
*
* @ global WP_Query $post The current WP_Query object for the current post or page
* @ since 1.2
*/
function bp_dtheme_header_style () {
global $post ;
$header_image = '' ;
if ( is_singular () && current_theme_supports ( 'post-thumbnails' ) && has_post_thumbnail ( $post -> ID ) ) {
$image = wp_get_attachment_image_src ( get_post_thumbnail_id ( $post -> ID ), 'post-thumbnail' );
// $src, $width, $height
if ( ! empty ( $image ) && $image [ 1 ] >= HEADER_IMAGE_WIDTH )
$header_image = $image [ 0 ];
} else {
$header_image = get_header_image ();
}
?>
< style type = " text/css " >
< ? php if ( ! empty ( $header_image ) ) : ?>
#header { background-image: url(<?php echo $header_image ?>); }
< ? php endif ; ?>
< ? php if ( 'blank' == get_header_textcolor () ) { ?>
#header h1, #header #desc { display: none; }
< ? php } else { ?>
2012-08-08 16:49:22 +00:00
#header h1 a, #desc { color:#<?php header_textcolor() ?>; }
2012-07-11 16:28:51 +00:00
< ? php } ?>
</ style >
< ? php
}
endif ;
if ( ! function_exists ( 'bp_dtheme_widgets_init' ) ) :
/**
* Register widgetised areas , including one sidebar and four widget - ready columns in the footer .
*
* To override bp_dtheme_widgets_init () in a child theme , remove the action hook and add your own
* function tied to the init hook .
*
2012-08-08 16:49:22 +00:00
* @ since 1.5
2012-07-11 16:28:51 +00:00
*/
function bp_dtheme_widgets_init () {
2012-08-08 16:49:22 +00:00
// Register the widget columns
2012-07-11 16:28:51 +00:00
// Area 1, located in the sidebar. Empty by default.
register_sidebar ( array (
'name' => 'Sidebar' ,
'id' => 'sidebar-1' ,
'description' => __ ( 'The sidebar widget area' , 'buddypress' ),
'before_widget' => '<div id="%1$s" class="widget %2$s">' ,
'after_widget' => '</div>' ,
'before_title' => '<h3 class="widgettitle">' ,
'after_title' => '</h3>'
) );
// Area 2, located in the footer. Empty by default.
register_sidebar ( array (
'name' => __ ( 'First Footer Widget Area' , 'buddypress' ),
'id' => 'first-footer-widget-area' ,
'description' => __ ( 'The first footer widget area' , 'buddypress' ),
'before_widget' => '<li id="%1$s" class="widget %2$s">' ,
'after_widget' => '</li>' ,
'before_title' => '<h3 class="widgettitle">' ,
'after_title' => '</h3>' ,
) );
// Area 3, located in the footer. Empty by default.
register_sidebar ( array (
'name' => __ ( 'Second Footer Widget Area' , 'buddypress' ),
'id' => 'second-footer-widget-area' ,
'description' => __ ( 'The second footer widget area' , 'buddypress' ),
'before_widget' => '<li id="%1$s" class="widget %2$s">' ,
'after_widget' => '</li>' ,
'before_title' => '<h3 class="widgettitle">' ,
'after_title' => '</h3>' ,
) );
// Area 4, located in the footer. Empty by default.
register_sidebar ( array (
'name' => __ ( 'Third Footer Widget Area' , 'buddypress' ),
'id' => 'third-footer-widget-area' ,
'description' => __ ( 'The third footer widget area' , 'buddypress' ),
'before_widget' => '<li id="%1$s" class="widget %2$s">' ,
'after_widget' => '</li>' ,
'before_title' => '<h3 class="widgettitle">' ,
'after_title' => '</h3>' ,
) );
// Area 5, located in the footer. Empty by default.
register_sidebar ( array (
'name' => __ ( 'Fourth Footer Widget Area' , 'buddypress' ),
'id' => 'fourth-footer-widget-area' ,
'description' => __ ( 'The fourth footer widget area' , 'buddypress' ),
'before_widget' => '<li id="%1$s" class="widget %2$s">' ,
'after_widget' => '</li>' ,
'before_title' => '<h3 class="widgettitle">' ,
'after_title' => '</h3>' ,
) );
}
add_action ( 'widgets_init' , 'bp_dtheme_widgets_init' );
endif ;
if ( ! function_exists ( 'bp_dtheme_blog_comments' ) ) :
/**
* Template for comments and pingbacks .
*
* To override this walker in a child theme without modifying the comments template
* simply create your own bp_dtheme_blog_comments (), and that function will be used instead .
*
* Used as a callback by wp_list_comments () for displaying the comments .
*
* @ param mixed $comment Comment record from database
* @ param array $args Arguments from wp_list_comments () call
* @ param int $depth Comment nesting level
* @ see wp_list_comments ()
* @ since 1.2
*/
function bp_dtheme_blog_comments ( $comment , $args , $depth ) {
$GLOBALS [ 'comment' ] = $comment ;
if ( 'pingback' == $comment -> comment_type )
return false ;
if ( 1 == $depth )
$avatar_size = 50 ;
else
$avatar_size = 25 ;
?>
2012-08-08 16:49:22 +00:00
< li < ? php comment_class () ?> id="comment-<?php comment_ID() ?>">
2012-07-11 16:28:51 +00:00
< div class = " comment-avatar-box " >
< div class = " avb " >
2012-08-08 16:49:22 +00:00
< a href = " <?php echo get_comment_author_url() ?> " rel = " nofollow " >
2012-07-11 16:28:51 +00:00
< ? php if ( $comment -> user_id ) : ?>
2012-08-08 16:49:22 +00:00
< ? php echo bp_core_fetch_avatar ( array ( 'item_id' => $comment -> user_id , 'width' => $avatar_size , 'height' => $avatar_size , 'email' => $comment -> comment_author_email ) ) ?>
2012-07-11 16:28:51 +00:00
< ? php else : ?>
2012-08-08 16:49:22 +00:00
< ? php echo get_avatar ( $comment , $avatar_size ) ?>
2012-07-11 16:28:51 +00:00
< ? php endif ; ?>
</ a >
</ div >
</ div >
< div class = " comment-content " >
< div class = " comment-meta " >
< p >
< ? php
/* translators: 1: comment author url, 2: comment author name, 3: comment permalink, 4: comment date/timestamp*/
printf ( __ ( '<a href="%1$s" rel="nofollow">%2$s</a> said on <a href="%3$s"><span class="time-since">%4$s</span></a>' , 'buddypress' ), get_comment_author_url (), get_comment_author (), get_comment_link (), get_comment_date () );
?>
</ p >
</ div >
< div class = " comment-entry " >
< ? php if ( $comment -> comment_approved == '0' ) : ?>
< em class = " moderate " >< ? php _e ( 'Your comment is awaiting moderation.' , 'buddypress' ); ?> </em>
< ? php endif ; ?>
2012-08-08 16:49:22 +00:00
< ? php comment_text () ?>
2012-07-11 16:28:51 +00:00
</ div >
< div class = " comment-options " >
< ? php if ( comments_open () ) : ?>
< ? php comment_reply_link ( array ( 'depth' => $depth , 'max_depth' => $args [ 'max_depth' ] ) ); ?>
< ? php endif ; ?>
< ? php if ( current_user_can ( 'edit_comment' , $comment -> comment_ID ) ) : ?>
2012-08-08 16:49:22 +00:00
< ? php printf ( '<a class="button comment-edit-link bp-secondary-action" href="%1$s" title="%2$s">%3$s</a> ' , get_edit_comment_link ( $comment -> comment_ID ), esc_attr__ ( 'Edit comment' , 'buddypress' ), __ ( 'Edit' , 'buddypress' ) ) ?>
2012-07-11 16:28:51 +00:00
< ? php endif ; ?>
</ div >
</ div >
< ? php
}
endif ;
if ( ! function_exists ( 'bp_dtheme_page_on_front' ) ) :
/**
* Return the ID of a page set as the home page .
*
* @ return false | int ID of page set as the home page
* @ since 1.2
*/
function bp_dtheme_page_on_front () {
if ( 'page' != get_option ( 'show_on_front' ) )
return false ;
return apply_filters ( 'bp_dtheme_page_on_front' , get_option ( 'page_on_front' ) );
}
endif ;
if ( ! function_exists ( 'bp_dtheme_activity_secondary_avatars' ) ) :
/**
* Add secondary avatar image to this activity stream ' s record , if supported .
*
* @ param string $action The text of this activity
* @ param BP_Activity_Activity $activity Activity object
* @ package BuddyPress Theme
* @ return string
* @ since 1.2 . 6
*/
function bp_dtheme_activity_secondary_avatars ( $action , $activity ) {
switch ( $activity -> component ) {
case 'groups' :
case 'friends' :
// Only insert avatar if one exists
if ( $secondary_avatar = bp_get_activity_secondary_avatar () ) {
$reverse_content = strrev ( $action );
$position = strpos ( $reverse_content , 'a<' );
$action = substr_replace ( $action , $secondary_avatar , - $position - 2 , 0 );
}
break ;
}
return $action ;
}
add_filter ( 'bp_get_activity_action_pre_meta' , 'bp_dtheme_activity_secondary_avatars' , 10 , 2 );
endif ;
if ( ! function_exists ( 'bp_dtheme_show_notice' ) ) :
/**
* Show a notice when the theme is activated - workaround by Ozh ( http :// old . nabble . com / Activation - hook - exist - for - themes -- td25211004 . html )
*
* @ since 1.2
*/
function bp_dtheme_show_notice () {
global $pagenow ;
// Bail if bp-default theme was not just activated
if ( empty ( $_GET [ 'activated' ] ) || ( 'themes.php' != $pagenow ) || ! is_admin () )
return ;
?>
< div id = " message " class = " updated fade " >
2012-08-08 16:49:22 +00:00
< p >< ? php printf ( __ ( 'Theme activated! This theme contains <a href="%s">custom header image</a> support and <a href="%s">sidebar widgets</a>.' , 'buddypress' ), admin_url ( 'themes.php?page=custom-header' ), admin_url ( 'widgets.php' ) ) ?> </p>
2012-07-11 16:28:51 +00:00
</ div >
< style type = " text/css " > #message2, #message0 { display: none; }</style>
< ? php
}
add_action ( 'admin_notices' , 'bp_dtheme_show_notice' );
endif ;
if ( ! function_exists ( 'bp_dtheme_main_nav' ) ) :
/**
* wp_nav_menu () callback from the main navigation in header . php
*
* Used when the custom menus haven ' t been configured .
*
2012-08-08 16:49:22 +00:00
* @ global object $bp Global BuddyPress settings object
2012-07-11 16:28:51 +00:00
* @ param array Menu arguments from wp_nav_menu ()
* @ see wp_nav_menu ()
2012-08-08 16:49:22 +00:00
* @ since 1.5
2012-07-11 16:28:51 +00:00
*/
function bp_dtheme_main_nav ( $args ) {
2012-08-08 16:49:22 +00:00
global $bp ;
2012-07-11 16:28:51 +00:00
$pages_args = array (
'depth' => 0 ,
'echo' => false ,
'exclude' => '' ,
'title_li' => ''
);
$menu = wp_page_menu ( $pages_args );
$menu = str_replace ( array ( '<div class="menu"><ul>' , '</ul></div>' ), array ( '<ul id="nav">' , '</ul><!-- #nav -->' ), $menu );
echo $menu ;
do_action ( 'bp_nav_items' );
}
endif ;
if ( ! function_exists ( 'bp_dtheme_page_menu_args' ) ) :
/**
* Get our wp_nav_menu () fallback , bp_dtheme_main_nav (), to show a home link .
*
* @ param array $args Default values for wp_page_menu ()
* @ see wp_page_menu ()
2012-08-08 16:49:22 +00:00
* @ since 1.5
2012-07-11 16:28:51 +00:00
*/
function bp_dtheme_page_menu_args ( $args ) {
$args [ 'show_home' ] = true ;
return $args ;
}
add_filter ( 'wp_page_menu_args' , 'bp_dtheme_page_menu_args' );
endif ;
if ( ! function_exists ( 'bp_dtheme_comment_form' ) ) :
/**
* Applies BuddyPress customisations to the post comment form .
*
2012-08-08 16:49:22 +00:00
* @ global string $user_identity The display name of the user
2012-07-11 16:28:51 +00:00
* @ param array $default_labels The default options for strings , fields etc in the form
* @ see comment_form ()
2012-08-08 16:49:22 +00:00
* @ since 1.5
2012-07-11 16:28:51 +00:00
*/
function bp_dtheme_comment_form ( $default_labels ) {
2012-08-08 16:49:22 +00:00
global $user_identity ;
2012-07-11 16:28:51 +00:00
$commenter = wp_get_current_commenter ();
2012-08-08 16:49:22 +00:00
$req = get_option ( 'require_name_email' );
$aria_req = ( $req ? " aria-required='true' " : '' );
$fields = array (
2012-07-11 16:28:51 +00:00
'author' => '<p class="comment-form-author">' . '<label for="author">' . __ ( 'Name' , 'buddypress' ) . ( $req ? '<span class="required"> *</span>' : '' ) . '</label> ' .
'<input id="author" name="author" type="text" value="' . esc_attr ( $commenter [ 'comment_author' ] ) . '" size="30"' . $aria_req . ' /></p>' ,
'email' => '<p class="comment-form-email"><label for="email">' . __ ( 'Email' , 'buddypress' ) . ( $req ? '<span class="required"> *</span>' : '' ) . '</label> ' .
'<input id="email" name="email" type="text" value="' . esc_attr ( $commenter [ 'comment_author_email' ] ) . '" size="30"' . $aria_req . ' /></p>' ,
'url' => '<p class="comment-form-url"><label for="url">' . __ ( 'Website' , 'buddypress' ) . '</label>' .
'<input id="url" name="url" type="text" value="' . esc_attr ( $commenter [ 'comment_author_url' ] ) . '" size="30" /></p>' ,
);
$new_labels = array (
'comment_field' => '<p class="form-textarea"><textarea name="comment" id="comment" cols="60" rows="10" aria-required="true"></textarea></p>' ,
'fields' => apply_filters ( 'comment_form_default_fields' , $fields ),
'logged_in_as' => '' ,
'must_log_in' => '<p class="alert">' . sprintf ( __ ( 'You must be <a href="%1$s">logged in</a> to post a comment.' , 'buddypress' ), wp_login_url ( get_permalink () ) ) . '</p>' ,
'title_reply' => __ ( 'Leave a reply' , 'buddypress' )
);
return apply_filters ( 'bp_dtheme_comment_form' , array_merge ( $default_labels , $new_labels ) );
}
add_filter ( 'comment_form_defaults' , 'bp_dtheme_comment_form' , 10 );
endif ;
if ( ! function_exists ( 'bp_dtheme_before_comment_form' ) ) :
/**
* Adds the user ' s avatar before the comment form box .
*
* The 'comment_form_top' action is used to insert our HTML within < div id = " reply " >
* so that the nested comments comment - reply javascript moves the entirety of the comment reply area .
*
* @ see comment_form ()
2012-08-08 16:49:22 +00:00
* @ since 1.5
2012-07-11 16:28:51 +00:00
*/
function bp_dtheme_before_comment_form () {
?>
< div class = " comment-avatar-box " >
< div class = " avb " >
< ? php if ( bp_loggedin_user_id () ) : ?>
2012-08-08 16:49:22 +00:00
< a href = " <?php echo bp_loggedin_user_domain() ?> " >
< ? php echo get_avatar ( bp_loggedin_user_id (), 50 ) ?>
2012-07-11 16:28:51 +00:00
</ a >
< ? php else : ?>
2012-08-08 16:49:22 +00:00
< ? php echo get_avatar ( 0 , 50 ) ?>
2012-07-11 16:28:51 +00:00
< ? php endif ; ?>
</ div >
</ div >
< div class = " comment-content standard-form " >
< ? php
}
add_action ( 'comment_form_top' , 'bp_dtheme_before_comment_form' );
endif ;
if ( ! function_exists ( 'bp_dtheme_after_comment_form' ) ) :
/**
* Closes tags opened in bp_dtheme_before_comment_form () .
*
* @ see bp_dtheme_before_comment_form ()
* @ see comment_form ()
2012-08-08 16:49:22 +00:00
* @ since 1.5
2012-07-11 16:28:51 +00:00
*/
function bp_dtheme_after_comment_form () {
?>
</ div ><!-- . comment - content standard - form -->
< ? php
}
add_action ( 'comment_form' , 'bp_dtheme_after_comment_form' );
endif ;
if ( ! function_exists ( 'bp_dtheme_sidebar_login_redirect_to' ) ) :
/**
* Adds a hidden " redirect_to " input field to the sidebar login form .
*
2012-08-08 16:49:22 +00:00
* @ since 1.5
2012-07-11 16:28:51 +00:00
*/
function bp_dtheme_sidebar_login_redirect_to () {
2012-08-08 16:49:22 +00:00
$redirect_to = apply_filters ( 'bp_no_access_redirect' , ! empty ( $_REQUEST [ 'redirect_to' ] ) ? $_REQUEST [ 'redirect_to' ] : '' );
?>
2012-07-11 16:28:51 +00:00
< input type = " hidden " name = " redirect_to " value = " <?php echo esc_attr( $redirect_to ); ?> " />
< ? php
}
add_action ( 'bp_sidebar_login_form' , 'bp_dtheme_sidebar_login_redirect_to' );
endif ;
if ( ! function_exists ( 'bp_dtheme_content_nav' ) ) :
/**
* Display navigation to next / previous pages when applicable
*
2012-08-08 16:49:22 +00:00
* @ global unknown $wp_query
2012-07-11 16:28:51 +00:00
* @ param string $nav_id DOM ID for this navigation
2012-08-08 16:49:22 +00:00
* @ since 1.5
2012-07-11 16:28:51 +00:00
*/
function bp_dtheme_content_nav ( $nav_id ) {
global $wp_query ;
2012-08-08 16:49:22 +00:00
if ( $wp_query -> max_num_pages > 1 ) : ?>
2012-07-11 16:28:51 +00:00
< div id = " <?php echo $nav_id ; ?> " class = " navigation " >
< div class = " alignleft " >< ? php next_posts_link ( __ ( '← Previous Entries' , 'buddypress' ) ); ?> </div>
< div class = " alignright " >< ? php previous_posts_link ( __ ( 'Next Entries →' , 'buddypress' ) ); ?> </div>
</ div ><!-- #<?php echo $nav_id; ?> -->
< ? php endif ;
}
endif ;
/**
* Adds the no - js class to the body tag .
*
* This function ensures that the < body > element will have the 'no-js' class by default . If you ' re
* using JavaScript for some visual functionality in your theme , and you want to provide noscript
* support , apply those styles to body . no - js .
*
* The no - js class is removed by the JavaScript created in bp_dtheme_remove_nojs_body_class () .
*
* @ package BuddyPress
2012-08-08 16:49:22 +00:00
* @ since 1.5 . 1
2012-07-11 16:28:51 +00:00
* @ see bp_dtheme_remove_nojs_body_class ()
*/
function bp_dtheme_add_nojs_body_class ( $classes ) {
$classes [] = 'no-js' ;
return array_unique ( $classes );
}
add_filter ( 'bp_get_the_body_class' , 'bp_dtheme_add_nojs_body_class' );
/**
* Dynamically removes the no - js class from the < body > element .
*
* By default , the no - js class is added to the body ( see bp_dtheme_add_no_js_body_class ()) . The
* JavaScript in this function is loaded into the < body > element immediately after the < body > tag
* ( note that it 's hooked to bp_before_header), and uses JavaScript to switch the ' no - js ' body class
* to 'js' . If your theme has styles that should only apply for JavaScript - enabled users , apply them
* to body . js .
*
* This technique is borrowed from WordPress , wp - admin / admin - header . php .
*
* @ package BuddyPress
2012-08-08 16:49:22 +00:00
* @ since 1.5 . 1
2012-07-11 16:28:51 +00:00
* @ see bp_dtheme_add_nojs_body_class ()
*/
function bp_dtheme_remove_nojs_body_class () {
?> <script type="text/javascript">//<![CDATA[
( function (){ var c = document . body . className ; c = c . replace ( / no - js / , 'js' ); document . body . className = c ;})();
//]]></script>
< ? php
}
add_action ( 'bp_before_header' , 'bp_dtheme_remove_nojs_body_class' );
?>