Please help, I am trying to add some custom fields to the activity stream in buddypress but got stuck...
The following code adds two fields successfully to the activity form:
//add fields to activity
function add_activity_extra_fields(){
echo
'<div id="activitty-form-extra-fields">
<input type="url" data-clear-btn="false" name="activity-form-field-url" id="activity-form-field-url" value="" placeholder="Insert link...">
<input type="date" name="activity-form-field-date" id="activity-form-field-date" value="" placeholder="Insert expiry.. ."/>
</div>';
} add_action ( "bp_activity_post_form_options", 'add_activity_extra_fields' );
Then I can read from $_POST and save to a custom table, but it's not working:
//save fields from activity
function save_activity_extra_fields( $content ) {
global $wpdb;
//$act_id = $_POST['activity-form-field-date'];
$usr_id = $_POST['user_id'];
$date = $_POST['activity-form-field-date'];
$url = $_POST['activity-form-field-url'];
$wpdb->insert(
'jrh_bp_activity_extra',
array( 'user_id' => $usr_id, 'date' => $date, 'url' => $url ),
array( '%s' ),
);
} add_action('bp_activity_posted_update', 'save_activity_extra_fields');
I add the fields to the activity form like so:
function add_activity_extra_fields(){
echo
'<div id="activitty-form-extra-fields">
<input type="url" data-clear-btn="false" name="activity-form-field-url" id="activity-form-field-url" value="" placeholder="Inserisci link...">
<input type="date" name="activity-form-field-date" id="activity-form-field-date" value="" placeholder="Inserisci scadenza.. ."/>
</div>';
} add_action ( "bp_activity_post_form_options", 'add_activity_extra_fields' );
Then save to a custom table:
function save_activity_extra_fields( $activity ) {
global $wpdb;
$activity_id = $activity -> id;
$url = $_POST['activity-form-field-url'];
$date = $_POST['activity-form-field-date'];
$save = $wpdb->insert(
'jrh_bp_activity_extra',
array( 'activity_id' => $activity_id, 'date' => $date, 'url' => $url ),
array( '%d', '%s', '%s' ),
);
} add_action('bp_activity_after_save', 'save_activity_extra_fields');
Finally retrieve with the following function...
function read_activity_extra_fields() {
global $activities_template;
global $wpdb;
$id = $activities_template->activity->id;
$url = $wpdb->get_results( "SELECT url FROM `jrh_bp_activity_extra` WHERE activity_id = $id" );
$date = $wpdb->get_results( "SELECT date FROM `jrh_bp_activity_extra` WHERE activity_id = $id" );
$extra_fields = (object) array( 'url' => $url[0]->url, 'date' => $date[0]->date);
return $extra_fields;
}
Unfortunately I couldn't find a better way, so I just call it from my custom entry.php template
<div class="activity-inner-wish-extra">
<?php
$extra_fields = read_activity_extra_fields();
if ( isset($extra_fields->url) ) :
echo '<p class="wish-url">'; echo $extra_fields->url; echo '</p>';
endif;
if ( isset($extra_fields->date) ) :
echo '<p class="wish-expiry">'; echo $extra_fields->date; echo '</p>';
endif;
?>
</div>