0, 'high_fiver_id' => 0, 'recipient_id' => 0, 'date' => date( 'Y-m-d H:i:s' ) ); // Parse the defaults with the arguments passed $r = wp_parse_args( $args, $defaults ); extract( $r ); if ( $id ) { $this->id = $id; $this->populate( $this->id ); } else { foreach( $r as $key => $value ) { $this->{$key} = $value; } } } /** * populate() * * This method will populate the object with a row from the database, based on the * ID passed to the constructor. */ function populate() { global $wpdb, $bp, $creds; if ( $row = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$bp->example->table_name} WHERE id = %d", $this->id ) ) ) { $this->high_fiver_id = $row->high_fiver_id; $this->recipient_id = $row->recipient_id; $this->date = $row->date; } } /** * save() * * This method will save an object to the database. It will dynamically switch between * INSERT and UPDATE depending on whether or not the object already exists in the database. */ function save() { global $wpdb, $bp; /*** * In this save() method, you should add pre-save filters to all the values you are * saving to the database. This helps with two things - * * 1. Blanket filtering of values by plugins (for example if a plugin wanted to * force a specific value for all saves) * * 2. Security - attaching a wp_filter_kses() call to all filters, so you are not * saving potentially dangerous values to the database. * * It's very important that for number 2 above, you add a call like this for each * filter to 'bp-example-filters.php' * * add_filter( 'example_data_fieldname1_before_save', 'wp_filter_kses' ); */ $this->high_fiver_id = apply_filters( 'bp_example_data_high_fiver_id_before_save', $this->high_fiver_id, $this->id ); $this->recipient_id = apply_filters( 'bp_example_data_recipient_id_before_save', $this->recipient_id, $this->id ); $this->date = apply_filters( 'bp_example_data_date_before_save', $this->date, $this->id ); // Call a before save action here do_action( 'bp_example_data_before_save', $this ); if ( $this->id ) { // Set up the arguments for wp_insert_post() $wp_update_post_args = array( 'ID' => $this->id, 'post_author' => $this->high_fiver_id, 'post_title' => sprintf( __( '%1$s high-fives %2$s', 'bp-example' ), bp_core_get_user_displayname( $this->high_fiver_id ), bp_core_get_user_displayname( $this->recipient_id ) ) ); // Save the post $result = wp_update_post( $wp_update_post_args ); // We'll store the reciever's ID as postmeta if ( $result ) { update_post_meta( $result, 'bp_example_recipient_id', $this->recipient_id ); } } else { // Set up the arguments for wp_insert_post() $wp_insert_post_args = array( 'post_status' => 'publish', 'post_type' => 'example', 'post_author' => $this->high_fiver_id, 'post_title' => sprintf( __( '%1$s high-fives %2$s', 'bp-example' ), bp_core_get_user_displayname( $this->high_fiver_id ), bp_core_get_user_displayname( $this->recipient_id ) ) ); // Save the post $result = wp_insert_post( $wp_insert_post_args ); // We'll store the reciever's ID as postmeta if ( $result ) { update_post_meta( $result, 'bp_example_recipient_id', $this->recipient_id ); } } /* Add an after save action here */ do_action( 'bp_example_data_after_save', $this ); return $result; } /** * Fire the WP_Query * * @package BuddyPress_Skeleton_Component * @since 1.6 */ function get( $args = array() ) { // Only run the query once if ( empty( $this->query ) ) { $defaults = array( 'high_fiver_id' => 0, 'recipient_id' => 0, 'per_page' => 10, 'paged' => 1 ); $r = wp_parse_args( $args, $defaults ); extract( $r ); $query_args = array( 'post_status' => 'publish', 'post_type' => 'example', 'posts_per_page' => $per_page, 'paged' => $paged, 'meta_query' => array() ); // Some optional query args // Note that some values are cast as arrays. This allows you to query for multiple // authors/recipients at a time if ( $high_fiver_id ) { $query_args['author'] = (array)$high_fiver_id; } // We can filter by postmeta by adding a meta_query argument. Note that if ( $recipient_id ) { $query_args['meta_query'][] = array( 'key' => 'bp_example_recipient_id', 'value' => (array)$recipient_id, 'compare' => 'IN' // Allows $recipient_id to be an array ); } // Run the query, and store as an object property, so we can access from // other methods $this->query = new WP_Query( $query_args ); // Let's also set up some pagination $this->pag_links = paginate_links( array( 'base' => add_query_arg( 'items_page', '%#%' ), 'format' => '', 'total' => ceil( (int) $this->query->found_posts / (int) $this->query->query_vars['posts_per_page'] ), 'current' => (int) $paged, 'prev_text' => '←', 'next_text' => '→', 'mid_size' => 1 ) ); } } /** * Part of our bp_example_has_high_fives() loop * * @package BuddyPress_Skeleton_Component * @since 1.6 */ function have_posts() { return $this->query->have_posts(); } /** * Part of our bp_example_has_high_fives() loop * * @package BuddyPress_Skeleton_Component * @since 1.6 */ function the_post() { return $this->query->the_post(); } /** * delete() * * This method will delete the corresponding row for an object from the database. */ function delete() { return wp_trash_post( $this->id ); } /* Static Functions */ /** * Static functions can be used to bulk delete items in a table, or do something that * doesn't necessarily warrant the instantiation of the class. * * Look at bp-core-classes.php for examples of mass delete. */ function delete_all() { } function delete_by_user_id() { } } ?>