Using activity as wire in Buddypress, following up
-
I have been trying to find out ways to implement a Facebook-like “write on wall” or “post to profile” functionality, and it seems that I am not alone. After some research, I was lead to this very helpful article written by Brajesh Singh in 2010:
This is a brief report how I adapted the mod to WordPress 3.4.2 + Buddypress 1.6.1 + Buddpress Template Pack 1.2.1. So far everything seems to work. In case of any confusion, this mod does not exactly implement Facebook write-to-wall. The trick here is to enable the status update form on profiles and, when it is used in the profile of user X, append a short piece of text @mentioning user X. The status will thus show up later in X’s “Mention” tab. It will look more like write-to-wall if I manage to combine the “Personal” and “Mention” streams into one, another mod many people seem to want to have.
I am using not the bp-default theme but Twenty-Eleven + Buddpress Template Pack 1.2.1. All the mods suggested by Brajesh Singh basically still work, modulo different locations and some code updates. Please refer to Brajesh’s original article. The following describes the difference.
For Step 1, find lines 65-66 in members/single/activity.php
if ( is_user_logged_in() && bp_is_my_profile() && ( !bp_current_action() || bp_is_current_action( 'just-me' ) ) )
locate_template( array( 'activity/post-form.php'), true );
Change line 65 to
if ( is_user_logged_in() && ( !bp_current_action() || bp_is_current_action( 'just-me' ) ) )
For Step 2, find line 38 of activity/post-form.php
<?php if ( bp_is_active( 'groups' ) && !bp_is_member() && !bp_is_group() ) : ?>
Change to
<?php if ( bp_is_active( 'groups' ) && !bp_is_member() && !bp_is_group() ) : ?>
For Step 3, in functions.php of your theme (create this file if it does not exist)
<?phpfunction bpdev_remove_post_update(){
remove_action( 'wp_ajax_post_update', 'bp_dtheme_post_update' );
}add_action("init","bpdev_remove_post_update");
add_action( 'wp_ajax_post_update', 'bp_mytheme_post_update' );
/* AJAX update posting */
function bp_mytheme_post_update() {
global $bp;/* Check the nonce */
check_admin_referer( 'post_update', '_wpnonce_post_update' );if ( !is_user_logged_in() ) {
echo '-1';
return false;
}if ( empty( $_POST['content'] ) ) {
echo '-1' . __( 'Please enter some content to post.', 'buddypress' ) . '';
return false;
}if ( empty( $_POST['object'] ) && function_exists( 'bp_activity_post_update' ) ) {
if(!bp_is_home() && bp_is_member())
$content="@". bp_get_displayed_user_username()." ".$_POST['content'];
else
$content=$_POST['content'];$activity_id = bp_activity_post_update( array( 'content' => $content ) );
} elseif ( $_POST['object'] == 'groups' ) {
if ( !empty( $_POST['item_id'] )&&function_exists( 'groups_post_update' ) )
$activity_id = groups_post_update( array( 'content' => $_POST['content'], 'group_id' => $_POST['item_id'] ) );
} else
$activity_id = apply_filters( 'bp_activity_custom_update', $_POST['object'], $_POST['item_id'], $_POST['content'] );if ( !$activity_id ) {
echo '-1' . __( 'There was a problem posting your update, please try again.', 'buddypress' ) . '';
return false;
}if ( bp_has_activities ( 'include=' . $activity_id ) ) {
while ( bp_activities() ) {
bp_the_activity();
locate_template( array( 'activity/entry.php' ), true );
}
}
}?>
The code above is mostly the same as that of Brajesh Singh, apart from the beginning. Brajesh’s code starts with:
remove_action( 'wp_ajax_post_update', 'bp_dtheme_post_update' );
add_action( 'wp_ajax_post_update', 'bp_mytheme_post_update' );
It didn’t work for me — my status updates got duplicated. I then found somewhere else that it didn’t work for themes other than bp-default. If you use bp-default, you might need Brajesh’s version.Hope the above helps.
- The topic ‘Using activity as wire in Buddypress, following up’ is closed to new replies.